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

Version Description

= v150225 =

(Maintenance Release) Upgrade immediately.

Download this release

Release Info

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

Code changes from version 150203 to 150225

Files changed (100) hide show
  1. changelog.md +127 -114
  2. checksum.txt +1 -1
  3. images/trans-bg.png +0 -0
  4. includes/classes/access-cap-times.inc.php +3 -3
  5. includes/classes/admin-notices.inc.php +2 -2
  6. includes/classes/auto-eots.inc.php +1 -1
  7. includes/classes/aweber.inc.php +2 -2
  8. includes/classes/constants.inc.php +37 -37
  9. includes/classes/files-in.inc.php +7 -7
  10. includes/classes/files.inc.php +5 -5
  11. includes/classes/getresponse.inc.php +1 -1
  12. includes/classes/installation.inc.php +5 -5
  13. includes/classes/list-servers.inc.php +2 -2
  14. includes/classes/login-checks.inc.php +4 -4
  15. includes/classes/login-customizations.inc.php +1 -1
  16. includes/classes/login-redirects.inc.php +2 -2
  17. includes/classes/mailchimp-o.inc.php +1 -1
  18. includes/classes/mailchimp.inc.php +1 -1
  19. includes/classes/menu-pages-rs.inc.php +1 -1
  20. includes/classes/menu-pages-tb.inc.php +1 -1
  21. includes/classes/menu-pages.inc.php +11 -35
  22. includes/classes/meta-box-security.inc.php +4 -4
  23. includes/classes/meta-boxes.inc.php +1 -1
  24. includes/classes/mo-page-in.inc.php +1 -1
  25. includes/classes/mo-page.inc.php +1 -1
  26. includes/classes/op-notices.inc.php +6 -6
  27. includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php +3 -3
  28. includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php +3 -3
  29. includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php +1 -1
  30. includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php +3 -3
  31. includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php +3 -3
  32. includes/classes/paypal-notify-in.inc.php +1 -1
  33. includes/classes/paypal-return-in-no-tx-data.inc.php +2 -2
  34. includes/classes/paypal-return-in-proxy-ty-email.inc.php +2 -2
  35. includes/classes/paypal-return-in-proxy-x-preview.inc.php +1 -1
  36. includes/classes/paypal-return-in.inc.php +3 -3
  37. includes/classes/paypal-utilities.inc.php +3 -3
  38. includes/classes/profile-in.inc.php +1 -1
  39. includes/classes/querys.inc.php +4 -5
  40. includes/classes/readmes.inc.php +4 -7
  41. includes/classes/register-access.inc.php +1 -1
  42. includes/classes/registrations.inc.php +4 -4
  43. includes/classes/sc-files-in.inc.php +3 -3
  44. includes/classes/sc-if-conds-in.inc.php +1 -1
  45. includes/classes/sc-paypal-button-e.inc.php +1 -1
  46. includes/classes/sc-profile-in.inc.php +1 -1
  47. includes/classes/user-new-in.inc.php +2 -2
  48. includes/classes/user-securities.inc.php +16 -4
  49. includes/classes/users-list-in.inc.php +6 -6
  50. includes/classes/utilities.inc.php +6 -6
  51. includes/classes/utils-conds.inc.php +1 -1
  52. includes/classes/utils-dirs.inc.php +1 -1
  53. includes/classes/utils-encryption.inc.php +9 -9
  54. includes/classes/utils-forms.inc.php +1 -1
  55. includes/classes/utils-gets.inc.php +2 -2
  56. includes/classes/utils-logs.inc.php +17 -16
  57. includes/classes/utils-time.inc.php +11 -11
  58. includes/classes/utils-users.inc.php +1 -1
  59. includes/externals/mailchimp/Mailchimp-o.php +1 -1
  60. includes/externals/markdown/nc-markdown.inc.php +2 -2
  61. includes/functions/api-functions.inc.php +43 -43
  62. includes/hooks.inc.php +2 -0
  63. includes/menu-pages/api-ops.inc.php +87 -89
  64. includes/menu-pages/code-samples/api-mop-vars-o.x-php +2 -2
  65. includes/menu-pages/code-samples/api-mop-vars-ro.x-php +1 -1
  66. includes/menu-pages/code-samples/api-mop-vars.x-php +1 -1
  67. includes/menu-pages/code-samples/current-user-subscr-id.x-php +1 -1
  68. includes/menu-pages/code-samples/current-user-subscr-or-wp-id.x-php +1 -1
  69. includes/menu-pages/code-samples/s2-conditional-supplements-2.x-php +1 -1
  70. includes/menu-pages/code-samples/s2-conditional-supplements-3.x-php +2 -2
  71. includes/menu-pages/code-samples/s2drip-example1.x-php +6 -6
  72. includes/menu-pages/code-samples/s2member-paid-registration-time.x-php +1 -1
  73. includes/menu-pages/code-samples/sc-current-user-is-specific-content-else-farm.x-php +1 -1
  74. includes/menu-pages/code-samples/sc-current-user-is-specific-content-else.x-php +1 -1
  75. includes/menu-pages/code-samples/sc-s2-conditional-supplements-1-farm.x-php +1 -1
  76. includes/menu-pages/code-samples/sc-s2-conditional-supplements-1.x-php +2 -2
  77. includes/menu-pages/code-samples/sc-s2-conditional-supplements-3-farm.x-php +1 -1
  78. includes/menu-pages/code-samples/sc-s2-conditional-supplements-3.x-php +1 -1
  79. includes/menu-pages/down-ops.inc.php +42 -42
  80. includes/menu-pages/els-ops.inc.php +19 -21
  81. includes/menu-pages/gen-ops.inc.php +1419 -1439
  82. includes/menu-pages/info.inc.php +0 -81
  83. includes/menu-pages/logs.inc.php +25 -25
  84. includes/menu-pages/menu-pages-s-min.js +1 -1
  85. includes/menu-pages/menu-pages-s.js +4 -4
  86. includes/menu-pages/menu-pages.css +69 -43
  87. includes/menu-pages/mms-ops.inc.php +10 -12
  88. includes/menu-pages/paypal-buttons.inc.php +41 -41
  89. includes/menu-pages/paypal-ops.inc.php +71 -73
  90. includes/menu-pages/res-ops.inc.php +52 -58
  91. includes/menu-pages/scripting.inc.php +29 -62
  92. includes/menu-pages/start.inc.php +36 -38
  93. includes/menu-pages/trk-ops.inc.php +63 -65
  94. includes/menu-pages/updates.inc.php +1 -1
  95. includes/templates/badges/s-badge.php +3 -1
  96. includes/translations/s2member.pot +3576 -490
  97. includes/translations/translators.txt +3 -3
  98. readme-ms.txt +1 -1
  99. readme.txt +52 -245
  100. s2member.php +8 -7
changelog.md CHANGED
@@ -1,38 +1,51 @@
1
= v150203 =
2
3
- - (s2Member Pro) **Gift/Redemption Codes:** This release adds a powerful new shortcode: `[s2Member-Gift-Codes /]`. This makes it easy to generate and sell access to gift codes (i.e. gift certificates) and/or to a list of redemption codes. For instance, where a single team leader might like to purchase multiple accounts they can distribute to others on a team, or in a group. Video demo here: https://www.youtube.com/watch?v=T3N_vygowbM&feature=youtu.be ~ See also: [this GitHub issue](https://github.com/websharks/s2member/issues/386) for additional technical details.
4
- - (s2Member Pro) **User-Specific Coupon Codes:** This release of s2Member makes it possible to configure Pro Form Coupon Codes that are connected (i.e. only valid) when entered by specific Users/Members who are logged into the site. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/403) for additional technical details.
5
- (s2Member Pro) **Coupon Code Max Uses:** This release of s2Member Pro adds the ability to set a maximum number of times that a Coupon Code can be used. This makes it easy to create Coupon Codes that are designed to be used only one time, for instance; or for X number of times. After a Coupon Code is used X number of times, it will expire automatically. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
6
- (s2Member Pro) **Coupon Code Usage Tracking:** This release of s2Member Pro adds the ability to track the number of times that each of your Coupon Codes have been used. It is also possible to alter the number of uses, and/or set a maximum number of uses. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
7
- (s2Member Pro) **Coupon Code Active/Expires Dates:** This release of s2Member Pro makes it possible to establish both a start and end time for each of your Pro Coupon Codes. In previous versions of s2Member, it was only possible to set an expiration date. You can now create Coupon Codes that will become active at some point in the future automatically. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
8
- (s2Member Pro) **Coupon Code UI Enhancements:** This release of s2Member Pro comes with an updated UI that makes it easier to manage your Pro Coupon Codes. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
9
- - (s2Member Pro) **Store Coupon Codes for Each User:** s2Member Pro now stores a list of all coupon codes that a customer has used on your site. See: `Dashboard ⥱ Users ⥱ Choose User [Edit]`. Scrolling down to the set of s2-related fields will reveal a new list of coupon codes. This list will be filled for new customers only; i.e. s2Member does not have this data for past purchases; only for new customers that you acquire after updating to the latest release. See also [this GitHub issue](https://github.com/websharks/s2member/issues/462) if you'd additional details.
10
- (s2Member/s2Member Pro) **EOT Custom Value:** In this release of s2Member, the `get_user_option('s2member_custom')` value is preserved after an EOT has taken place, making it possible for site owners to continue to read this value (along with any custom pipe-delimited values they have injected there), even after an EOT has taken place. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/449).
11
- (s2Member/s2Member Pro) **JW Player Broken Links:** This release corrects some broken links referenced by the inline documentation for s2Member in the WordPress Dashboard. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/448) if you'd like further details.
12
- - (s2Member/s2Member Pro) **Security:** This release of s2Member checks for the existence of the WordPress PHP Constant: `WPINC` instead of looking for the less reliable `$_SERVER['SCRIPT_FILENAME']`. Some site owners reported this was causing trouble in a localhost environment during testing, or when running s2Member on some hosts that are missing the `SCRIPT_FILENAME` environment variable; e.g. some Windows servers. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/454) if you'd like additional details.
13
- (s2Member Pro) **Advanced Import/Export Compat:** This release of s2Member Pro includes compatibility and a bug fix when running on WordPress v4.1+. Three PHP notices during importation, along with some quirky behavior associated with the `role` CSV column have been corrected. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/455) for technical details.
14
- (s2Member Pro) **`[s2Member-List /]` Bug Fix:** This release resolves an issue with pagination in the `[s2Member-List /]` shortcode after recent improvements to the search functionality. See [this GitHub issue](https://github.com/websharks/s2member/issues/155#issuecomment-69403120) if you'd like additional details.
15
- - (s2Member Pro) **`[s2Member-List /]` Enhancement:** This release improves search functionality in the `[s2Member-List /]` shortcode, making it so that all searches default to `*[query]*`; i.e. are automatically wrapped by wildcards. If a user enters a wildcard explicitly (or a double quote), this default behavior is overridden and the search query is taken as given in such a scenario. This makes the search functionality easier for end-users to work with, since it no longer requires an exact match. Default behavior is now a fuzzy match. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/394) if you'd like further details.
16
- (s2Member/s2Member Pro) **AWS v4 Authentication:** This release of s2Member adds AWS v4 Authentication support for Amazon Web Service Regions that only accept the AWS v4 authentication scheme. If you had trouble in the recent past when attempting to integrate s2Member with S3 Buckets (or with CloudFront) in regions outside the USA, this release should resolve those issues for you. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/440) if you'd like additional technical details.
17
- - (s2Member Pro) **Bug Fix:** Pro Form Checkout Options not working in all cases whenever they are used together with Free Registration Forms. Resolved in this release.
18
19
= v150102 =
20
21
- (s2Member/s2Member Pro) **Custom Field Mapping:** This release of s2Member adds an internal mapping from s2Member's Custom Field values for each user, to the `get_user_option()` function in the WordPress core. This makes it possible to retrieve user custom field values like always via `get_user_field()` or now through the native `get_user_option()` function also. The benefit of this is that s2Member's custom fields are now more compatible with other themes/plugins for WordPress.
22
- - (s2Member Pro) **[s2Member-List /] Shortcode:** It is now possible to search through custom fields created with s2Member using the `search_columns=""` attribute; e.g. `search_columns="user_login,user_email,s2member_custom_field_MYFIELDID"`; where `MYFIELDID` can be replaced with a field ID that you generate with s2Member via `Dashboard ⥱ s2Member ⥱ General Options ⥱ Registration/Profile Fields`. See also: [this KB article](http://www.s2member.com/kb/s2member-list-shortcode/) for further details. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/155) for details regarding this improvement.
23
- (s2Member/s2Member Pro) **MailChimp Bug Fix** This release fixes a bug first introduced in the previous release, which was causing Interest Groups configured w/ s2Member to not be added properly. Resolved in this release. Props to @ethanpil Thanks!
24
- (s2Member Pro) **ccBill Buttons** This release updates all ccBill button graphics. The MasterCard logo has been removed, and a new set of buttons was created to improve upon the set provided in previous versions of s2Member Pro. See: [this GitHub issue](https://github.com/websharks/s2member/issues/392) if you'd like further details.
25
- - (s2Member Pro) **Authorize.Net** The `AUD` currency code is now supported by Authorize.Net, and thus, s2Member Pro has been updated to support the `AUD` currency code for Pro Forms integrated with Authorize.Net. See [this GitHub issue](https://github.com/websharks/s2member/issues/383) if you'd like further details.
26
- (s2Member Pro) **Subscr. CID for Stripe** This release corrects a bug which made it impossible to update the Subscr. CID value (for Stripe) using the user edit form in the Dashboard. For further details, please see [this GitHub issue](https://github.com/websharks/s2member/issues/380).
27
- (s2Member/s2Member Pro) **Bug fix** s2Member's membership access times log was failing to collect all required access times under certain scenarios where multiple CCAPS were being added or removed in succession within the same process, but across multiple function calls. This resulted in unexpected behaviors (in rare cases) when attempting to use the `[s2Drip /]` shortcode. Fixed in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/406) for technical details.
28
- (s2Member/s2Member Pro) **Compatibility** This release includes a fix for s2Member's Multisite Network patches applied to the `wp-admin/user-new.php` file whenever you configure s2Member on a Multisite Network. This change makes s2Member compatible with the coming release of WordPress v4.1 and v4.2-beta as it exists now. See: [this GitHub issue](https://github.com/websharks/s2member/issues/410) if you'd like additional details.
29
- (s2Member Pro) **Bug Fix:** A feature that was previously introduced in v140816, which made it possible for site owners to set a failed payment threshold (in s2Member's Authorize.Net integration), was suffering from an off-by-one issue during total failed payment calculations. Fixed in this release. See also [this GitHub issue](https://github.com/websharks/s2member/issues/416) if you'd like further details.
30
- - (s2Member Pro) **Feature Enhancement:** Whenever a failed payment threshold is reached (in s2Member's Authorize.Net integration), not only will s2Member terminate on-site access, but now the underlying ARB (Automated Recurring Profile) is cancelled at the same exact time. This way future billing attempts on the Authorize.Net side will not be possible; i.e. it ensures that a failed payment threshold will always terminate both on-site access and the ARB itself together at the same time, as opposed to allowing the ARB termination to occur automatically via Authorize.Net, _whenever_. See also [this GitHub issue](https://github.com/websharks/s2member/issues/416) if you'd like further details.
31
- (s2Member Pro) **ClickBank Disclaimer:** This release of s2Member adds a default Auto-Return Header Template (customizable from `s2Member ⥱ ClickBank Options` in the Dashboard) which includes a disclaimer that ClickBank requires of most merchants before final approval.
32
33
_This default template should help to reduce the time it takes new merchants to receive final approval from ClickBank when first starting out in the ClickBank network. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/412) if you'd like further details._
34
- - (s2Member Pro) **Bug Fix:** PayPal Pro Forms for Specific Post/Page Access, and configured with `accept="paypal"` (i.e. to accept PayPal only) were not hiding the entire Billing Method section as intended. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/399) if you'd like further details.
35
- - (s2Member Pro) **Bug Fix:** PayPal Pro Forms using Express Checkout for Billing Agreements under a non-native currency (i.e. under a different currency than their own PayPal account) were failing under some scenarios (notably with the `BRL` currency code). Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/414) if you'd like technical details.
36
- (s2Member Pro) **Stripe API:** s2Member's Stripe integration has been updated to use the new `statement_descriptor` field in favor of the now deprecated `statement_description`. See [this GitHub issue](https://github.com/websharks/s2member/issues/422) for technical details.
37
- (s2Member Pro) **Stripe Bug Fix:** In the case of a global tax rate having been applied to the total cost, there were certain scenarios where s2Member Pro would kick back an error message, "Invalid Parameters to Stripe". Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/425) if you'd like technical details.
38
- (s2Member/s2Member Pro) **WP Core Compat.:** This version of s2Member forces the `wptexturize` filter off in WordPress, due to a bug that was introduced in recent versions of the WordPress core; which results in broken shortcodes in some scenarios. Until the underlying bug is fixed in the WP core, the `wptexturize` filter must be disabled to prevent corruption of any WordPress shortcode that may contain `<` or `>` symbols.
@@ -43,11 +56,11 @@
43
- (s2Member Pro) **Coupon Codes:** All transaction-related email templates now support three additional Replacement Codes: `%%full_coupon_code%%`, `%%coupon_code%%`, and `%%coupon_affiliate_id%%`. These have been documented in your Dashboard in places where transaction-related email templates are configured. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/384) if you'd like additional details.
44
- (s2Member Pro) **Stripe Tax Info:** s2Member now attaches metadata to Stripe Charges and to Stripe Subscriptions which includes a JSON-encoded object containing two or more properties when tax applies.
45
46
- These metadata properties can be found in your Stripe Dashboard with the metadata key: `tax_info`; which contains the following JSON-encoded properties: `tax` (total tax that was or will be charged on the regular amount), `tax_per` (tax percentage rate that was applied based on your configuration of s2Member Pro); along with `trial_tax` and `trial_tax_per` in the case of a Stripe Subscription that includes an initial/trial period that requires payment; i.e. the tax applied (if any) to an initial/trial payment on a Subscription.
47
48
We hope this additional information being recorded by s2Member and stored securely within your Stripe account will make it easier for you to maintain accurate bookkeeping records moving forward. This additional metadata is generated for new customers only. It will not be backfilled for any past transactions.
49
50
- - (s2Member Pro) **Stripe Tax Info:** s2Member now passes the tax location; i.e. `address_state`, `address_zip`, and `address_country` to each Stripe Card object associated with a Stripe Customer.
51
52
We hope this additional information being recorded by s2Member and stored securely within your Stripe account will make it easier for you to maintain accurate bookkeeping records moving forward. This additional cardholder data is collected and stored for new customers only; it will not be backfilled for any past transactions.
53
@@ -55,28 +68,28 @@
55
56
- (s2Member Pro) **Stripe Coupon Code:** s2Member now attaches metadata w/ a coupon code used by your customer (if applicable) to each Stripe Charge and/or Stripe Subscription object.
57
58
- This metadata property can be found in your Stripe Dashboard with the metadata key: `coupon`; which contains the following JSON-encoded property: `code` i.e. the full coupon code used by your customer. This additional metadata is generated for new customers only. It will not be backfilled for any past transactions. Filled only for transactions that use a coupon code.
59
- (s2Member Pro) **Stripe Invoice:** This release corrects a bug in s2Member's Stripe integration whereby `subscr-signup-as-subscr-payment` was not always being forced into the core gateway processor; resulting in a miscalculation of the `last_payment_time` under certain scenarios. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/396) if you'd like additional details.
60
61
= v141007 =
62
63
- (s2Member Pro) **ClickBank IPN v6:** This release enables a new integration option for site owners integrated with ClickBank. You may now choose to integrate with v6 of ClickBank's IPN service, since all previous versions are slowly being phased out by ClickBank. Please see: `Dashboard ⥱ s2Member ⥱ ClickBank Options ⥱ IPN Integration` for v6 config. options. See also [this GitHub issue](https://github.com/websharks/s2member/issues/256) if you'd like further details regarding this topic. See also: [this article @ ClickBank](https://support.clickbank.com/entries/22803622-instant-notification-service).
64
- - (s2Member/s2Member Pro) **AWeber API Integration:** This release of s2Member adds a new option for site owners using AWeber. It is now possible to integrate with the new [s2Member App](http://www.s2member.com/r/aweber-api-key) for AWeber; i.e. via the AWeber API instead of via email-based communication. For further details, please see: `Dashboard ⥱ s2Member ⥱ API / List Servers ⥱ AWeber Integration`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/303) if you'd like additional details.
65
- (s2Member/s2Member Pro) **Bug Fix:** The EOT Behavior option for `refunds,partial_refunds,reversals` was not being accepted by s2Member. Fixed in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/345) if you'd like further details.
66
- - (s2Member/s2Member Pro) **MailChimp API Wrapper:** This release of s2Member comes with an updated API wrapper class for MailChimp integration. No change in functionality, just a smoother, slightly faster, and more bug-free interaction with the MailChimp API. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/303) if you'd like further details regarding this improvement. See also: [the official MailChimp API class](https://bitbucket.org/mailchimp/mailchimp-api-php); i.e. what s2Member has been updated to in this release.
67
- - (s2Member/s2Member Pro) **URI Restrictions caSe-insensitive (Security Fix)** This release of s2Member changes the way URI Restrictions work. All URI Restrictions are now caSe-insensitive (i.e. `/some-path/` is now the same as `/some-Path/`), allowing s2Member to automatically pick up different variations used in attempts to exploit the behavior of certain slugs within the WordPress core. You can also change this new default behavior, if you prefer. Please see: `Dashboard ⥱ s2Member ⥱ Restriction Options ⥱ URI Restrictions`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/354) for the details about why this was changed in the most recent copy of s2Member.
68
- (s2Member/s2Member) **AWeber Role-Based Emails:** In this release we're adding a note in the s2Member UI regarding role-based email addresses being rejected by AWeber. AWeber does not allow role-based emails like: `admin@` or `webmaster@` to be subscribed. It is suggested that you enable s2Member's config. option: "Force Personal Emails" if you intend to integrate with AWeber. Please see: `Dashboard ⥱ s2Member ⥱ General Options ⥱ Registration/Profile Fields`; where you can tell s2Member for force personal email addresses when someone registers on-site. This will prevent a potential subscriber from entering something like `admin@example.com` as their email address.
69
70
= v140921 =
71
72
- - (s2Member/s2Member Pro) **WP v4 over SSL Compat.** A compatibility issue with the `home_url()` function in the latest release of WordPress has been resolved with this release. Some site owners reported that their s2Member menu pages were appearing without any CSS/JavaScript being loaded; i.e. the graphical UI was not appearing as one would expect under certain scenarios.
73
- (s2Member/s2Member Pro) **WP v4 Compat.** This release brings s2Member up-to-date with the latest changes to the `like_escape()` function in WP v4.0. The `like_escape()` function is now deprecated in favor of `wpdb::esc_like()`. s2Member has been updated in this release, but also remains compatible with previous versions of WordPress. See [this GitHub issue](https://github.com/websharks/s2member/issues/329) if you'd like further details.
74
- (s2Member Pro) **[s2MOP /] Shortcode Enhancment** The `[s2MOP /]` shortcode allows for a new `required_value=""` attribute. Please see [this KB article](http://www.s2member.com/kb/s2mop-shortcode/) for details about the `[s2MOP /]` shortcode. See also: [this GitHub issue](https://github.com/websharks/s2member-pro/issues/51) if you'd like further details.
75
76
= v140909 =
77
78
- (s2Member/s2Member Pro) **Compatibility:** Several instances of `site_url()` (a WordPress core function) have been converted to `home_url()` instead. This provides better compatibility with WordPress installations running from a sub-directory. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/293) if you'd like further details.
79
- - (s2Member Pro) **Bug Fix:** Ampersands; i.e. `&` symbols in a ClickBank button `desc=""` attribute are now converted to the word `and` automatically. The symbol itself causes issues in ClickBank's IPN processing. Fixed in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/253) if you'd like further details.
80
- (s2Member) **Bug Fix:** Improving compatibility with Mozilla/Firefox for the default `wp-login.php?action=register` handler. This release corrects an issue where `<select>` fields contained text with too large a font-size for Mozilla browsers to deal with. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/244) if you'd like further details.
81
- (s2Member) **WP v4.0 / bbPress Compat.** A conflict between WordPress v4.0, bbPress v2.5.4 and the previous release of s2Member has been resolved. A symptom of this issue was to see the leading topic post missing from your bbPress forum threads.
82
@@ -85,7 +98,7 @@
85
However, please note that some other 3rd-party plugins may still conflict in this way; when running the latest version of bbPress under WordPress v4.0. We are working to notify bbPress and other plugin authors about this issue; just to help others avoid the problem. While unconfirmed, some site owners reported that the Relevanssi search plugin may have some trouble with this also.
86
For further details, please see <http://bbpress.org/?p=151839>. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/321) if you'd like all of the details regarding this workaround in the s2Member software.
87
- (s2Member) **WP v4.0 Compat.** Updating s2Member's use of the now-deprecated `get_all_category_ids()`. Using `get_terms()` instead. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/322) if you'd like further details.
88
- - (s2Member Pro) **Stripe Bug Fix:** This release corrects an issue with Stripe Pro Forms and a `$0` trial period. A symptom of this bug was to find a customer's Stripe token value missing from their Customer object in the Stripe Dashboard. This issue impacted Pro Forms whenever a 100% free trial was offered (i.e. with a `$0` sale amount). Resolved by this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/326) if you'd like the details.
89
90
= v140816 =
91
@@ -100,25 +113,25 @@
100
101
See also: [this GitHub issue](https://github.com/websharks/s2member/issues/179) if you'd like more info.
102
* (s2Member Pro) **Authorize.Net** This release introduces a new configurable EOT Behavior option for site owners integrated with Authorize.Net. It is now possible to configure a Max Failed Payments threshold; after which s2Member will automatically trigger an EOT (End Of Term). See: `Dashboard ⥱ s2Member ⥱ Authorize.Net Options ⥱ EOT Behavior`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/141) if you'd like more info.
103
- * (s2Member/s2Member Pro) **Enhancement** A new Replacement Code (`%%current_user_nicename%%`) has been introduced by s2Member to improve compatibility with plugins like BuddyPress and bbPress. If you are currently using a Special Login Redirection URL as your s2Member Login Welcome Page, and you've used `%%current_user_login%%` (i.e. the old way), we suggest that you update your Special Redirection URL to use `%%current_user_nicename%%`. Please see [Jason's comments here](https://github.com/websharks/s2member/issues/276#issuecomment-51706582) for further details. See also: `Dashboard ⥱ s2Member ⥱ General Options ⥱ Login Welcome Page`. It is this area of your Dashboard where a Special Redirection URL can be configured.
104
* (s2Member Pro) **Pro Login Widget** There are some new Replacement Codes available for the "My Account" page URL, and the "My Profile" page URL whenever you configure the s2Member Pro Login Widget in WordPress. s2Member Pro now supports things like `%%current_user_nicename%%` and `%%current_user_level%%` in these customizable URLs. See: `Dashboard ⥱ Appearance ⥱ Widgets ⥱ s2Member Pro Login Widget` for further details. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/276#issuecomment-51706582) if you'd like more info.
105
- * (s2Member Pro) **Stripe Bug Fix** Wrapping multiple Stripe Pro Form Shortcodes together as "Checkout Options" was not working properly in the previous release. The dropdown for Checkout Options was not maintaining the underlying variable needed to keep a Checkout Option selected. Fixed in this release. If you'd like more info, please see [this GitHub issue](https://github.com/websharks/s2member/issues/296).
106
* (s2Member Pro) **Stripe Bug Fix** A few site owners reported issues between s2Member's integration with Stripe and other plugins that also depend on the Stripe SDK for PHP. Fixed in this release. If you'd like more info, please see [this GitHub issue](https://github.com/websharks/s2member/issues/295).
107
- * (s2Member Pro) **Pro Cancellation Forms** This release introduces a new Shortcode Attribute that can be used with Pro Cancellation Forms. The new Shortcode Attribute is `unsub=""`. Setting this to a value of `unsub="1"` will enable an automatic unsubscribe upon cancellation. To clarify, this is related to any List Servers (e.g. MailChimp, AWeber, GetResponse) that you integrate with s2Member. If `unsub="1"` when a customer cancels future billing they will also be removed from the mailing list they are currently subscribed to, according to your List Server configuration in s2Member. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/238) if you'd like more info.
108
- * (s2Member/s2Member Pro) **Child Theme Compabitility** Portions of s2Member (e.g. Return-Page templates, s2Stream templates, Pro Form templates, IP Restriction templates, and more) allow advanced site owners to use custom templates of their own. In the past these templates *had* to be created inside the parent theme directory or inside of your `/wp-content/` directory. Starting with this release, s2Member will also look for custom templates inside of your current Child Theme directory too (i.e. `get_stylesheet_dir()`). Please see [this GitHub issue](https://github.com/websharks/s2member/issues/271) if you'd like more info.
109
* (s2Member/s2Member Pro) **S3/CloudFront Compatibility** The latest release of s2Member has been made compatible with the latest changes at Amazon S3/CloudFront [regarding IAM users](http://aws.amazon.com/blogs/aws/updated-iam-console/). If you've been running s2Member together with Amazon S3/CloudFront there are no changes necessary in s2Member configuration. If you are just integrating s2Member with Amazon S3/CloudFront you are advised to setup an IAM user instead of using your AWS Root Keys. s2Member will continue to work with either Root Keys or with IAM user keys. Either are fine. If you'd like more info, please see [this GitHub issue](https://github.com/websharks/s2member/issues/297).
110
* (s2Member/s2Member Pro) **MySQLi Compatiblity** This release brings s2Member into full compatibility with the MySQLi extension. In the previous release it was reported that one specific routine in s2Member that checks the total number of users in your WordPress database was incompatible with MySQLi. Resolved in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/274) if you'd like more info.
111
* (s2Member/s2Member Pro) **Amazon CloudFront** s2Member now makes a new button [Reset CloudFront Configuration] available inside of your WP Dashboard under: `s2Member ⥱ Download Options ⥱ Amazon CloudFront`. This button allows a site owner (if necessary) to do a quick reset of s2Member's current integration with Amazon CloudFront Distributions. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/270) if you'd like more info.
112
* (s2Member/s2Member Pro) **Bug Fix** This release corrects a bug in s2Member's log of a user's WordPress Capability access times. This bug had no serious impact on previous releases of s2Member. However, it was a bug that needed fixing nonetheless. Resolved in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/237) if you'd like more info.
113
- * (s2Member/s2Member Pro) **Responsive Compatibility** This release of s2Member makes the `/wp-login.php` file (the WordPress Login/Registration system) Responsive; i.e. more compatible with mobile devices and tablets. This only impacts site owners that use s2Member's Login/Registration Design options to improve and customize the appearance of this core WordPress component. No changes necessary to existing installations for this to kick-in. It's automatic (assuming you are using this s2Member feature). Please see [this GitHub issue](https://github.com/websharks/s2member/issues/211) if you'd like more info.
114
* (s2Member Pro) **Remote Operations API** This release of s2Member makes it possible to change the API Key assigned to your WordPress installation. The Pro Remote Operations API is one way for developers to integrate with some of s2Member's functionality. See: `Dashboard ⥱ s2Member ⥱ API / Scripting ⥱ Remote Operations API`. This is where it's possible to change your API Key if you'd like to. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/206) if you'd like more info.
115
- * (s2Member/s2Member Pro) **Enhancement** s2Member's Auto-Return system (i.e. default Thank-You page handler) which integrates with: PayPal Standard Buttons, ClickBank, and Google Wallet; has been updated in this release. If a customer happens to find their way back to a self-expiring Auto-Return URL (a rare occurrence); instead of an unfriendly error message about duplicate return data, s2Member now provides a more friendly note that asks the customer to check their email for the details needed to access what they paid for. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/205) if you'd like more info.
116
* (s2Member/s2Member Pro) **Enhancement** s2Member's Security Encryption Key configuration panel in the Dashboard was updated to include additional details related to the use of your Security Encryption Key. This additional information explains s2Member's use of this key in greater detail. See: `Dashboard ⥱ s2Member ⥱ General Options ⥱ Security Encryption Key`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/182) if you'e like more info.
117
- * (s2Member Pro) **One-Time-Offers Upon Login** This release resolves a conflict between s2Member's Pro Login Widget and One-Time-Offers (Upon Login) — a feature that can be configured with s2Member Pro. One-Time-Offers (Upon Login) now take precedence over certain automatic login redirections that can occur through the Pro Login Widget, removing the chance of a conflict. If a visitor logs into their account with a default login redirection URL (i.e. a redirection URL formulated dynamically by the Pro Login Widget that is not related to a visitor's request to access a specific page of the site), and a One-Time-Offer is triggered at the same time, the One-Time-Offer will take precendence. The visitor will see the One-Time-Offer instead of being redirected to the default location specified by the Pro Login Widget. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/119) if you'd like more info.
118
119
= v140725 =
120
121
- * (s2Member Pro) **NEW: Stripe Pro Forms (Beta)** Holy hula hoop! s2Member now has a deep integration with Stripe for on-site credit card processing that uses a Stripe overlay. Stripe is an almost-free service that is super easy to setup and work with. We think you'll find that Stripe is quickly becoming the MOST popular of all payment gateways in the industry. A few bugs have [already been zapped](https://github.com/websharks/s2member/issues?milestone=5&page=1&state=closed) prior to this release after some initial beta testing was completed over the last few weeks. Everything is looking great so far, but please do [report any new issues via GitHub](https://github.com/websharks/s2member/issues?page=1&state=open).
122
123
**If you are an s2Member Pro site owner** you can upgrade to the latest version of s2Member Pro at anytime you like; then enable Stripe as an additional payment gateway option. See: `Dashboard ⥱ s2Member Pro ⥱ Other Gateways`.
124
@@ -128,21 +141,21 @@
128
* (s2Member Pro) **ClickBank Bug Fix** Nillable fields causing some issues (only under one specific scenario) after a recent change in the ClickBank API. Fixed in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/250) if you would like further detais.
129
* (s2Member Pro) **Compatibility** Resolved a minor single-quote issue in the Visual Editor. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/228) if you'd like further details.
130
* (s2Member/s2Member Pro) **Bug Fix** Non-HTML whitespace being trimmed inside the `[s2If /]` shortcode. Resolved in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/224) if you'd like further details.
131
- * (s2Member Pro) **Pro Forms Bug Fix** Related to List Server processing during an upgrade. This bug impacted all payment gateways integrated with s2Member's Pro Forms; including PayPal, Authorize.Net and now Stripe. Resolved in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/216) if you'd like further details.
132
* (s2Member Pro) **Bug Fix** An `array_intersect()` error in the `[s2MOP /]` shortcode under the right conditions. Fixed in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/204) if you'd like further details.
133
- * (s2Member Pro) **Enhancement** Free Registration Pro Forms can now be included in a list of nested Checkout Option drop-downs. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/197) if you'd like further details. See also: `Dashboard ⥱ s2Member ⥱ [Your Payment Gateway] Pro Forms ⥱ Checkout Options`; where there is more information about how to use Checkout Options with s2Member Pro Forms.
134
* (s2Member/s2Member Pro) **Bug Fix / List Servers** This release corrects a bug that may cause members to be unsubscribed from a List Server if they forget to check the box again while editing their profile. In the previous release we introduced a feature that allows the checkbox to be pre-checked if the user already chose to subscribe once before. However, the internal tracking for this was not as reliable as it could be. There is still more work to be done on this front, but the immediate issue has now been resolved. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/196) if you'd like further details.
135
* (s2Member/s2Member Pro) **WP_DEBUG Compat.** Some older portions of s2Member's codebase were cleaned up and reformatted in this update. This is an ongoing process to bring s2Member into full compatibility with `WP_DEBUG` mode in WordPress. This is intended to help other developers in the WP community. Much progress has been made on this front now, but still some more work to do. We will continue to update s2Member's codebase little-by-little with each release.
136
* (s2Member/s2Member Pro) **Uninstall vs. Deactivation** s2Member has always made a strong effort to cleanup after itself should you decide (for whatever reason) to uninstall it. However, we are also very concerned with preserving any data associated with such a powerful plugin that comes with so many options. Nobody wants accidental data loss, right!?
137
138
139
- In the past, s2Member came with a feature called "Deactivation Safeguards". These (if disabled) attached themselves to a plugin "deactivation" hook within WordPress and they would uninstall s2Member when you deactivated the plugin. Starting with this release ,s2Member's Deactivation routines have been changed. We now attach them to the WordPress "uninstall" hook which is triggered only on plugin deletion.
140
141
In this way, deactivating s2Member will never result in a loss of any data. Instead of "Deactivation Safeguards", s2Member now calls this feature "Plugin Deletion Safeguards". In short, to tell s2Member to uninstall itself (including any data/options associated with s2Member), you can simply disable s2Member's Plugin Deletion Safeguards under: `s2Member ⥱ General Options`, and then deactivate _and delete_ the s2Member plugin entirely. Whenever you delete the plugin this automatically and silently triggers s2Member's uninstaller which cleans up after itself nicely :-)
142
143
= v140630 =
144
145
- - (s2Member Pro) **Stripe Payment Gateway** Hooray! s2Member Pro now integrates with [Stripe](http://www.s2member.com/r/stripe). s2Member Pro Forms, Coupon Codes, Tax Settings, Checkout Options, and all of the other great features provided by s2Member Pro are now compatible with Stripe. To enable Stripe in your installation of s2Member, please see: `Dashboard ⥱ s2Member ⥱ Other Gateways ⥱ Stripe`.
146
147
We expect Stripe to become the most popular payment gateway integration for s2Member Pro over the next few months. Stripe is nearly free; it's easier to setup, easier to maintain; and just more flexible overall in our opinion.
148
@@ -151,21 +164,21 @@
151
152
= v140614 =
153
154
- * (s2Member/s2Member Pro) **Quick Cache Compat.** This release makes it possible for Quick Cache to cache content protected by s2Member. If, and only if, you have [Quick Cache Pro](http://www.websharks-inc.com/product/quick-cache/) configured to enable user-specific caching; i.e. to cache when users are logged into the site. See [this GitHub issue](https://github.com/websharks/s2member/issues/172) if you'd like further details.
155
* (s2Member Pro) **ClickBank API Compat.** This release brings s2Member's ClickBank integration into full compatibility with a recent change in the ClickBank API. Under the right conditions, a symptom of this bug was to see an error regarding an unexpected `txnType` upon returning from checkout via ClickBank. Resolved in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/199) if you'd like further details.
156
157
= v140603 =
158
159
- * (s2Member/s2Member Pro) **Profile Sync to List Servers** If you have a supported List Server integrated with s2Member (e.g. MailChimp, GetResponse, AWeber), the opt-in checkbox will now also be displayed in user profile editing panels (i.e. by the `[s2Member-Profile /]` shortcode, or if you integrate s2Member with BuddyPress profiles).
160
161
- If a user updates their profile, their profile on the List Server is updated too (i.e. s2Member updates their first name, last name, along with any merge vars or customs you've integrated through s2Member hooks/filters). If a user changes their email address, they will be subscribed with the new email address. Leaving the box unchecked during a profile update will effectively unsubscribe the user from the lists you have configured at their current Membership Level.
162
163
- *s2Member's AWeber integration does not yet support profile updates (i.e. changes in first/last name or other details); it only supports the ability to either subscribe or unsubscribe; and/or changes in email address.*
164
165
See [this GitHub issue](https://github.com/websharks/s2member/issues/146) if you'd like further details.
166
* (s2Member/s2Member Pro) **BuddyPress Compatibility** This release makes s2Member and s2Member Pro compatible with the latest release of BuddyPress. BuddyPress v2.01 broke some of s2Member's previous integration. Fixed in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/162) if you'd like further details.
167
* (s2Member/s2Member Pro) **Multisite Lost Password URL** In a multisite environment (given the WordPress default behavior), a lost password URL generated by WordPress will force all users to recover their password from the Main Site in the Network; which is usually NOT desirable. This release of s2Member fixes this odd behavior in the WordPress core by allowing users to recover their password in the UI for the current Child Blog they are accessing. See [this GitHub issue](https://github.com/websharks/s2member/issues/138) if you'd like further details and ways to enable/disable; or even customize this further.
168
- * (s2Member/s2Member Pro) **Default EOT Behavior** By popular demand, this release changes s2Member's default EOT (End Of Term) Behavior option with respect to refunds/chargebacks. The new default behavior (assuming you have not yet configured s2Member) is to force an EOT on chargebacks only; not on a refund of any kind. A refund is just a refund (in many cases) and an EOT (if one should occur) is something that a site owner generally should decide on their own; i.e. to review refunds manually and if an EOT should occur, the site owner will mostly like prefer to terminate a user's account access on their own; and on a case-by-case basis.
169
170
**Further clarification...** EOT (End Of Term) is meant to occur when a subscription ends, and since a refund doesn't necessarily end a subscription, it's not the default anymore to trigger an automatic EOT on a refund event. Site owners that want an EOT on refunds still have that option available to them however. See `Dashboard ⥱ s2Member ⥱ [Payment Gateway] Options ⥱ Auto EOT Behavior ⥱ Chargebacks/Refunds`.
171
@@ -182,7 +195,7 @@
182
183
* (s2Member Pro) **`[s2Member-List /]` Shortcode** Amazing new feature! It is now possible to list members using a powerful shortcode, and even make it possible for members to view and search for each other. See [this KB article](http://www.s2member.com/?p=62860) for all the details on this feature. Very cool!
184
* (s2Member/s2Member Pro) **Server-Side Validation** For Registration/Profile Fields that you configure on your own (using the s2Member software), there is now support within all areas of the s2Member codebase for both JavaScript and *now server-side validation too*. In the past, all validations applied to custom fields was via JavaScript only. With server-side validation too, now it is impossible for required and/or invalid fields that you configure to go missing. This also resolves a few issues related to spam bots attempting to bypass JavaScript validation. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/99) if you'd like further details.
185
- * (s2Member Pro) **Button Processing Animation**. Improving the processing animation used in submit buttons across Pro Forms. Instead of a script-based solution (rather jumpy), we are now taking advantage of CSS3 for a much smoother animation. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/114) if you'd like further details.
186
* (s2Member Pro) **`[s2Drip /]` Shortcode Enhancement** This release adds support for a new `access=""` shortcode attribute that can parse `and` / `or` logic. Also, it is now possible for `[s2Drip /]` to be used with Custom Capabilities too! See [this KB article](http://www.s2member.com/kb/s2drip-shortcode/) for all the details.
187
* (s2Member/s2Member Pro) **Bug Fix, Custom Fields UI** This release corrects a bug related to the `jquery/.htaccess` file that ships with s2Member. A symptom was to have issues with the Registration/Profile Fields UI and find a JS error in the browser's developer console. Fixed in this release. See also, [this GitHub issue](https://github.com/WebSharks/s2Member/issues/144#issuecomment-43198045) if you'd like further details.
188
* (s2Member Pro) **Bug Fix, Clickbank HTTPS** This release corrects a bug in the default Auto-Return Page for ClickBank, when/if it's served over the `https` protocol. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/145) if you'd like further details.
@@ -238,22 +251,22 @@
238
* (s2Member) **Cosmetics**. Updating s2Member's adminitrative menu pages to enhance their appearance in the most recent versions of WordPress. Nothing significant, just minor tweaks.
239
* (s2Member Pro) **PayPal IPNs**. Adding support for `txn_type` values: `merch_pmt`, `mp_signup`, and `mp_cancel` to enhance s2Member's support for Billing Agreements when integrated together with a PayPal Pro (Payflow Edition) account that processes Express Checkout transactions. This also resolves a bug related to cancellation IPN processing in a specific scenario. Fixed in this release.
240
* (s2Member Pro) **[s2If][else]**. Requires s2Member Pro. This release adds support for a new `[else]` condition when using the `[s2If]` shortcode to protect parts of your content. For examples, please see: `Dashboard ⥱ s2Member ⥱ API Scripting ⥱ Simple Shortcode Conditionals`. See also: `Dashboard ⥱ s2Member ⥱ Restriction Options ⥱ Simple Shortcode Conditionals`.
241
- * (s2Member Pro) **[s2If php=""]**. Requires s2Member Pro. This release adds support for a new `php` Shortcode Attribute; e.g. `[s2If php=""]`. This makes it possible to use arbitrary PHP code in your `[s2If]` shortcodes. For examples, please see: `Dashboard ⥱ s2Member ⥱ API Scripting ⥱ Simple Shortcode Conditionals`. **Note: this feature is disabled by default.** You must enable the `php` attribute for this to work as expected. Please see: `Dashboard ⥱ s2Member ⥱ Restriction Options ⥱ Simple Shortcode Conditionals` (with s2Member Pro installed).
242
* (s2Member) **Bug Fix**. Correcting an issue related to Login Redirections and an E_NOTICE. Please see [this GitHub issue](https://github.com/WebSharks/s2Member/issues/75) if you'd like further details.
243
* (s2Member Pro) **[s2Drip]**. Requires s2Member Pro. This release adds support for a new easy-to-use shortcode that can drip content to paying Members based on their Membership Level. For examples, please see: `Dashboard ⥱ s2Member ⥱ API Scripting ⥱ Content Dripping`.
244
* (s2Member Pro) **ClickBank**. Adding support for the `vtid` parameter in ClickBank Button Shortcodes. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/44) if you'd like further details.
245
- * (s2Member Pro) **PayPal Express Checkout**. Updating PayPal Express Checkout cancellation links so they will automatically use the PayPal Merchant ID supplied by a site owner (i.e. PayPal's recommended behavior). If you'd like further details please see [this GitHub commit](https://github.com/WebSharks/s2Member-Pro/commit/5efbe35eed352868a956c94e51ab09f8e561892a).
246
- * (s2Member Pro) **Pro Forms**. Adding a new filter for developers `s2member_pro_cancels_old_rp_before_new_rp`. This is true by default. If you'd like to prevent s2Member from terminating an existing Recurring Profile (before creating a new one); i.e. during an upgrade... you can set this to a FALSE value. Not recommended, but there are a few edge cases where it could be helpful for developers. See also [this GitHub commit](https://github.com/WebSharks/s2Member-Pro/commit/19a84c81070bb0e1869b5dbd9d0325cc458fd016).
247
* (s2Member Pro) **ClickBank Bug Fix**. Adding support for alphabetics in ClickBank Item Numbers. This bug impacted the ClickBank Button Generator only, it did not prevent alphabetics from being used in a raw Shortcode. Still, this has been resolved now. See also [this GitHub issue](https://github.com/WebSharks/s2Member/issues/46).
248
* (s2Member Pro) **PayPal Mobile Bug Fix**. This release corrects a bug related to the `MAXAMT` PayPal specification that is sent via Express Checkout on a mobile device. A symptom of this bug was to sometimes see PayPal's awkward default amount of `$25` when completing checkout on a mobile device. Fixed in this release.
249
- * (s2Member Pro) **PayPal Express Checkout**. This release addresses an issue where a customer reaches PayPal.com with an item description that inadequately reads "Future payment" (i.e. missing the description provided by a site owner). PayPal's latest improvements have made it possible for s2Member to get this right. Resolved in this release.
250
* (s2Member/s2Member Pro) **Partial Refunds**. This release adds support for Partial Refunds in the s2Member EOT Behavior Options. See also [this GitHub issue](https://github.com/WebSharks/s2Member/issues/40).
251
252
= v140105 =
253
254
- * (s2Member/s2Member Pro) **Compatibility**. Updated to support WordPress v3.8. Nothing significant, just minor UI tweaks in the Login/Registration Design for WordPress v3.8; e.g. `wp-login.php` got some minor improvements in this release of s2Member and s2Member Pro.
255
- * (s2Member) **Compatibility**. PayPal's API for Subscription Cancellation Buttons was changed recently. PayPal now requires a Merchant ID instead of the site owner's email address. This issue has been causing an error when a user attempts to cancel a PayPal Subscription through an s2Member-generated PayPal Subscription Cancellation "Button" (i.e. this affects Buttons only, not Pro Forms). Fixed in this release. Site owners using PayPal Buttons should update their PayPal Merchant ID for s2Member. Please see: `Dashboard ⥱ s2Member ⥱ PayPal Options ⥱ Account Details`.
256
- * (s2Member/s2Member Pro) **Compatibility**. Default s2Member option value for CSS/JS Lazy Loading is now off instead of on; e.g. s2Member's CSS/JS JavaScript libraries are now loaded on every page by default. Lazy loading must now be enabled by a site owner as a performance enhancement (optional). For further details, please see: `Dashboard ⥱ s2Member ⥱ General Options ⥱ CSS/JS Lazy Loading`.
257
* (s2Member Pro) **Remote Operations API**. This release introduces two new API methods; `auth_check_user` and `get_user`. These methods (combined with those which already exist in s2Member Pro) now make s2Member Pro's Remote Operations API a pleasure to work with. For further details, please see: `Dashboard ⥱ s2Member Pro ⥱ API Scripting ⥱ Pro Remote Operations API`. Here you will find the API Key for your installation, along with several code samples.
258
* (s2Member/s2Member Pro) **Logging**. s2Member's core payment gateway processors now log to files `gateway-core-ipn.log` and `gateway-core-rtn.log`. These log file names were changed in this release. In previous versions of s2Member these log entries were kept inside `paypal-ipn.log` and `paypal-rtn.log`.
259
* (s2Member/s2Member Pro) **Updates**. The XML/RSS feed box for the most recent s2Member Updates (for site owners only; in the Dashboard); has been updated to our newest feed location at: `http://feeds.feedburner.com/s2member`.
@@ -265,27 +278,27 @@
265
* (s2Member/s2Member Pro) **Compatibility**. Adding support for `$_SERVER['HTTP_AUTHORIZATION']` when s2Member is used for Remote Auth file hosting. Some servers do not support `$_SERVER['PHP_AUTH_USER']`. Instead, s2Member can get the username/password by parsing them out of `$_SERVER['HTTP_AUTHORIZATION']` when/if necessary. Fixed in this release.
266
* (s2Member/s2Member Pro) **PHP Debug Notices.** Updating s2Member's source code to further prevent PHP debug notices when running in `WP_DEBUG` mode. This is part of an ongoing effort keep s2Member running smoothly in PHP strict mode; and to maintain conformity with WordPress standards.
267
* (s2Member Pro) **Bug Fix**. Define `abbr_bytes()` method as static to prevent issues during automatic upgrades of s2Member Pro. Please see <https://github.com/WebSharks/s2Member/issues/37> for further details.
268
- * (s2Member/s2Member Pro) **Backward Compatibility.** Updating calls to `get_post()`. We're adding a `NULL` argument via `$null` to prevent warnings in older releases of WordPress where an argument was required; e.g. `$null = NULL; get_post($null)`.
269
270
= v131126 =
271
272
* (s2Member Pro) **Google Wallet.** s2Member Pro now supports [Google Wallet for Digital Goods](https://developers.google.com/commerce/wallet/digital/).
273
274
- In the past we offered support for Google "Checkout" (Google "Checkout" is no longer available as of November 2013). s2Member's previous integration with Google Checkout has now been fully updated to support Google "Wallet" for Digital Goods. To enable Google Wallet in your installation of s2Member Pro, please see: `Dashboard -› s2Member Pro -› Other Gateways -› Google Wallet`. For setup instructions, please see: `Dashboard -› s2Member Pro -› Google Options`.
275
276
At the time of this writing, there are no KB articles related to Google Wallet at s2Member.com (yet); these will come soon. Until then, you might find it helpful to review dev notes by Jason Caldwell (Lead Developer). Please see: <https://github.com/WebSharks/s2Member/issues/19>.
277
278
- We also suggest that you review the documentation in your Dashboard under: `s2Member Pro -› Google Options` and `s2Member Pro -› Google Buttons`. If you were previously using Google "Checkout", please review [this notice posted by Google](https://support.google.com/checkout/sell/answer/3080449?hl=en).
279
- * (s2Member/s2Member Pro) **Bootstrap Compatibility.** s2Member has been updated throughout to support the [Twitter Bootstrap](http://getbootstrap.com/) CSS framework when running on a WordPress theme that's been built on Bootstrap. For instance; profile editing forms, custom registration/profile fields, s2Member Pro Forms for checkout/registration; these will now look good on sites powered by Bootstrap. This change has no impact on functionality, only on appearance; and only IF your site is powered by Bootstrap. Throughout s2Member's HTML code we've added CSS class names that follow a Bootstrap standard. These Bootstrap classes are blended together with default structural styles that makes s2Member compatible with all WordPress themes. This way s2Member (and s2Member Pro) can produce a clean/professional appearance on just about any WordPress theme; and now Bootstrap is supported too!
280
- * (s2Member Pro) **Configurable Emails.** We've added new configuration panels into the s2Member UI for a Modification Confirmation Email and also for the Custom Capability Confirmation Email. These are now configurable for all payment gateways integrated with s2Member Pro; e.g. AliPay, ccBill, ClickBank, Google Wallet, Authorize.Net, PayPal Standard, and PayPal Pro. These emails have always existed, but up until now customization required a WordPress filter. Now it's easier, you can customize these from the Dashboard! Please note: this feature comes only with s2Member Pro. As one example, please check your Dashboard under: `s2Member Pro -› PayPal Options -› Modification Confirmation Email`.
281
* (s2Member/s2Member Pro) **Snippets/Redirects.** Snippets and Redirects no longer carry the s2Member Restriction Options meta box in the Post/Page editing station; there's no need for Restrictions against these two special Post Types. This change, together with the latest improvements in these two plugins: [WP Snippets](http://wordpress.org/plugins/wp-snippets/) and [WP Redirects](http://wordpress.org/plugins/wp-redirects/) (also produced by our team) offer a more powerful solution now that all of these plugins are more compatible with each other.
282
- * (s2Member/s2Member Pro) **Backward Compatibility.** Updating calls to `get_post()`. We're adding a `NULL` argument to prevent warnings in older releases of WordPress where an argument was required; e.g. `get_post(NULL)`.
283
- * (s2Member/s2Member Pro) **Forward Compatibility.** Adding support for the `relative` scheme in SSL filters that deal with `set_url_scheme()` in the latest versions of WordPress. This improves s2Member's "force SSL mode" where a site owner sets the Custom Field for a Post/Page; e.g. `s2member_force_ssl` is set to `yes`. This change will better support themes/plugins that use absolute relative paths together with WordPress core functions like `site_url()` and `home_url()`.
284
* (s2Member/s2Member Pro) **PHP Debug Notices.** Updating s2Member's source code to further prevent PHP debug notices when running in `WP_DEBUG` mode. This is part of an ongoing effort keep s2Member running smoothly in PHP strict mode; and to maintain conformity with WordPress standards.
285
- * (s2Member Pro) **Unlimited Membership Levels.** Updating the built-in software documentation for s2Member Pro to cover an edge case where a site owner many choose to exceed the recommended maximum for Membership Levels when running s2Member Pro. If you intend to use more than `100` Membership Levels (this is not recommended); but if you do, please see: `Dashboard -› s2Member Pro -› General Options -› Membership Levels/Labels` for the latest details on this.
286
* (s2Member/s2Member Pro) **Dropping IE8 Support.** s2Member and s2Member Pro will no longer support IE8 in any official capacity. s2Member's HTML output and CSS files have been cleaned up; and all hacks related to IE8 have been removed. Out with the old, in with the new! We need to keep s2Member up-to-date with the latest improvements offered by IE9 and other modern browsers. While s2Member may continue to function relatively well in IE8, hacks used in the past to accomodate edge cases in this buggy browser have been removed in favor of standards compliance.
287
- * (s2Member/s2Member Pro) **Lazy Loading CSS/JS.** s2Member now offers site owners the option to enable/disable lazy loading of CSS/JS libraries provided by the s2Member software. For further details, please see: `Dashboard -› s2Member -› General Options -› CSS/JS Lazy Loading`.
288
- * (s2Member/s2Member Pro) **Bug Fix.** s2Member and s2Member Pro have both been updated to prevent spaces in a comma-delimited list of Custom Capabilities; e.g. `ccaps="music, videos"` should be `ccaps="music,videos"` please. Spaces in this list have never been allowed, but now there is better server-side validation to prevent this from happening; reducing the chance of error when a site owner configures a Button or Pro Form shortcode with s2Member.
289
* (s2Member/s2Member Pro) **Other Minor Bug Fixes.** Please see: <https://github.com/WebSharks/s2Member/commits/000000-dev>
290
291
= v131109 =
@@ -296,9 +309,9 @@
296
* (s2Member/s2Member Pro) **Improvement (Speed)** Lazy load s2Member's CSS file at all times. Done, this release will speed your site up for first-time visitors.
297
* (s2Member/s2Member Pro) **Improvement (Speed)** Load s2Member's JS library in the footer if at all possible (instead of the `<head>`). Done, this will improve the speed of your site for first-time visitors.
298
* (s2Member/s2Member Pro) **Debug Notices** Resolved all of the most obvious PHP notices when running s2Member in debug mode. This improvement impacts developers only.
299
- * (s2Member/s2Member Pro) **Password Strength Meter** Removed dependence on `password-strength-meter` (a JavaScript library) from the WordPress core. This was causing some SSL issues for site owners. In the past it was necessary for s2Member to load an additional JS resource for registration/checkout and Pro Forms (`password-strength-meter`). Starting with this release, s2Member handles password strength meters all by itself, thereby avoiding the additional overhead; and also the issues associated with this core functionality over SSL pages. Fixed in this release.
300
* (s2Member/s2Member Pro) **Mobile Devices** The s2Stream shortcode (for protected audio/video files) was updated to better support mobile device playback. See also: <http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#s2stream-mobile-devices>.
301
- * (s2Member Pro) **Checkout Options** Improving support for multiple Checkout Options. When a customer changes to a new Checkout Option by selecting an option from the drop-down menu in a Pro Form; this action will now result in a hash jump back to the location of the Pro Form on any given page; instead of to the top of the page, which could potentially result in a confusing experience on some sites (depending on the implementation). Aside: for developers, it's helpful to know that all s2Member Pro Forms now have a hashable ID `#s2p-form` that is cleaner than the longer (product-specific) IDs associated with Pro Forms; e.g. `s2member-pro-paypal-form...`, etc. If you need to hash a Pro Form, please use the more general `#s2p-form` on the end of a URL. This will take a customer directly to that Pro Form in the context of any given page.
302
303
= v131026 =
304
@@ -308,7 +321,7 @@
308
= v131025 =
309
310
* (s2Member) **WordPress v3.7 Compatibility** s2Member updated to support WordPress v3.7. s2Member remains compatible with WP v3.3 (or higher).
311
- * (s2Member Pro) **New Feature: Simultaneous Login Monitoring** Available only w/ s2Member Pro. s2Member Pro has been updated to support configurations that limit the number of simultaneous logins a single username can receive. For further details, please see: `Dashboard -› s2Member -› Restriction Options -› Simultaneous Login Restrictions` (when s2Member Pro is installed).
312
* (s2Member) **Post Restrictions (#3)** Adding support for `all-[post type]` in addition to the existing `all-[post type]s` (plural) currently supported by s2Member's Restriction Options for Posts. This makes it possible for a site owner to type only the Post Type after the keyword prefix `all-`; and excluding the plural `s` in cases when this is necessary.
313
* (s2Member) **Documentation Update (#3)** Adding note in Download Options panel regarding `raw` shortcode tags around Shortcodes when using the inFocus theme. See also [this thread](http://mysitemyway.com/support/topic/infocus-adding-tags-into-plugin-content) for further details.
314
* (s2Member) **Documentation Cleanup (#12)** General cleanup in several s2Member panels to improve inline documentation that comes w/ the software. Branding improvements, padding adjustments, and subtle textual changes.
@@ -317,11 +330,11 @@
317
* (s2Member) **Quick Start Video (#10)** Adding Quick Start playlist to Quick Start section.
318
* (s2Member) **UI (#6)** Reducing padding around section headers in s2Member option panels to reduce the amount of space these consume.
319
* (s2Member Pro) **SSL** Forcing all automatic updates of s2Member Pro to occur over SSL for improved security.
320
- * (s2Member) **Login Welcome Page** Improving support for new feature (force HTTP redirection). See: `s2Member -› General Options -› Login Welcome Page` for details on how this feature works.
321
* (s2Member) **Bug Fix: Registration/Profile Fields** Adding space between checkboxes and their labels.
322
* (s2Member) **ClickBank IPN Filter** Adding a new filter to s2Member's ClickBank IPN handler for developers integrating s2Member in creative ways: `c_ws_plugin__s2member_pro_clickbank_notify_handles_completions`. Defaults to a TRUE value. Forcing this filter to a FALSE value will prevent s2Member from handling term completions via IPN communication; in cases where it's preferred that a site owner deal with this specific scenario manually.
323
* (s2Member) **Conformity** Updating calls to `$wpdb->escape` changing to `esc_sql` to conform w/ WordPress standards.
324
- * (s2Member Pro) **Compatibility: Checkout Options** Improving theme support for Checkout Options created using Pro Forms by wrapping other Pro Form Shortcodes. Some site owners reported line break injections in the previous verison. Fixed in this release.
325
* (s2Member) **See also: s2Member Repo** https://github.com/WebSharks/s2Member/commits/000000-dev
326
327
= v130816 =
@@ -329,28 +342,28 @@
329
* (s2Member Pro) **Compatibility, ClickBank (#467)** Improving support for ClickBank PitchPlus Upsell Flows. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-buttons-not-working/#post-55725) for further details.
330
* (s2Member/s2Member Pro) **User Search on Multisite Networks (#468)** User search functionality was partially broken for Child Blogs in a Multisite Network after some improvements were implemented in s2Member® v130731. The issue has now been corrected in this release for Multisite Networks. For further details, please see [this thread](http://www.s2member.com/forums/topic/user-search-no-longer-working/#post-55778).
331
* (s2Member/s2Member Pro) **Z-Index in Menu Pages (#461)** Stacking order against a WordPress® installation running a Dashboard with a collapsed sidebar menu (left side) was causing some UI problems. Fixed in this release.
332
- * (s2Member/s2Member Pro) **SSL Compatibility (#437)** Adding a new option in the `s2Member® -› General Options -› Login Welcome Page` section. The default value for this new option is always `yes`. However, the default functionality can be turned off (if you prefer). This new option allows site owners to better integrate with a core WordPress® feature commonly referred to as `FORCE_SSL_LOGIN` and/or `FORCE_SSL_ADMIN`. This new feature can be used, or not. It is intended mainly for site owners running w/ `FORCE_SSL_LOGIN` and/or `FORCE_SSL_ADMIN`.
333
- * (s2Member/s2Member Pro) **Login/Registration Design Option (#437)** Adding a new option in the `s2Member® -› General Options -› Login/Registration Design` section. This new option (found at the bottom of `s2Member® -› General Options -› Login/Registration Design`) allows a site owner to show/hide the `Back To Home Page` link at the bottom of the default WordPress® Login/Registration system. This can be useful for site owners running w/ `FORCE_SSL_LOGIN` and/or `FORCE_SSL_ADMIN`; where they would prefer NOT to link customers back to the main site under a default HTTPS link; but rather, create their own link and gain better control over this area of their site.
334
- * (s2Member/s2Member Pro) **Videos (#467)** Updating internal documentation found in `Dashboard -› s2Member® -› Quick-Start`. Specifically, the video player here was integrated with an older version of the YouTube® API and was not working properly. Fixed in this release.
335
336
= v130802 =
337
338
- * (s2Member Pro) **Compatibility, WordPress® v3.6** Updating s2Member® Pro Form templates and their underlying CSS. This update improves their appearance against the Twenty Thirteen theme that comes with WordPress® v3.6. Specifically, some of the Pro Form buttons were a little out of place in this new default theme. Fixed in this release.
339
- * (s2Member Pro) **Compatibility, Checkout Options (#443)** Revision 3. Updating this feature to support a wider variety of WordPress® configurations and content filters. This update also resolves an empty `desc=""` attribute error reported by some site owners. Feature description... It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
340
341
= v130801 =
342
343
- * (s2Member Pro) **New Feature; Checkout Options (#403)** Revision 2. Updating documentation on this new feature to prevent conufusion for site owners. s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
344
345
= v130731 =
346
347
- * (s2Member Pro) **New Feature; Checkout Options (#403)** s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
348
- * (s2Member Pro) **Free Checkout (#403)** It is now possible to offer a 100% free checkout experience using any of s2Member's Pro Form Shortcodes. In previous releases of s2Member® it was not possible to set the `ra=""` Attribute to a zero dollar amount. Now it is! This works for PayPal® Pro Forms, and also for Authorize.Net Pro Forms.
349
- * (s2Member Pro) **100% Off Coupons (#403)** It is now possible to offer a 100% off coupon. This works for PayPal® Pro Forms, and also for Authorize.Net Pro Forms. See: `s2Member® -› Pro Coupon Codes` for details and examples.
350
- * (s2Member Pro) **Expiration Date Dropdowns (#428)** This release improves all s2Member® Pro Form templates by adding dropdown menus for the customer's credit card expiration month/year instead of the simple text input field used in previous releases.
351
- * (s2Member/s2Member Pro) **MySQL Wait Timeout (#349)** s2Member now automatically increases the MySQL `wait_timeout` to `300` seconds during s2Member processing routines. Reason for increase: should any 3rd party service API result in unexpected connection timeouts (such as PayPal, Authorize.Net, Amazon, MailChimp, AWeber, etc); this may cause a delay that could potentially exceed the default `wait_timeout` of `30` seconds on the MySQL resource handle that is global to all of WordPress. Increasing `wait_timeout` before transaction processing will decrease the chance of failure after a timeout is exceeded. Among other things, this resolves an elusive bug where there are mysterious 404 errors after checkout under the right scenario (e.g. when an unexpected timeout occurs). This may also resolve problems associated w/ some mysterious reports where emails were not sent during s2Member's attempt to complete post-processing of a transaction (and/or where other portions of post-processing failed under rare circumstances).
352
- * (s2Member/s2Member Pro) **Alternative Views (#300)** This release gives s2Member® the ability to hide protected content in widgets that list protected WordPress® Pages. This is a new Alternative View in the Dashboard. See: `s2Member® -› Restriction Options -› Alternative Views` for further details please.
353
- * (s2Member/s2Member Pro) **Documentation Update (#350)** Subtle improvements to the built-in documentation pertaining to s2Member's Automatic List Transitioning feature in the Dashboard. See: `s2Member® -› API/List Servers -› Automatic Unsubscribes` for further details please.
354
* (s2Member/s2Member Pro) **Bug Fix (#387)** In s2Member® Only mode, a recursive scan for the WordPress® `/wp-load.php` file was failing somtimes when/if a custom directory was configured for plugins. Fixed in this release. See [this thread](http://www.s2member.com/forums/topic/problem-with-wordpress-folder-search-code/) for further details.
355
* (s2Member/s2Member Pro) **Bug Fix (#418)** Fixed incorrect pagination of user search results in the Dashboard.
356
* (s2Member/s2Member Pro) **Bug Fix (#418)** Fixed slow query against user searches in the Dashboard.
@@ -358,20 +371,20 @@
358
359
= v130617 =
360
361
- * (s2Member/s2Member Pro) **IP Restrictions (#148)** It is now possible to introduce a custom template file that controls the error message displayed when/if a user breaches security by exceeding your maximum unique IP addresses; as configured under `s2Member -› Restriction Options -› Unique IP Restrictions`. If you would like to use a custom template for this message, please copy the default template file from `/s2member/includes/templates/errors/ip-restrictions.php` and place this file into your active WordPress® theme directory (or into the `/wp-content/` directory if you prefer). s2Member will automatically find your custom template in one of these locations; and s2Member will use your custom template instead of the built-in default.
362
- * (s2Member Pro) **Bug Fix (#302)** Updating Authorize.Net Pro Form Generator to support max days of `365` instead of `7`.
363
* (s2Member Pro) **Amazon S3 Secret Access Keys (#321)** Updating UI configuration panel to better explain what a Secret Access Key is; and adding a note about Secret Access Keys for Amazon S3 integration. Amazon® is deprecating Secret Access Keys, but they ARE still required for digitally signed URLs. This update changes nothing in s2Member's functionality. It simply adds some additional detail to a configuration field that will assist site owners integrating s2Member w/ Amazon S3 for the first time.
364
* (s2Member/s2Member Pro) **Translations (#317)** Updating `/s2member/includes/translations/translations.txt` (README file). Adding blurp about fuzzy translation entries in existing PO files that translate s2Member. This contains some additional tips on how to update existing PO files upon each release of s2Member and/or s2Member Pro.
365
* (s2Member/s2Member Pro) **Bug Fix (#321)** Fixing bug in `/s2member/includes/templates/cfg-files/s2-cross-xml.php` for S3 Buckets (resulting in `crossdomain.xml`). This file contained a parse error and was causing some problems for site owners integrating Adobe Flash content served via Amazon S3. Fixed in this release.
366
- * (s2Member Pro) **PayPal Pro Forms (#315)** Adding note in the Dashboard here (`s2Member -› PayPal Pro Forms -› Shortcode Attributes Explained`). In the list of Shortcode Attributes we are adding a note regarding max character length for the `desc=""` Attribute in a PayPal Pro Form Shortcode. This can be as long as you like. However, all descriptions passed through PayPal® APIs are truncated automatically to 60 characters max (e.g. the maximum allowed length for PayPal® descriptions is 60 characters). Nothing new here, but we thought it would be a good idea to clarify this behavior in the documentation. Updated in this release.
367
- * (s2Member Pro) **PayPal Pro Forms (#312)** Preventing the use of multiple Pro Forms in the same Post/Page. This has never been possible, it is known to break the functionality of s2Member Pro Forms. Please limit Pro Form Shortcodes to ONE for each Post/Page; and do NOT attempt to use more than one Pro Form Shortcode on the same Post/Page (at the same time). In this release we have added a friendly JavaScript alert/warning for site owners that attempt this, so that problems and confusion can be avoided in this unlikely scenario.
368
369
= v130513 =
370
371
* (s2Member/s2Member Pro) **s2Stream Shortcode Bug Fix (#256)** Fixing a bug first introduced in the previous release where we added support for `player_aspectratio`. This quick update corrects the PHP parse error at line #154 of `sc-files-in.inc.php`. It also corrects the behavior of the `player_height=""` and `player_aspectratio=""` Shortcode Attributes for the `s2Stream` Shortcode. Many thanks to everyone that reported this bug.
372
* (s2Member Pro) **Codestyling Localization** Removing symlink creator for Codestyleing Localization compatibility. There have been some reports of problems during WordPress® automatic upgrades (when/if the symlink exists). Until we can find a way to avoid this, we're disabling the automatic symlink generator. If you're running the Codestyling Localization plugin together with s2Member Pro, you will need to create the symlink yourself if you want to make s2Member fully compatible. Please create a symlink here: `/wp-content/plugins/s2member/s2member-pro` that points to the s2Member Pro directory: `/wp-content/plugins/s2member-pro`. See notes in previous changelog for further details on this.
373
374
- **IMPORTANT NOTE:** If you upgraded previously to v130510 (and you ran the Codestyling Localization plugin together with s2Member® v130510 at any time); please delete this symlink via FTP: `/wp-content/plugins/s2member/s2member-pro`. Please do this BEFORE attempting an automatic upgrade via WordPress®.
375
376
If you missed this note and you've already attempted an automatic upgrade, you will have trouble. Here's how to correct the problem.
377
@@ -382,9 +395,9 @@
382
383
= v130510 =
384
385
- * (s2Member Pro) **Authorize.Net UK (and Other Currencies) (#104)** Adding support for Authorize.Net UK and other currencies too. s2Member Pro now officially supports Authorize.Net UK Edition. It is now possible to change your Authorize.Net Pro Form Shortcode Attribute `cc="USD"` to one of these values: `cc="USD"`, or `cc="CAD"` or `cc="EUR"` or `cc="GBP"`. For further details, please see: `Dashboard -› Authorize.Net Pro Forms -› Shortcode Attributes (Explained)`.
386
- * (s2Member Pro) **ClickBank Skins (#227)** Adding support for the `cbskin=""` Shortcode Attribute. For further details, please see: `Dashboard -› ClickBank Buttons -› Shortcode Attributes (Explained)`.
387
- * (s2Member Pro) **ClickBank PitchPlus Upsell Flows (#227)** Adding support for ClickBank PitchPlus Upsell Flows via new Shortcode Attributes: `cbfid=""`, `cbur=""`, `cbf="auto"`. s2Member Pro now officially supports ClickBank PitchPlus Upsell Flows. We support PitchPlus Basic and PitchPlus Advanced too. For further details, please see: `Dashboard -› ClickBank Buttons -› Shortcode Attributes (Explained)`.
388
* (s2Member/s2Member Pro) **Codestyling Localization** Adding automatic symlink creator for improved compatibility with the CodeStyling Localization plugin. A symlink is created automatically whenever the CodeStyling Localization plugin is installed, and s2Member® Pro is installed as well. The symlink allows the CodeStyling Localization plugin to scan files from the s2Member® Pro directory too; instead of only scanning the s2Member® Framework directory. s2Member and s2Member Pro are now both compatible with the Codestyling Localization plugin (optional).
389
* (s2Member/s2Member Pro) **Custom Templates w/ s2Stream Shortcode** Adding support for custom templates to be used in conjunction with the `s2Stream` Shortcode. It is now possible to take the default player templates from `/s2member/includes/templates/players/` and put these files inside your own WordPress® theme directory (or inside the `/wp-content/` directory). s2Member will automatically find your template files in these locations. Your custom template files will then be used instead of the built-in defaults.
390
* (s2Member/s2Member Pro) **Bug Fix (#59)** Resending a password to a User from the Dashboard (while changing the User's email address at the same time); resulted in the email being sent to the previous email address instead of the new one. Fixed in this release.
@@ -408,7 +421,7 @@
408
For further details, please see [this thread](http://www.s2member.com/forums/topic/paypal-expired-security-token/page/2/) (or monitor the [s2Member KB](http://www.s2member.com/kb/) for new articles on this subject).
409
* (s2Member Pro) **Payflow API Docs** Updating `s2m-pro-extras.zip` to include the latest versions of the PayPal Pro (Payflow Edition) APIs. s2Member Pro customers can download this optional ZIP file from their My Account page at s2Member.com. These are extras only, they are NOT part of the s2Member application.
410
* (s2Member Pro) **Google Checkout Bug Fix (#214)** Updating s2Member's Google Checkout integration to properly support the `rrt` Shortcode Attribute. Fixed in this release. For further details please see [this thread](http://www.s2member.com/forums/topic/google-recurring-problem/#post-48218).
411
- * (s2Member Pro) **Username Validation (#246)** Now forcing user input (during Pro Form registration) to lowercase on Multisite Networks to prevent unnecessary validation errors during checkout (saving a customer time). Also, s2Member now validates a customer's Username before it is passed through `sanitize_user()` (a core WordPress® function). This prevents confusion for a customer where certain characters were stripped out automatically, causing them problems when attempting to log in for the first time (e.g. the customer thinks their Username is `john~doe`; when it is actually `johndoe` because WordPress (when running a Multisite Network) removes anything that is NOT `a-z0-9 _.-@` (and s2Member removes whitespace as well).
412
413
= v130406 =
414
@@ -437,21 +450,21 @@
437
= v130220 =
438
439
* (s2Member Pro) **Feature Enhancement/User Exportation (#33)** Adding support for UTF-8 BOM in CSV User export files. Now a configurable option during User/Member Exportation.
440
- * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#21)** Adding additional Replacement Codes for New User Email Notifications (for both the User/Member Notification and also for the Administrator Notification). The following Replacement Codes are now possible: `%%role%%`, `%%label%%`, `%%level%%`, `%%ccaps%%`. Also adding four new Filters for developers. These include: `ws_plugin__s2member_welcome_email_sbj`, `ws_plugin__s2member_welcome_email_msg`, `ws_plugin__s2member_admin_new_user_email_sbj`, `ws_plugin__s2member_admin_new_user_email_msg`. See `Dashboard -› General Options -› Email Configuration` for further details.
441
- * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#30)** Adding support for PHP tags in the following emails: New User Notification, Administrative New User Notification, Signup Confirmation Email, Specific Post/Page Confirmation Email. See the relevant sections in your Dashboard for further details. Such as: `s2Member® -› General Options -› Email Configuration` and `s2Member® -› PayPal® Options -› Signup Confirmation Email`.
442
- * (s2Member/s2Member Pro) **Feature Enhancement/Shortcodes (#23)** Adding support for the `lang=""` Attribute in PayPal Buttons, PayPal Pro Forms, and in Google Checkout Buttons. This is a bit different from the existing `lc=""` value. The `lc=""` value controls the interface at PayPal, while the `lang=""` value controls the language of the Standard and/or Express Checkout Button itself (with respect to s2Member®). For further details, please see: `Dashboard -› PayPal Buttons (or Pro Forms) -› Shortcode Attributes (Explained)`.
443
* (s2Member/s2Member Pro) **Bug Fix** Fixing bug in User Access Package. Now checking if `$cap_enabled` also is `TRUE`; just in case another plugin or hack file attempts to disable Custom Capabilities without removing them. Not likely, but we can support this easily with a quick update in this release. Note... this has no impact on s2Member's existing functionality. Custom Capabilities continue to work just as they always have.
444
- * (s2Member/s2Member Pro) **Feature Enhancement/Logging** Adding new logger. Logs to file `reg-handler.log`. Includes all User/Member registrations handled by s2Member® (either directly or indirectly). Only if logging is enabled. For further details, please check your Dashboard here: `s2Member® -› Log Files (Debug)`.
445
- * (s2Member/s2Member Pro) **Feature Enhancement/EOTs (#29)** Adding UI option for EOT Grace Time. For further details, please see: `Dashboard -› PayPal Options -› Automatic EOT Behavior`. Also adding a new Filter for developers: `ws_plugin__s2member_eot_grace_time`.
446
- * (s2Member/s2Member Pro) **Feature Enhancement/EOTs** Adding UI option for EOT Custom Capability Removal. For further details, please see: `Dashboard -› PayPal Options -› Automatic EOT Behavior`. Also adding a new Filter for developers: `ws_plugin__s2member_remove_ccaps_during_eot_events`.
447
- * (s2Member/s2Member Pro) **Feature Enhancement/s2Stream Shortcode (#32)** Adding additional support for JW Player™ Captions, Titles, Descriptions, and Media IDs (i.e. `player_title=""`, `player_description=""`, `player_mediaid=""`, `player_captions=""`). Please check the Shortcode Attributes tab in [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes) for further details.
448
449
= v130214 =
450
451
* **(Maintenance Release) Upgrade immediately.**
452
* (s2Member/s2Member Pro) **Log Viewer (#16)** Additional log file descriptions have been added to the Dashboard, along with some other UI enhancements in this section.
453
* (s2Member/s2Member Pro) **Bug Fix (#18)** Usernames consisting of all numeric values were not always being redirected to the Login Welcome Page upon logging in, even when s2Member® was configured to do so. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/subscribers-not-taken-to-welcome-page/page/2/#post-41663).
454
- * (s2Member Pro) **Coupon Codes (#19)** Adding new Replacement Codes: `%%full_coupon_code%%`, `%%coupon_code%%` and `%%coupon_affiliate_id%%`. These are now available in all API Tracking Codes, in all Custom Return URLs for Pro Forms, and in most API Notifications.
455
* (s2Member Pro) **Coupon Codes (#19)** Deprecating the `%%affiliate_id%%` Replacement Code for tracking Affiliate Coupon Codes in favor of `%%coupon_affiliate_id%%`.
456
* (s2Member/s2Member Pro) **Last Login Time** Improving readability of Last Login Time in list of Users/Members.
457
* (s2Member/s2Member Pro) **Compatibility** Improving support for WordPress® v3.6-alpha with respect to `tabindex` values on `/wp-login.php`.
@@ -460,39 +473,39 @@
460
= v130213 =
461
462
* **(Maintenance Release) Upgrade immediately.**
463
- * (s2Member Pro) **Compatibility (#13)** PayPal® Payments Pro, PayPal® Payments Pro (Payflow Edition), and Authorize.Net. s2Member® Pro now supports a recurring interval of Semi-Yearly (e.g. charges occur every six months). This has always been possible by manipulating Shortcode Attribues, but it's now officially supported by Pro Form Generators in your Dashboard which come with s2Member® Pro.
464
* (s2Member Pro) **Compatibility (#13)** ClickBank® Recurring Products. ClickBank® has started allowing a Weekly recurring interval and stopped allowing Yearly. s2Member® has been updated in this release to support a Weekly recurring interval with ClickBank®; and to remove the Yearly option in the ClickBank® Button Generator.
465
* (s2Member Pro) **Compatibility (#13)** PayPal® Payments Pro (Payflow Edition). PayPal® Payments Pro (Payflow Edition) has started allowing a Daily recurring interval. s2Member® has been updated in this release to support a Daily recurring interval with PayPal® Payments Pro (Payflow Edition). Daily recurring intervals remain possible with PayPal® Pro accounts that do not include the additional Payflow API. This change simply adds official support for Daily recurring billing with PayPal® Payments Pro (Payflow Edition).
466
* (s2Member) **Debugging Assistance** Updating s2Member's PayPal® PDT/Auto-Return handler to better handle scenarios where a site owner is missing a PayPal® PDT Identity Token in their s2Member® configuration, or has incorrectly set the `custom=""` Shortcode Attribute in Payment Buttons generated with s2Member®. Administrative notices are now displayed in the Dashboard when/if this occurs and s2Member® can catch the issue during post-processing of a transaction.
467
* (s2Member/s2Member Pro) **General Code Cleanup** Removing all `/**/` markers in the s2Member® codebase. These were used in conjunction with PolyStyle® code formatting tools to preserve line breaks in the code. The WebSharks™ development team no longer uses PolyStyle®, making these obsolete now. Removed in this release to improve readability for developers.
468
* (s2Member/s2Member Pro) **General Code Cleanup** Removing all unnecessary uses of PHP's `eval()` function in s2Member's codebase. These were used to keep repetitive code all in a single line; part of a standard the WebSharks™ development team is now moving away from. Removed in this release to improve readability for developers; and to prevent unnecessary confusion.
469
* (s2Member/s2Member Pro) **Auto-EOT System** Updated s2Member's Auto-EOT System. s2Member® now leaves an additional note behind after a demotion, which references the Paid Subscr. Gateway and Paid Subscr. ID values before the demotion occurred. This way there is a better reference left behind after an automatic demotion occurs.
470
- * (s2Member/s2Member Pro) **Searching Users** Updating search function in list of Users (i.e. `Dashboard -› Users -› [Search Box]`) to include the Administrative Notes field when searching for Users. This allows references to old Paid Subscr. IDs in the Administrative Notes field to be considered when searching Users/Members.
471
* (s2Member/s2Member Pro) **Last Login Time** Adding new User Option value (tracked by s2Member®). This option value tracks the last time each User/Member logged into your site. Ex: `get_user_option("s2member_last_login_time")`.
472
* (s2Member/s2Member Pro) **Last Login Time** Adding new User data column to list of Users in the Dashboard: `Last Login Time`.
473
* (s2Member/s2Member Pro) **Last Login Time** Adding new API Function: [`s2member_last_login_time()`](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/).
474
* (s2Member/s2Member Pro) **ezPHP** Updated all internal documentation references that pointed to Exec-PHP or the PHP Execution plugin as recommendations for developers that wish to integrate PHP tags into Posts/Pages/Widgets. These old references now point to the [ezPHP](http://www.s2member.com/kb/ezphp-plugin/) plugin by s2Member® Lead Developer: Jason Caldwell. s2Member® remains compatible with other PHP plugins, but we recommend [ezPHP](http://www.s2member.com/kb/ezphp-plugin/) for the best compatibility with both s2Member® and WordPress® itself.
475
- * (s2Member/s2Member Pro) **Simple Shortcode Conditionals** Adding a [Simple Shortcode Conditionals](http://www.s2member.com/kb/simple-shortcode-conditionals/) section to `s2Member® -› Restriction Options` in the Dashboard. This way more site owners will be aware of this feature from the start.
476
- * (s2Member/s2Member Pro) **Login/Registration Design** Login/Registration Design with s2Member® is now optional (e.g. this feature can be disabled now if you prefer). See: `Dashboard -› s2Member® -› General Options -› Login/Registration Design`. This feature is enabled by default on all s2Member® installations.
477
* (s2Member/s2Member Pro) **Inline Documentation** Adding more links to KB articles throughout the Dashboard area.
478
- * (s2Member/s2Member Pro) **Inline Documentation** Updating all spaced parenthesis like `( something... )` to remove the grammatical errors by removing the extra spaces inside these brackets.
479
- * (s2Member/s2Member Pro) **Inline Documentation** Removing all references to PriMoThemes and/or primothemes.com within the application itself. PriMoThemes is now s2Member® (as of Jan 2012 it's been awhile; so time to remove these obviously).
480
* (s2Member/s2Member Pro) **Inline Documentation** Adding link to "more updates..." in the Dashboard, pointing to the s2Member® KB. Increasing number of recent KB udpates from 3 up to 5. These are visible from any s2Member® page in the Dashboard (top of the right-hand column).
481
- * (s2Member/s2Member Pro) **Inline Documentation** Adding [s2Member® Pro](http://www.s2member.com/pro/) (a recommended upgrade) to the Quick-Start Guide for s2Member® — in the Dashboard.
482
- * (s2Member/s2Member Pro) **Inline Documentation** Adding Troubleshooting section to the Quick-Start Guide for s2Member® — in the Dashboard.
483
- * (s2Member/s2Member Pro) **Inline Documentation** Adding Perfect Theme section to the Quick-Start Guide for s2Member® — in the Dashboard.
484
- * (s2Member/s2Member Pro) **Inline Documentation** Adding video tutorial to the `Dashboard -› s2Member® -› API / Scripting -› Custom Capabilities` section.
485
- * (s2Member/s2Member Pro) **Logging Functionality** Adding an s2Member® Log Viewer to the Dashboard for all site owners; and also for s2Member® Support Reps to use when running diagnostics. See: `Dashboard -› s2Member® -› Log Files (Debug)` for further details.
486
- * (s2Member/s2Member Pro) **Logging Functionality** Logging routines are now enabled by default on all new installations of s2Member®. Existing installations of s2Member® are advised to enable logging, by visiting this section of your Dashboard. See: `s2Member® -› PayPal® Options (or Authorize.Net, ClickBank, etc) -› Account Details -› Logging`.
487
- * (s2Member/s2Member Pro) **Logging Functionality** Additional logging routines that will track all s2Member® HTTP communication within WordPress® is now enabled by default. This new log file will be located inside `/wp-content/plugins/s2member-logs`. It is named: `s2-http-api-debug.log`. See: `Dashboard -› s2Member® -› Log Files (Debug)` for further details.
488
- * (s2Member/s2Member Pro) **Logging Functionality** Additional logging routines that will track *all* HTTP communication within WordPress® are now possible (these are quite extensive). See: `Dashboard -› s2Member® -› Log Files (Debug) -› Logging Configuration` for further details. This more extensive logging is disabled by default; it must be enabled by a site owner. For debugging only this should NEVER be enabled on a live site.
489
* (s2Member/s2Member Pro) **Logging Functionality** Adding date/time to all log entries maintained by s2Member®.
490
- * (s2Member/s2Member Pro) **GZIP Conflicts** Adding additional lines of defense against GZIP conflicts during file downloads, with calls to `@apache_setenv("no-gzip", "1")` in other areas not just during public file downloads (e.g. also during User/Member exporations, log file downloads, etc).
491
* (s2Member/s2Member Pro) **GZIP Conflicts** Adding an additional line of defense against GZIP conflicts during file downloads, with this line now appearing in the `.htaccess` file snippet added by the s2Member® software application: `RewriteCond %{QUERY_STRING} (^|\?|&)no-gzip\=1`.
492
* (s2Member/s2Member Pro) **GZIP Conflicts** Adding an additional line of defense against GZIP conflicts during User/Member exporations, log file downloads, and other downloads that come straight from the Dashboard area to site owners via web browsers. s2Member® now sends `Content-Encoding: none` to prevent Apache's `mod_deflate` from interfering with s2Member® under these special scenarios. A `Content-Encoding: none` header value is technically invalid, but it's known to prevent issues with `mod_deflate`. Since a `Content-Encoding: none` header value is technically invalid, s2Member® does NOT implement this during public file downloads; where we need to provide wider support for a long list of devices that may choke on this incorrect value. This is only implemented for site owners in the administrative areas of WordPress; and only for file downloads related to CSV export files and logs.
493
* (s2Member/s2Member Pro) **Bug Fix** Fixed incorrect `preg_split` limit against `$paypal['item_number']` in IPN handler for `subscr_payment` and `subscr_cancel` transaction types. Doesn't appear to have affected anything negatively, but it was wrong none the less. Fixed in this release.
494
* (s2Member/s2Member Pro) **Bug Fix** Fixed incorrect handling of a single opt-in checkbox on BuddyPress registration forms, which was not being wrapped with s2Member's BuddyPress container divs at all times. A symptom of this bug was to see a checkbox on your BuddyPress registration that was out of alignment or out of position. Fixed in this release.
495
- * (s2Member/s2Member Pro) **Compatibility** Updated all of s2Member's IPN handlers to accept `$_REQUEST` data for Proxy-related variables like `s2member_paypal_proxy_return_url`. This allows s2Member® itself to use `$_POST` variables for Proxy-related variables; and it further reduces the likelihood of 403 Forbidden errors caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/). One issue this should help to correct, is a mysterious case where a `success=""` Shortcode Attribute is not working as you might expect. This can be caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/) at places like HostGator®, because a URL is passing through a query string. This release will help to prevent this from becoming a problem, because `success=""` URLs will be passed through `$_POST` variables now in all Pro Form integrations.
496
497
= v130207 =
498
@@ -506,13 +519,13 @@
506
= v130203 =
507
508
* **(New Release) Please read this changelog for important details.**
509
- * (s2Member Pro) **Remote Ops API (`create_user`)** s2Member® Pro's Remote Operations API, for the `create_user` Operation has been updated to support a new specification: `modify_if_login_exists`. For further details, please check your s2Member® Pro Dashboard here: `s2Member® -› API / Scripting -› Remote Operations API`.
510
- * (s2Member Pro) **Remote Ops API (`modify_user`,`delete_user`)** s2Member® Pro's Remote Operations API has been updated to support two additional Operations: `update_user` and `delete_user`. For further details on these new Operations, please check your s2Member® Pro Dashboard here: `s2Member® -› API / Scripting -› Remote Operations API`.
511
* (s2Member Pro) **Remote Ops API (`init` hook priority)** s2Member® Pro's Remote Operations API has been updated to prevent conflicts when running in concert with BuddyPress v1.6.4+. Hook priority now running at default value of `11`, right after BuddyPress v1.6.4 at hook priority `10`.
512
- * (s2Member/s2Member Pro) **s2Stream Shortcode (#88)** s2Member® now supports JW Player® license keys (for the professional edition) using Shortcode Attribute `player_key=""` (or they can be specified sitewide via JavaScript provided by Longtail Video optional). See [this discussion](http://www.s2member.com/forums/topic/jwplayer-shortcode-for-poster-not-working/#post-40435). See also: [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes).
513
* (s2Member/s2Member Pro) **s2Stream Shortcode (#88)** Bug fix. The s2Stream Shortcode was not working properly (with respect to a specific Shortcode Attribute: `player_image=""`). Fixed in this release. See [this discussion](http://www.s2member.com/forums/topic/jwplayer-shortcode-for-poster-not-working/#post-40128). See also: [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes).
514
- * (s2Member Pro) **User Exportation (#89)** s2Member® Pro's User Exportation now includes separate data columns for each Custom Registration/Profile Field that you've configured with s2Member®. Also, s2Member® Pro will now include ALL Custom Registration/Profile Fields (even if there is no value associated with certain Fields, for specific Users/Members e.g. empty column values will now be included by s2Member® Pro). This provides a more consistent/readable CSV export file; a major improvement. Discussed in [this KB article](http://www.s2member.com/kb/importing-updating-users/#custom-registration-profile-fields).
515
- * (s2Member Pro) **User Importation (#89)** s2Member® Pro's User/Member Import format changed in this release (with respect to Custom Registration/Profile Fields only). If you are importing Custom Registration/Profile Fields, please review [this KB article](http://www.s2member.com/kb/importing-updating-users/#custom-registration-profile-fields) before you import new Users/Members or mass update any existing Users/Members. ALSO NOTE: User/Member CSV Export Files generated by previous versions of s2Member® Pro (if they contained any Custom Registration/Profile Fields) will NOT be compatible with this latest release (e.g. you should NOT attempt to re-import those old files in an effort to mass update existing Users/Members). Please generate a new User/Member CSV Export File in the latest release of s2Member® Pro before attempting to edit and/or mass update existing Users/Members with applications like MS Excel or OpenOffice.
516
517
= v130123 =
518
@@ -520,16 +533,16 @@
520
* (s2Member/s2Member Pro) **s2Stream Shortcode (#78)** s2Member® now supports JW Player® license keys using Shortcode Attribute `player_key=""`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
521
* (s2Member/s2Member Pro) **s2Stream Shortcode (#79)** s2Member® now supports JW Player® [Advanced Option Blocks](http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player) using Shortcode Attribute `player_option_blocks=""`. Example: `player_option_blocks="sharing:{}"`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
522
* (s2Member Pro) **User Exportation (#80)** s2Member® Pro User Exportation now occurs with MySQL `ORDER BY ID`, instead of no `ORDER BY` at all. This helps to prevent confusion and buggy behavior. Discussed in [this thread](http://www.s2member.com/forums/topic/user-export-not-working-properly/#post-39123).
523
- * (s2Member Pro) **User Exportation (#81)** s2Member Pro's User Exportation now supports the exporation of up to `1000` User/Member table rows at once. Of course it remains possible to export ALL of your Users/Members with s2Member® Pro. All we've done here is bump the default limit from `250` up to `1000` at a time. In addition, there is a new Filter making it possible to extend this limit further on servers that can handle it. Use Filter: `ws_plugin__s2member_pro_export_users_limit` if you would like to export more Users all at once. See also: `Dashboard -› s2Member® Pro -› User/Member Exportation`.
524
* (s2Member/s2Member Pro) **KB Articles** Inline documentation updated in some areas, with a few links pointing to helpful/related KB articles.
525
526
= v130121 =
527
528
* **(Maintenance Release) Upgrade immediately.**
529
- * **New Feature** s2Member® now comes with a new Shortcode `[s2Stream file_download="video.mp4" player="jwplayer-v6" ... /]`, making it MUCH easier for site owners to implemement RTMP streams of audio/video content. For further details, please check your Dashboard under: `s2Member® -› Download Options -› JW Player® v6 and RTMP Protocol Examples`. See also: `s2Member® -› Download Options -› Shortcode Attributes (Explained)`.
530
* **Compatibility (#75)** Updated s2Member's local file storage engine (for File Downloads via s2Member®), to support special characters in file names. Discussed in [this thread](http://www.s2member.com/forums/topic/problem-with-quotes-in-filename-downloads/#post-38395).
531
* **Bug Fix (#71)** A bug first introduced in the previous release of v130116, where we added support for byte-range requests to s2Member's File Download functionality, was causing multiple byte-range requests (processed by s2Member) to count against each User/Member as multiple File Downloads. Fixed in this release.
532
- * **Compatibility** Updated s2Member's integration with Amazon® S3 to extend the default 30 second connection timeout (which was too conservative for many integrations) up to 24 hours by default, making it match the same as s2Member's Amazon® CloudFront connection timeout. For further details, please check your Dashboard under: `s2Member® -› Download Options -› Amazon® S3/CDN Storage -› Dev Note w/Technical Details`. It is possible to modify this connection timeout through a Filter discussed there.
533
534
= v130116 =
535
1
+ = v150225 =
2
+
3
+ - (s2Member Pro) **Accept Bitcoin via Stripe!** This release of s2Member Pro comes integrated with the latest version of the Stripe API, where it is now possible to accept Bitcoin right along with most major credit cards—made possible by [Stripe's latest update to support Bitcoin](https://stripe.com/bitcoin). It's as easy as flipping a switch :-) Please see: `Dashboard ⥱ s2Member Pro ⥱ Stripe Options ⥱ Account Details ⥱ Accept Bitcoin`. Referencing [this GitHub issue](https://github.com/websharks/s2member/issues/482); i.e., the original feature request.
4
+ - (s2Member Pro) **Stripe API Upgrade:** This release of s2Member Pro updates the Stripe SDK and Stripe API to the latest version (Stripe API version: `2015-02-18`). In addition, this release forces a specific version of the Stripe API in all communication between Stripe and s2Member; thereby avoiding a scenario where the Stripe API could be updated again in the future, in ways that might prevent s2Member Pro from operating as intended. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/484) if you'd like technical details. Props to @pauloz1890 for reporting this.
5
+ - (s2Member/s2Member Pro) **Security Badge Sizes:** This release of s2Member corrects an issue with the `[s2Member-Security-Badge v="1" /]` shortcode. If you set `v="2"` or `v="3"`, the dimensions were miscalculated. Props to @Mizagorn See [this GitHub issue](https://github.com/websharks/s2member/pull/466) if you'd like additional details.
6
+ - (s2Member Pro) **Bug Fix:** Opt-in checkbox state (and some custom fields) were losing state when switching from one type of Pro Form to another—whenever Pro Form Checkout Options were in use. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/468) if you'd like additional details. Props to @zenzoidman for finding this!
7
+ - (s2Member) **Bug Fix:** Alt. View Restrictions stopped working on navigation menu items in the previous release of s2Member v150203 due to a default argument value being misinterpreted by a sub-routine. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/475) if you'd like further details.
8
+ - (s2Member/s2Member Pro) **Bug Fix:** Some site owners reported "paying" customers being left with a Membership Level of `0` at seemingly random times that may have occurred only once in every 300+ transactions. The issue was related to a regular expression being performed against encrypted binary data with an ungreedy `?` in the regex pattern. Certain characters in the binary output would be lost when specific character sequences were encountered; resulting in a random failure to decrypt cookies set by s2Member. In short, the underlying cause was identified and corrected in this release. Thanks to all who reported this. Our appreciation goes out to everyone who helped to test for this elusive bug. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/397) if you'd like additional technical details.
9
+ - (s2Member/s2Member Pro) **UI Enhancements:** This release includes an enhanced UI, along with many subtle improvements to the inline documentation/instructions provided within the WordPress Dashboard.
10
+ - (s2Member Pro) **Retiring Google Wallet:** Google [announced that they are retiring Google Wallet for Digital Goods](https://support.google.com/wallet/business/answer/6107573). s2Member Pro continues to support Google Wallet, but this release updates the "Other Gateways" section in the Dashboard to make it clear that Google Wallet will not be supported in future versions of s2Member Pro. In fact, Google Wallet for Digital Goods will [close March 2nd, 2015](https://support.google.com/wallet/business/answer/6107573).
11
+ - (s2Member/s2Member) **bbPress Bug Fix:** This release resolves a security issue when running a Multisite Network with bbPress + s2Member. Level 0 access was being granted by the bbPress plugin across all sites in a network. That behavior is fine for bbPress, but is unexpected when s2Member is running in a Network environment. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/465) if you'd like additional details. **IMPORTANT TIP:** If you experienced this issue, please read through [these important comments](https://github.com/websharks/s2member/issues/465#issuecomment-76039842) about bbPress Participants needing to be removed from child blogs in order to fully rid yourself of this problem; i.e., once you complete the update of s2Member, you should [also read this please](https://github.com/websharks/s2member/issues/465#issuecomment-76039842).
12
+ - (s2Member/s2Member Pro) **404 / Alt. Views Bug Fix:** This release of s2Member corrects a rare issue where the Membership Options Page (or other pages) can produce random 404 errors whenever s2Member's Alt. View Restrictions are enabled, and there is another plugin installed which runs a DB query using the `WP_Query` class _before_ the Main WP Query has been run. Resolved through the use of `->is_main_query()` instead of tracking it statically via `$initial_query`. See also [this GitHub issue](https://github.com/websharks/s2member/issues/481) if you'd like additional technical details.
13
+
14
= v150203 =
15
16
+ - (s2Member Pro) **Gift/Redemption Codes:** This release adds a powerful new shortcode: `[s2Member-Gift-Codes /]`. This makes it easy to generate and sell access to gift codes (i.e., gift certificates) and/or to a list of redemption codes. For instance, where a single team leader might like to purchase multiple accounts they can distribute to others on a team, or in a group. Video demo here: https://www.youtube.com/watch?v=T3N_vygowbM&feature=youtu.be ~ See also: [this GitHub issue](https://github.com/websharks/s2member/issues/386) for additional technical details.
17
+ - (s2Member Pro) **User-Specific Coupon Codes:** This release of s2Member makes it possible to configure Pro-Form Coupon Codes that are connected (i.e., only valid) when entered by specific Users/Members who are logged into the site. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/403) for additional technical details.
18
- (s2Member Pro) **Coupon Code Max Uses:** This release of s2Member Pro adds the ability to set a maximum number of times that a Coupon Code can be used. This makes it easy to create Coupon Codes that are designed to be used only one time, for instance; or for X number of times. After a Coupon Code is used X number of times, it will expire automatically. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
19
- (s2Member Pro) **Coupon Code Usage Tracking:** This release of s2Member Pro adds the ability to track the number of times that each of your Coupon Codes have been used. It is also possible to alter the number of uses, and/or set a maximum number of uses. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
20
- (s2Member Pro) **Coupon Code Active/Expires Dates:** This release of s2Member Pro makes it possible to establish both a start and end time for each of your Pro Coupon Codes. In previous versions of s2Member, it was only possible to set an expiration date. You can now create Coupon Codes that will become active at some point in the future automatically. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
21
- (s2Member Pro) **Coupon Code UI Enhancements:** This release of s2Member Pro comes with an updated UI that makes it easier to manage your Pro Coupon Codes. See: `Dashboard ⥱ s2Member ⥱ Pro Coupon Codes`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/285) for technical details.
22
+ - (s2Member Pro) **Store Coupon Codes for Each User:** s2Member Pro now stores a list of all coupon codes that a customer has used on your site. See: `Dashboard ⥱ Users ⥱ Choose User [Edit]`. Scrolling down to the set of s2-related fields will reveal a new list of coupon codes. This list will be filled for new customers only; i.e., s2Member does not have this data for past purchases; only for new customers that you acquire after updating to the latest release. See also [this GitHub issue](https://github.com/websharks/s2member/issues/462) if you'd additional details.
23
- (s2Member/s2Member Pro) **EOT Custom Value:** In this release of s2Member, the `get_user_option('s2member_custom')` value is preserved after an EOT has taken place, making it possible for site owners to continue to read this value (along with any custom pipe-delimited values they have injected there), even after an EOT has taken place. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/449).
24
- (s2Member/s2Member Pro) **JW Player Broken Links:** This release corrects some broken links referenced by the inline documentation for s2Member in the WordPress Dashboard. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/448) if you'd like further details.
25
+ - (s2Member/s2Member Pro) **Security:** This release of s2Member checks for the existence of the WordPress PHP Constant: `WPINC` instead of looking for the less reliable `$_SERVER['SCRIPT_FILENAME']`. Some site owners reported this was causing trouble in a localhost environment during testing, or when running s2Member on some hosts that are missing the `SCRIPT_FILENAME` environment variable; e.g., some Windows servers. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/454) if you'd like additional details.
26
- (s2Member Pro) **Advanced Import/Export Compat:** This release of s2Member Pro includes compatibility and a bug fix when running on WordPress v4.1+. Three PHP notices during importation, along with some quirky behavior associated with the `role` CSV column have been corrected. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/455) for technical details.
27
- (s2Member Pro) **`[s2Member-List /]` Bug Fix:** This release resolves an issue with pagination in the `[s2Member-List /]` shortcode after recent improvements to the search functionality. See [this GitHub issue](https://github.com/websharks/s2member/issues/155#issuecomment-69403120) if you'd like additional details.
28
+ - (s2Member Pro) **`[s2Member-List /]` Enhancement:** This release improves search functionality in the `[s2Member-List /]` shortcode, making it so that all searches default to `*[query]*`; i.e., are automatically wrapped by wildcards. If a user enters a wildcard explicitly (or a double quote), this default behavior is overridden and the search query is taken as given in such a scenario. This makes the search functionality easier for end-users to work with, since it no longer requires an exact match. Default behavior is now a fuzzy match. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/394) if you'd like further details.
29
- (s2Member/s2Member Pro) **AWS v4 Authentication:** This release of s2Member adds AWS v4 Authentication support for Amazon Web Service Regions that only accept the AWS v4 authentication scheme. If you had trouble in the recent past when attempting to integrate s2Member with S3 Buckets (or with CloudFront) in regions outside the USA, this release should resolve those issues for you. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/440) if you'd like additional technical details.
30
+ - (s2Member Pro) **Bug Fix:** Pro-Form Checkout Options not working in all cases whenever they are used together with Free Registration Forms. Resolved in this release.
31
32
= v150102 =
33
34
- (s2Member/s2Member Pro) **Custom Field Mapping:** This release of s2Member adds an internal mapping from s2Member's Custom Field values for each user, to the `get_user_option()` function in the WordPress core. This makes it possible to retrieve user custom field values like always via `get_user_field()` or now through the native `get_user_option()` function also. The benefit of this is that s2Member's custom fields are now more compatible with other themes/plugins for WordPress.
35
+ - (s2Member Pro) **[s2Member-List /] Shortcode:** It is now possible to search through custom fields created with s2Member using the `search_columns=""` attribute; e.g., `search_columns="user_login,user_email,s2member_custom_field_MYFIELDID"`; where `MYFIELDID` can be replaced with a field ID that you generate with s2Member via `Dashboard ⥱ s2Member ⥱ General Options ⥱ Registration/Profile Fields`. See also: [this KB article](http://www.s2member.com/kb/s2member-list-shortcode/) for further details. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/155) for details regarding this improvement.
36
- (s2Member/s2Member Pro) **MailChimp Bug Fix** This release fixes a bug first introduced in the previous release, which was causing Interest Groups configured w/ s2Member to not be added properly. Resolved in this release. Props to @ethanpil Thanks!
37
- (s2Member Pro) **ccBill Buttons** This release updates all ccBill button graphics. The MasterCard logo has been removed, and a new set of buttons was created to improve upon the set provided in previous versions of s2Member Pro. See: [this GitHub issue](https://github.com/websharks/s2member/issues/392) if you'd like further details.
38
+ - (s2Member Pro) **Authorize.Net** The `AUD` currency code is now supported by Authorize.Net, and thus, s2Member Pro has been updated to support the `AUD` currency code for Pro-Forms integrated with Authorize.Net. See [this GitHub issue](https://github.com/websharks/s2member/issues/383) if you'd like further details.
39
- (s2Member Pro) **Subscr. CID for Stripe** This release corrects a bug which made it impossible to update the Subscr. CID value (for Stripe) using the user edit form in the Dashboard. For further details, please see [this GitHub issue](https://github.com/websharks/s2member/issues/380).
40
- (s2Member/s2Member Pro) **Bug fix** s2Member's membership access times log was failing to collect all required access times under certain scenarios where multiple CCAPS were being added or removed in succession within the same process, but across multiple function calls. This resulted in unexpected behaviors (in rare cases) when attempting to use the `[s2Drip /]` shortcode. Fixed in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/406) for technical details.
41
- (s2Member/s2Member Pro) **Compatibility** This release includes a fix for s2Member's Multisite Network patches applied to the `wp-admin/user-new.php` file whenever you configure s2Member on a Multisite Network. This change makes s2Member compatible with the coming release of WordPress v4.1 and v4.2-beta as it exists now. See: [this GitHub issue](https://github.com/websharks/s2member/issues/410) if you'd like additional details.
42
- (s2Member Pro) **Bug Fix:** A feature that was previously introduced in v140816, which made it possible for site owners to set a failed payment threshold (in s2Member's Authorize.Net integration), was suffering from an off-by-one issue during total failed payment calculations. Fixed in this release. See also [this GitHub issue](https://github.com/websharks/s2member/issues/416) if you'd like further details.
43
+ - (s2Member Pro) **Feature Enhancement:** Whenever a failed payment threshold is reached (in s2Member's Authorize.Net integration), not only will s2Member terminate on-site access, but now the underlying ARB (Automated Recurring Profile) is cancelled at the same exact time. This way future billing attempts on the Authorize.Net side will not be possible; i.e., it ensures that a failed payment threshold will always terminate both on-site access and the ARB itself together at the same time, as opposed to allowing the ARB termination to occur automatically via Authorize.Net, _whenever_. See also [this GitHub issue](https://github.com/websharks/s2member/issues/416) if you'd like further details.
44
- (s2Member Pro) **ClickBank Disclaimer:** This release of s2Member adds a default Auto-Return Header Template (customizable from `s2Member ⥱ ClickBank Options` in the Dashboard) which includes a disclaimer that ClickBank requires of most merchants before final approval.
45
46
_This default template should help to reduce the time it takes new merchants to receive final approval from ClickBank when first starting out in the ClickBank network. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/412) if you'd like further details._
47
+ - (s2Member Pro) **Bug Fix:** PayPal Pro-Forms for Specific Post/Page Access, and configured with `accept="paypal"` (i.e., to accept PayPal only) were not hiding the entire Billing Method section as intended. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/399) if you'd like further details.
48
+ - (s2Member Pro) **Bug Fix:** PayPal Pro-Forms using Express Checkout for Billing Agreements under a non-native currency (i.e., under a different currency than their own PayPal account) were failing under some scenarios (notably with the `BRL` currency code). Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/414) if you'd like technical details.
49
- (s2Member Pro) **Stripe API:** s2Member's Stripe integration has been updated to use the new `statement_descriptor` field in favor of the now deprecated `statement_description`. See [this GitHub issue](https://github.com/websharks/s2member/issues/422) for technical details.
50
- (s2Member Pro) **Stripe Bug Fix:** In the case of a global tax rate having been applied to the total cost, there were certain scenarios where s2Member Pro would kick back an error message, "Invalid Parameters to Stripe". Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/425) if you'd like technical details.
51
- (s2Member/s2Member Pro) **WP Core Compat.:** This version of s2Member forces the `wptexturize` filter off in WordPress, due to a bug that was introduced in recent versions of the WordPress core; which results in broken shortcodes in some scenarios. Until the underlying bug is fixed in the WP core, the `wptexturize` filter must be disabled to prevent corruption of any WordPress shortcode that may contain `<` or `>` symbols.
56
- (s2Member Pro) **Coupon Codes:** All transaction-related email templates now support three additional Replacement Codes: `%%full_coupon_code%%`, `%%coupon_code%%`, and `%%coupon_affiliate_id%%`. These have been documented in your Dashboard in places where transaction-related email templates are configured. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/384) if you'd like additional details.
57
- (s2Member Pro) **Stripe Tax Info:** s2Member now attaches metadata to Stripe Charges and to Stripe Subscriptions which includes a JSON-encoded object containing two or more properties when tax applies.
58
59
+ These metadata properties can be found in your Stripe Dashboard with the metadata key: `tax_info`; which contains the following JSON-encoded properties: `tax` (total tax that was or will be charged on the regular amount), `tax_per` (tax percentage rate that was applied based on your configuration of s2Member Pro); along with `trial_tax` and `trial_tax_per` in the case of a Stripe Subscription that includes an initial/trial period that requires payment; i.e., the tax applied (if any) to an initial/trial payment on a Subscription.
60
61
We hope this additional information being recorded by s2Member and stored securely within your Stripe account will make it easier for you to maintain accurate bookkeeping records moving forward. This additional metadata is generated for new customers only. It will not be backfilled for any past transactions.
62
63
+ - (s2Member Pro) **Stripe Tax Info:** s2Member now passes the tax location; i.e., `address_state`, `address_zip`, and `address_country` to each Stripe Card object associated with a Stripe Customer.
64
65
We hope this additional information being recorded by s2Member and stored securely within your Stripe account will make it easier for you to maintain accurate bookkeeping records moving forward. This additional cardholder data is collected and stored for new customers only; it will not be backfilled for any past transactions.
66
68
69
- (s2Member Pro) **Stripe Coupon Code:** s2Member now attaches metadata w/ a coupon code used by your customer (if applicable) to each Stripe Charge and/or Stripe Subscription object.
70
71
+ This metadata property can be found in your Stripe Dashboard with the metadata key: `coupon`; which contains the following JSON-encoded property: `code` i.e., the full coupon code used by your customer. This additional metadata is generated for new customers only. It will not be backfilled for any past transactions. Filled only for transactions that use a coupon code.
72
- (s2Member Pro) **Stripe Invoice:** This release corrects a bug in s2Member's Stripe integration whereby `subscr-signup-as-subscr-payment` was not always being forced into the core gateway processor; resulting in a miscalculation of the `last_payment_time` under certain scenarios. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/396) if you'd like additional details.
73
74
= v141007 =
75
76
- (s2Member Pro) **ClickBank IPN v6:** This release enables a new integration option for site owners integrated with ClickBank. You may now choose to integrate with v6 of ClickBank's IPN service, since all previous versions are slowly being phased out by ClickBank. Please see: `Dashboard ⥱ s2Member ⥱ ClickBank Options ⥱ IPN Integration` for v6 config. options. See also [this GitHub issue](https://github.com/websharks/s2member/issues/256) if you'd like further details regarding this topic. See also: [this article @ ClickBank](https://support.clickbank.com/entries/22803622-instant-notification-service).
77
+ - (s2Member/s2Member Pro) **AWeber API Integration:** This release of s2Member adds a new option for site owners using AWeber. It is now possible to integrate with the new [s2Member App](http://www.s2member.com/r/aweber-api-key) for AWeber; i.e., via the AWeber API instead of via email-based communication. For further details, please see: `Dashboard ⥱ s2Member ⥱ API / List Servers ⥱ AWeber Integration`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/303) if you'd like additional details.
78
- (s2Member/s2Member Pro) **Bug Fix:** The EOT Behavior option for `refunds,partial_refunds,reversals` was not being accepted by s2Member. Fixed in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/345) if you'd like further details.
79
+ - (s2Member/s2Member Pro) **MailChimp API Wrapper:** This release of s2Member comes with an updated API wrapper class for MailChimp integration. No change in functionality, just a smoother, slightly faster, and more bug-free interaction with the MailChimp API. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/303) if you'd like further details regarding this improvement. See also: [the official MailChimp API class](https://bitbucket.org/mailchimp/mailchimp-api-php); i.e., what s2Member has been updated to in this release.
80
+ - (s2Member/s2Member Pro) **URI Restrictions caSe-insensitive (Security Fix)** This release of s2Member changes the way URI Restrictions work. All URI Restrictions are now caSe-insensitive (i.e., `/some-path/` is now the same as `/some-Path/`), allowing s2Member to automatically pick up different variations used in attempts to exploit the behavior of certain slugs within the WordPress core. You can also change this new default behavior, if you prefer. Please see: `Dashboard ⥱ s2Member ⥱ Restriction Options ⥱ URI Restrictions`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/354) for the details about why this was changed in the most recent copy of s2Member.
81
- (s2Member/s2Member) **AWeber Role-Based Emails:** In this release we're adding a note in the s2Member UI regarding role-based email addresses being rejected by AWeber. AWeber does not allow role-based emails like: `admin@` or `webmaster@` to be subscribed. It is suggested that you enable s2Member's config. option: "Force Personal Emails" if you intend to integrate with AWeber. Please see: `Dashboard ⥱ s2Member ⥱ General Options ⥱ Registration/Profile Fields`; where you can tell s2Member for force personal email addresses when someone registers on-site. This will prevent a potential subscriber from entering something like `admin@example.com` as their email address.
82
83
= v140921 =
84
85
+ - (s2Member/s2Member Pro) **WP v4 over SSL Compat.** A compatibility issue with the `home_url()` function in the latest release of WordPress has been resolved with this release. Some site owners reported that their s2Member menu pages were appearing without any CSS/JavaScript being loaded; i.e., the graphical UI was not appearing as one would expect under certain scenarios.
86
- (s2Member/s2Member Pro) **WP v4 Compat.** This release brings s2Member up-to-date with the latest changes to the `like_escape()` function in WP v4.0. The `like_escape()` function is now deprecated in favor of `wpdb::esc_like()`. s2Member has been updated in this release, but also remains compatible with previous versions of WordPress. See [this GitHub issue](https://github.com/websharks/s2member/issues/329) if you'd like further details.
87
- (s2Member Pro) **[s2MOP /] Shortcode Enhancment** The `[s2MOP /]` shortcode allows for a new `required_value=""` attribute. Please see [this KB article](http://www.s2member.com/kb/s2mop-shortcode/) for details about the `[s2MOP /]` shortcode. See also: [this GitHub issue](https://github.com/websharks/s2member-pro/issues/51) if you'd like further details.
88
89
= v140909 =
90
91
- (s2Member/s2Member Pro) **Compatibility:** Several instances of `site_url()` (a WordPress core function) have been converted to `home_url()` instead. This provides better compatibility with WordPress installations running from a sub-directory. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/293) if you'd like further details.
92
+ - (s2Member Pro) **Bug Fix:** Ampersands; i.e., `&` symbols in a ClickBank button `desc=""` attribute are now converted to the word `and` automatically. The symbol itself causes issues in ClickBank's IPN processing. Fixed in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/253) if you'd like further details.
93
- (s2Member) **Bug Fix:** Improving compatibility with Mozilla/Firefox for the default `wp-login.php?action=register` handler. This release corrects an issue where `<select>` fields contained text with too large a font-size for Mozilla browsers to deal with. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/244) if you'd like further details.
94
- (s2Member) **WP v4.0 / bbPress Compat.** A conflict between WordPress v4.0, bbPress v2.5.4 and the previous release of s2Member has been resolved. A symptom of this issue was to see the leading topic post missing from your bbPress forum threads.
95
98
However, please note that some other 3rd-party plugins may still conflict in this way; when running the latest version of bbPress under WordPress v4.0. We are working to notify bbPress and other plugin authors about this issue; just to help others avoid the problem. While unconfirmed, some site owners reported that the Relevanssi search plugin may have some trouble with this also.
99
For further details, please see <http://bbpress.org/?p=151839>. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/321) if you'd like all of the details regarding this workaround in the s2Member software.
100
- (s2Member) **WP v4.0 Compat.** Updating s2Member's use of the now-deprecated `get_all_category_ids()`. Using `get_terms()` instead. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/322) if you'd like further details.
101
+ - (s2Member Pro) **Stripe Bug Fix:** This release corrects an issue with Stripe Pro-Forms and a `$0` trial period. A symptom of this bug was to find a customer's Stripe token value missing from their Customer object in the Stripe Dashboard. This issue impacted Pro-Forms whenever a 100% free trial was offered (i.e., with a `$0` sale amount). Resolved by this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/326) if you'd like the details.
102
103
= v140816 =
104
113
114
See also: [this GitHub issue](https://github.com/websharks/s2member/issues/179) if you'd like more info.
115
* (s2Member Pro) **Authorize.Net** This release introduces a new configurable EOT Behavior option for site owners integrated with Authorize.Net. It is now possible to configure a Max Failed Payments threshold; after which s2Member will automatically trigger an EOT (End Of Term). See: `Dashboard ⥱ s2Member ⥱ Authorize.Net Options ⥱ EOT Behavior`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/141) if you'd like more info.
116
+ * (s2Member/s2Member Pro) **Enhancement** A new Replacement Code (`%%current_user_nicename%%`) has been introduced by s2Member to improve compatibility with plugins like BuddyPress and bbPress. If you are currently using a Special Login Redirection URL as your s2Member Login Welcome Page, and you've used `%%current_user_login%%` (i.e., the old way), we suggest that you update your Special Redirection URL to use `%%current_user_nicename%%`. Please see [Jason's comments here](https://github.com/websharks/s2member/issues/276#issuecomment-51706582) for further details. See also: `Dashboard ⥱ s2Member ⥱ General Options ⥱ Login Welcome Page`. It is this area of your Dashboard where a Special Redirection URL can be configured.
117
* (s2Member Pro) **Pro Login Widget** There are some new Replacement Codes available for the "My Account" page URL, and the "My Profile" page URL whenever you configure the s2Member Pro Login Widget in WordPress. s2Member Pro now supports things like `%%current_user_nicename%%` and `%%current_user_level%%` in these customizable URLs. See: `Dashboard ⥱ Appearance ⥱ Widgets ⥱ s2Member Pro Login Widget` for further details. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/276#issuecomment-51706582) if you'd like more info.
118
+ * (s2Member Pro) **Stripe Bug Fix** Wrapping multiple Stripe Pro-Form Shortcodes together as "Checkout Options" was not working properly in the previous release. The dropdown for Checkout Options was not maintaining the underlying variable needed to keep a Checkout Option selected. Fixed in this release. If you'd like more info, please see [this GitHub issue](https://github.com/websharks/s2member/issues/296).
119
* (s2Member Pro) **Stripe Bug Fix** A few site owners reported issues between s2Member's integration with Stripe and other plugins that also depend on the Stripe SDK for PHP. Fixed in this release. If you'd like more info, please see [this GitHub issue](https://github.com/websharks/s2member/issues/295).
120
+ * (s2Member Pro) **Pro Cancellation Forms** This release introduces a new Shortcode Attribute that can be used with Pro Cancellation Forms. The new Shortcode Attribute is `unsub=""`. Setting this to a value of `unsub="1"` will enable an automatic unsubscribe upon cancellation. To clarify, this is related to any List Servers (e.g., MailChimp, AWeber, GetResponse) that you integrate with s2Member. If `unsub="1"` when a customer cancels future billing they will also be removed from the mailing list they are currently subscribed to, according to your List Server configuration in s2Member. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/238) if you'd like more info.
121
+ * (s2Member/s2Member Pro) **Child Theme Compabitility** Portions of s2Member (e.g., Return-Page templates, s2Stream templates, Pro-Form templates, IP Restriction templates, and more) allow advanced site owners to use custom templates of their own. In the past these templates *had* to be created inside the parent theme directory or inside of your `/wp-content/` directory. Starting with this release, s2Member will also look for custom templates inside of your current Child Theme directory too (i.e., `get_stylesheet_dir()`). Please see [this GitHub issue](https://github.com/websharks/s2member/issues/271) if you'd like more info.
122
* (s2Member/s2Member Pro) **S3/CloudFront Compatibility** The latest release of s2Member has been made compatible with the latest changes at Amazon S3/CloudFront [regarding IAM users](http://aws.amazon.com/blogs/aws/updated-iam-console/). If you've been running s2Member together with Amazon S3/CloudFront there are no changes necessary in s2Member configuration. If you are just integrating s2Member with Amazon S3/CloudFront you are advised to setup an IAM user instead of using your AWS Root Keys. s2Member will continue to work with either Root Keys or with IAM user keys. Either are fine. If you'd like more info, please see [this GitHub issue](https://github.com/websharks/s2member/issues/297).
123
* (s2Member/s2Member Pro) **MySQLi Compatiblity** This release brings s2Member into full compatibility with the MySQLi extension. In the previous release it was reported that one specific routine in s2Member that checks the total number of users in your WordPress database was incompatible with MySQLi. Resolved in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/274) if you'd like more info.
124
* (s2Member/s2Member Pro) **Amazon CloudFront** s2Member now makes a new button [Reset CloudFront Configuration] available inside of your WP Dashboard under: `s2Member ⥱ Download Options ⥱ Amazon CloudFront`. This button allows a site owner (if necessary) to do a quick reset of s2Member's current integration with Amazon CloudFront Distributions. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/270) if you'd like more info.
125
* (s2Member/s2Member Pro) **Bug Fix** This release corrects a bug in s2Member's log of a user's WordPress Capability access times. This bug had no serious impact on previous releases of s2Member. However, it was a bug that needed fixing nonetheless. Resolved in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/237) if you'd like more info.
126
+ * (s2Member/s2Member Pro) **Responsive Compatibility** This release of s2Member makes the `/wp-login.php` file (the WordPress Login/Registration system) Responsive; i.e., more compatible with mobile devices and tablets. This only impacts site owners that use s2Member's Login/Registration Design options to improve and customize the appearance of this core WordPress component. No changes necessary to existing installations for this to kick-in. It's automatic (assuming you are using this s2Member feature). Please see [this GitHub issue](https://github.com/websharks/s2member/issues/211) if you'd like more info.
127
* (s2Member Pro) **Remote Operations API** This release of s2Member makes it possible to change the API Key assigned to your WordPress installation. The Pro Remote Operations API is one way for developers to integrate with some of s2Member's functionality. See: `Dashboard ⥱ s2Member ⥱ API / Scripting ⥱ Remote Operations API`. This is where it's possible to change your API Key if you'd like to. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/206) if you'd like more info.
128
+ * (s2Member/s2Member Pro) **Enhancement** s2Member's Auto-Return system (i.e., default Thank-You page handler) which integrates with: PayPal Standard Buttons, ClickBank, and Google Wallet; has been updated in this release. If a customer happens to find their way back to a self-expiring Auto-Return URL (a rare occurrence); instead of an unfriendly error message about duplicate return data, s2Member now provides a more friendly note that asks the customer to check their email for the details needed to access what they paid for. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/205) if you'd like more info.
129
* (s2Member/s2Member Pro) **Enhancement** s2Member's Security Encryption Key configuration panel in the Dashboard was updated to include additional details related to the use of your Security Encryption Key. This additional information explains s2Member's use of this key in greater detail. See: `Dashboard ⥱ s2Member ⥱ General Options ⥱ Security Encryption Key`. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/182) if you'e like more info.
130
+ * (s2Member Pro) **One-Time-Offers Upon Login** This release resolves a conflict between s2Member's Pro Login Widget and One-Time-Offers (Upon Login)—a feature that can be configured with s2Member Pro. One-Time-Offers (Upon Login) now take precedence over certain automatic login redirections that can occur through the Pro Login Widget, removing the chance of a conflict. If a visitor logs into their account with a default login redirection URL (i.e., a redirection URL formulated dynamically by the Pro Login Widget that is not related to a visitor's request to access a specific page of the site), and a One-Time-Offer is triggered at the same time, the One-Time-Offer will take precendence. The visitor will see the One-Time-Offer instead of being redirected to the default location specified by the Pro Login Widget. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/119) if you'd like more info.
131
132
= v140725 =
133
134
+ * (s2Member Pro) **NEW: Stripe Pro-Forms (Beta)** Holy hula hoop! s2Member now has a deep integration with Stripe for on-site credit card processing that uses a Stripe overlay. Stripe is an almost-free service that is super easy to setup and work with. We think you'll find that Stripe is quickly becoming the MOST popular of all payment gateways in the industry. A few bugs have [already been zapped](https://github.com/websharks/s2member/issues?milestone=5&page=1&state=closed) prior to this release after some initial beta testing was completed over the last few weeks. Everything is looking great so far, but please do [report any new issues via GitHub](https://github.com/websharks/s2member/issues?page=1&state=open).
135
136
**If you are an s2Member Pro site owner** you can upgrade to the latest version of s2Member Pro at anytime you like; then enable Stripe as an additional payment gateway option. See: `Dashboard ⥱ s2Member Pro ⥱ Other Gateways`.
137
141
* (s2Member Pro) **ClickBank Bug Fix** Nillable fields causing some issues (only under one specific scenario) after a recent change in the ClickBank API. Fixed in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/250) if you would like further detais.
142
* (s2Member Pro) **Compatibility** Resolved a minor single-quote issue in the Visual Editor. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/228) if you'd like further details.
143
* (s2Member/s2Member Pro) **Bug Fix** Non-HTML whitespace being trimmed inside the `[s2If /]` shortcode. Resolved in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/224) if you'd like further details.
144
+ * (s2Member Pro) **Pro-Forms Bug Fix** Related to List Server processing during an upgrade. This bug impacted all payment gateways integrated with s2Member's Pro-Forms; including PayPal, Authorize.Net and now Stripe. Resolved in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/216) if you'd like further details.
145
* (s2Member Pro) **Bug Fix** An `array_intersect()` error in the `[s2MOP /]` shortcode under the right conditions. Fixed in this release. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/204) if you'd like further details.
146
+ * (s2Member Pro) **Enhancement** Free Registration Pro-Forms can now be included in a list of nested Checkout Option drop-downs. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/197) if you'd like further details. See also: `Dashboard ⥱ s2Member ⥱ [Your Payment Gateway] Pro-Forms ⥱ Checkout Options`; where there is more information about how to use Checkout Options with s2Member Pro-Forms.
147
* (s2Member/s2Member Pro) **Bug Fix / List Servers** This release corrects a bug that may cause members to be unsubscribed from a List Server if they forget to check the box again while editing their profile. In the previous release we introduced a feature that allows the checkbox to be pre-checked if the user already chose to subscribe once before. However, the internal tracking for this was not as reliable as it could be. There is still more work to be done on this front, but the immediate issue has now been resolved. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/196) if you'd like further details.
148
* (s2Member/s2Member Pro) **WP_DEBUG Compat.** Some older portions of s2Member's codebase were cleaned up and reformatted in this update. This is an ongoing process to bring s2Member into full compatibility with `WP_DEBUG` mode in WordPress. This is intended to help other developers in the WP community. Much progress has been made on this front now, but still some more work to do. We will continue to update s2Member's codebase little-by-little with each release.
149
* (s2Member/s2Member Pro) **Uninstall vs. Deactivation** s2Member has always made a strong effort to cleanup after itself should you decide (for whatever reason) to uninstall it. However, we are also very concerned with preserving any data associated with such a powerful plugin that comes with so many options. Nobody wants accidental data loss, right!?
150
151
152
+ In the past, s2Member came with a feature called "Deactivation Safeguards". These (if disabled) attached themselves to a plugin "deactivation" hook within WordPress and they would uninstall s2Member when you deactivated the plugin. Starting with this release ,s2Member's Deactivation routines have been changed. We now attach them to the WordPress "uninstall" hook—which is triggered only on plugin deletion.
153
154
In this way, deactivating s2Member will never result in a loss of any data. Instead of "Deactivation Safeguards", s2Member now calls this feature "Plugin Deletion Safeguards". In short, to tell s2Member to uninstall itself (including any data/options associated with s2Member), you can simply disable s2Member's Plugin Deletion Safeguards under: `s2Member ⥱ General Options`, and then deactivate _and delete_ the s2Member plugin entirely. Whenever you delete the plugin this automatically and silently triggers s2Member's uninstaller which cleans up after itself nicely :-)
155
156
= v140630 =
157
158
+ - (s2Member Pro) **Stripe Payment Gateway** Hooray! s2Member Pro now integrates with [Stripe](http://www.s2member.com/r/stripe). s2Member Pro-Forms, Coupon Codes, Tax Settings, Checkout Options, and all of the other great features provided by s2Member Pro are now compatible with Stripe. To enable Stripe in your installation of s2Member, please see: `Dashboard ⥱ s2Member ⥱ Other Gateways ⥱ Stripe`.
159
160
We expect Stripe to become the most popular payment gateway integration for s2Member Pro over the next few months. Stripe is nearly free; it's easier to setup, easier to maintain; and just more flexible overall in our opinion.
161
164
165
= v140614 =
166
167
+ * (s2Member/s2Member Pro) **Quick Cache Compat.** This release makes it possible for Quick Cache to cache content protected by s2Member. If, and only if, you have [Quick Cache Pro](http://www.websharks-inc.com/product/quick-cache/) configured to enable user-specific caching; i.e., to cache when users are logged into the site. See [this GitHub issue](https://github.com/websharks/s2member/issues/172) if you'd like further details.
168
* (s2Member Pro) **ClickBank API Compat.** This release brings s2Member's ClickBank integration into full compatibility with a recent change in the ClickBank API. Under the right conditions, a symptom of this bug was to see an error regarding an unexpected `txnType` upon returning from checkout via ClickBank. Resolved in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/199) if you'd like further details.
169
170
= v140603 =
171
172
+ * (s2Member/s2Member Pro) **Profile Sync to List Servers** If you have a supported List Server integrated with s2Member (e.g., MailChimp, GetResponse, AWeber), the opt-in checkbox will now also be displayed in user profile editing panels (i.e., by the `[s2Member-Profile /]` shortcode, or if you integrate s2Member with BuddyPress profiles).
173
174
+ If a user updates their profile, their profile on the List Server is updated too (i.e., s2Member updates their first name, last name, along with any merge vars or customs you've integrated through s2Member hooks/filters). If a user changes their email address, they will be subscribed with the new email address. Leaving the box unchecked during a profile update will effectively unsubscribe the user from the lists you have configured at their current Membership Level.
175
176
+ *s2Member's AWeber integration does not yet support profile updates (i.e., changes in first/last name or other details); it only supports the ability to either subscribe or unsubscribe; and/or changes in email address.*
177
178
See [this GitHub issue](https://github.com/websharks/s2member/issues/146) if you'd like further details.
179
* (s2Member/s2Member Pro) **BuddyPress Compatibility** This release makes s2Member and s2Member Pro compatible with the latest release of BuddyPress. BuddyPress v2.01 broke some of s2Member's previous integration. Fixed in this release. See [this GitHub issue](https://github.com/websharks/s2member/issues/162) if you'd like further details.
180
* (s2Member/s2Member Pro) **Multisite Lost Password URL** In a multisite environment (given the WordPress default behavior), a lost password URL generated by WordPress will force all users to recover their password from the Main Site in the Network; which is usually NOT desirable. This release of s2Member fixes this odd behavior in the WordPress core by allowing users to recover their password in the UI for the current Child Blog they are accessing. See [this GitHub issue](https://github.com/websharks/s2member/issues/138) if you'd like further details and ways to enable/disable; or even customize this further.
181
+ * (s2Member/s2Member Pro) **Default EOT Behavior** By popular demand, this release changes s2Member's default EOT (End Of Term) Behavior option with respect to refunds/chargebacks. The new default behavior (assuming you have not yet configured s2Member) is to force an EOT on chargebacks only; not on a refund of any kind. A refund is just a refund (in many cases) and an EOT (if one should occur) is something that a site owner generally should decide on their own; i.e., to review refunds manually and if an EOT should occur, the site owner will mostly like prefer to terminate a user's account access on their own; and on a case-by-case basis.
182
183
**Further clarification...** EOT (End Of Term) is meant to occur when a subscription ends, and since a refund doesn't necessarily end a subscription, it's not the default anymore to trigger an automatic EOT on a refund event. Site owners that want an EOT on refunds still have that option available to them however. See `Dashboard ⥱ s2Member ⥱ [Payment Gateway] Options ⥱ Auto EOT Behavior ⥱ Chargebacks/Refunds`.
184
195
196
* (s2Member Pro) **`[s2Member-List /]` Shortcode** Amazing new feature! It is now possible to list members using a powerful shortcode, and even make it possible for members to view and search for each other. See [this KB article](http://www.s2member.com/?p=62860) for all the details on this feature. Very cool!
197
* (s2Member/s2Member Pro) **Server-Side Validation** For Registration/Profile Fields that you configure on your own (using the s2Member software), there is now support within all areas of the s2Member codebase for both JavaScript and *now server-side validation too*. In the past, all validations applied to custom fields was via JavaScript only. With server-side validation too, now it is impossible for required and/or invalid fields that you configure to go missing. This also resolves a few issues related to spam bots attempting to bypass JavaScript validation. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/99) if you'd like further details.
198
+ * (s2Member Pro) **Button Processing Animation**. Improving the processing animation used in submit buttons across Pro-Forms. Instead of a script-based solution (rather jumpy), we are now taking advantage of CSS3 for a much smoother animation. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/114) if you'd like further details.
199
* (s2Member Pro) **`[s2Drip /]` Shortcode Enhancement** This release adds support for a new `access=""` shortcode attribute that can parse `and` / `or` logic. Also, it is now possible for `[s2Drip /]` to be used with Custom Capabilities too! See [this KB article](http://www.s2member.com/kb/s2drip-shortcode/) for all the details.
200
* (s2Member/s2Member Pro) **Bug Fix, Custom Fields UI** This release corrects a bug related to the `jquery/.htaccess` file that ships with s2Member. A symptom was to have issues with the Registration/Profile Fields UI and find a JS error in the browser's developer console. Fixed in this release. See also, [this GitHub issue](https://github.com/WebSharks/s2Member/issues/144#issuecomment-43198045) if you'd like further details.
201
* (s2Member Pro) **Bug Fix, Clickbank HTTPS** This release corrects a bug in the default Auto-Return Page for ClickBank, when/if it's served over the `https` protocol. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/145) if you'd like further details.
251
* (s2Member) **Cosmetics**. Updating s2Member's adminitrative menu pages to enhance their appearance in the most recent versions of WordPress. Nothing significant, just minor tweaks.
252
* (s2Member Pro) **PayPal IPNs**. Adding support for `txn_type` values: `merch_pmt`, `mp_signup`, and `mp_cancel` to enhance s2Member's support for Billing Agreements when integrated together with a PayPal Pro (Payflow Edition) account that processes Express Checkout transactions. This also resolves a bug related to cancellation IPN processing in a specific scenario. Fixed in this release.
253
* (s2Member Pro) **[s2If][else]**. Requires s2Member Pro. This release adds support for a new `[else]` condition when using the `[s2If]` shortcode to protect parts of your content. For examples, please see: `Dashboard ⥱ s2Member ⥱ API Scripting ⥱ Simple Shortcode Conditionals`. See also: `Dashboard ⥱ s2Member ⥱ Restriction Options ⥱ Simple Shortcode Conditionals`.
254
+ * (s2Member Pro) **[s2If php=""]**. Requires s2Member Pro. This release adds support for a new `php` Shortcode Attribute; e.g., `[s2If php=""]`. This makes it possible to use arbitrary PHP code in your `[s2If]` shortcodes. For examples, please see: `Dashboard ⥱ s2Member ⥱ API Scripting ⥱ Simple Shortcode Conditionals`. **Note: this feature is disabled by default.** You must enable the `php` attribute for this to work as expected. Please see: `Dashboard ⥱ s2Member ⥱ Restriction Options ⥱ Simple Shortcode Conditionals` (with s2Member Pro installed).
255
* (s2Member) **Bug Fix**. Correcting an issue related to Login Redirections and an E_NOTICE. Please see [this GitHub issue](https://github.com/WebSharks/s2Member/issues/75) if you'd like further details.
256
* (s2Member Pro) **[s2Drip]**. Requires s2Member Pro. This release adds support for a new easy-to-use shortcode that can drip content to paying Members based on their Membership Level. For examples, please see: `Dashboard ⥱ s2Member ⥱ API Scripting ⥱ Content Dripping`.
257
* (s2Member Pro) **ClickBank**. Adding support for the `vtid` parameter in ClickBank Button Shortcodes. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/44) if you'd like further details.
258
+ * (s2Member Pro) **PayPal Express Checkout**. Updating PayPal Express Checkout cancellation links so they will automatically use the PayPal Merchant ID supplied by a site owner (i.e., PayPal's recommended behavior). If you'd like further details please see [this GitHub commit](https://github.com/WebSharks/s2Member-Pro/commit/5efbe35eed352868a956c94e51ab09f8e561892a).
259
+ * (s2Member Pro) **Pro-Forms**. Adding a new filter for developers `s2member_pro_cancels_old_rp_before_new_rp`. This is true by default. If you'd like to prevent s2Member from terminating an existing Recurring Profile (before creating a new one); i.e., during an upgrade... you can set this to a FALSE value. Not recommended, but there are a few edge cases where it could be helpful for developers. See also [this GitHub commit](https://github.com/WebSharks/s2Member-Pro/commit/19a84c81070bb0e1869b5dbd9d0325cc458fd016).
260
* (s2Member Pro) **ClickBank Bug Fix**. Adding support for alphabetics in ClickBank Item Numbers. This bug impacted the ClickBank Button Generator only, it did not prevent alphabetics from being used in a raw Shortcode. Still, this has been resolved now. See also [this GitHub issue](https://github.com/WebSharks/s2Member/issues/46).
261
* (s2Member Pro) **PayPal Mobile Bug Fix**. This release corrects a bug related to the `MAXAMT` PayPal specification that is sent via Express Checkout on a mobile device. A symptom of this bug was to sometimes see PayPal's awkward default amount of `$25` when completing checkout on a mobile device. Fixed in this release.
262
+ * (s2Member Pro) **PayPal Express Checkout**. This release addresses an issue where a customer reaches PayPal.com with an item description that inadequately reads "Future payment" (i.e., missing the description provided by a site owner). PayPal's latest improvements have made it possible for s2Member to get this right. Resolved in this release.
263
* (s2Member/s2Member Pro) **Partial Refunds**. This release adds support for Partial Refunds in the s2Member EOT Behavior Options. See also [this GitHub issue](https://github.com/WebSharks/s2Member/issues/40).
264
265
= v140105 =
266
267
+ * (s2Member/s2Member Pro) **Compatibility**. Updated to support WordPress v3.8. Nothing significant, just minor UI tweaks in the Login/Registration Design for WordPress v3.8; e.g., `wp-login.php` got some minor improvements in this release of s2Member and s2Member Pro.
268
+ * (s2Member) **Compatibility**. PayPal's API for Subscription Cancellation Buttons was changed recently. PayPal now requires a Merchant ID instead of the site owner's email address. This issue has been causing an error when a user attempts to cancel a PayPal Subscription through an s2Member-generated PayPal Subscription Cancellation "Button" (i.e., this affects Buttons only, not Pro-Forms). Fixed in this release. Site owners using PayPal Buttons should update their PayPal Merchant ID for s2Member. Please see: `Dashboard ⥱ s2Member ⥱ PayPal Options ⥱ Account Details`.
269
+ * (s2Member/s2Member Pro) **Compatibility**. Default s2Member option value for CSS/JS Lazy Loading is now off instead of on; e.g., s2Member's CSS/JS JavaScript libraries are now loaded on every page by default. Lazy loading must now be enabled by a site owner as a performance enhancement (optional). For further details, please see: `Dashboard ⥱ s2Member ⥱ General Options ⥱ CSS/JS Lazy Loading`.
270
* (s2Member Pro) **Remote Operations API**. This release introduces two new API methods; `auth_check_user` and `get_user`. These methods (combined with those which already exist in s2Member Pro) now make s2Member Pro's Remote Operations API a pleasure to work with. For further details, please see: `Dashboard ⥱ s2Member Pro ⥱ API Scripting ⥱ Pro Remote Operations API`. Here you will find the API Key for your installation, along with several code samples.
271
* (s2Member/s2Member Pro) **Logging**. s2Member's core payment gateway processors now log to files `gateway-core-ipn.log` and `gateway-core-rtn.log`. These log file names were changed in this release. In previous versions of s2Member these log entries were kept inside `paypal-ipn.log` and `paypal-rtn.log`.
272
* (s2Member/s2Member Pro) **Updates**. The XML/RSS feed box for the most recent s2Member Updates (for site owners only; in the Dashboard); has been updated to our newest feed location at: `http://feeds.feedburner.com/s2member`.
278
* (s2Member/s2Member Pro) **Compatibility**. Adding support for `$_SERVER['HTTP_AUTHORIZATION']` when s2Member is used for Remote Auth file hosting. Some servers do not support `$_SERVER['PHP_AUTH_USER']`. Instead, s2Member can get the username/password by parsing them out of `$_SERVER['HTTP_AUTHORIZATION']` when/if necessary. Fixed in this release.
279
* (s2Member/s2Member Pro) **PHP Debug Notices.** Updating s2Member's source code to further prevent PHP debug notices when running in `WP_DEBUG` mode. This is part of an ongoing effort keep s2Member running smoothly in PHP strict mode; and to maintain conformity with WordPress standards.
280
* (s2Member Pro) **Bug Fix**. Define `abbr_bytes()` method as static to prevent issues during automatic upgrades of s2Member Pro. Please see <https://github.com/WebSharks/s2Member/issues/37> for further details.
281
+ * (s2Member/s2Member Pro) **Backward Compatibility.** Updating calls to `get_post()`. We're adding a `NULL` argument via `$null` to prevent warnings in older releases of WordPress where an argument was required; e.g., `$null = NULL; get_post($null)`.
282
283
= v131126 =
284
285
* (s2Member Pro) **Google Wallet.** s2Member Pro now supports [Google Wallet for Digital Goods](https://developers.google.com/commerce/wallet/digital/).
286
287
+ In the past we offered support for Google "Checkout" (Google "Checkout" is no longer available as of November 2013). s2Member's previous integration with Google Checkout has now been fully updated to support Google "Wallet" for Digital Goods. To enable Google Wallet in your installation of s2Member Pro, please see: `Dashboard s2Member Pro Other Gateways Google Wallet`. For setup instructions, please see: `Dashboard s2Member Pro Google Options`.
288
289
At the time of this writing, there are no KB articles related to Google Wallet at s2Member.com (yet); these will come soon. Until then, you might find it helpful to review dev notes by Jason Caldwell (Lead Developer). Please see: <https://github.com/WebSharks/s2Member/issues/19>.
290
291
+ We also suggest that you review the documentation in your Dashboard under: `s2Member Pro Google Options` and `s2Member Pro Google Buttons`. If you were previously using Google "Checkout", please review [this notice posted by Google](https://support.google.com/checkout/sell/answer/3080449?hl=en).
292
+ * (s2Member/s2Member Pro) **Bootstrap Compatibility.** s2Member has been updated throughout to support the [Twitter Bootstrap](http://getbootstrap.com/) CSS framework when running on a WordPress theme that's been built on Bootstrap. For instance; profile editing forms, custom registration/profile fields, s2Member Pro-Forms for checkout/registration; these will now look good on sites powered by Bootstrap. This change has no impact on functionality, only on appearance; and only IF your site is powered by Bootstrap. Throughout s2Member's HTML code we've added CSS class names that follow a Bootstrap standard. These Bootstrap classes are blended together with default structural styles that makes s2Member compatible with all WordPress themes. This way s2Member (and s2Member Pro) can produce a clean/professional appearance on just about any WordPress theme; and now Bootstrap is supported too!
293
+ * (s2Member Pro) **Configurable Emails.** We've added new configuration panels into the s2Member UI for a Modification Confirmation Email and also for the Custom Capability Confirmation Email. These are now configurable for all payment gateways integrated with s2Member Pro; e.g., AliPay, ccBill, ClickBank, Google Wallet, Authorize.Net, PayPal Standard, and PayPal Pro. These emails have always existed, but up until now customization required a WordPress filter. Now it's easier, you can customize these from the Dashboard! Please note: this feature comes only with s2Member Pro. As one example, please check your Dashboard under: `s2Member Pro PayPal Options Modification Confirmation Email`.
294
* (s2Member/s2Member Pro) **Snippets/Redirects.** Snippets and Redirects no longer carry the s2Member Restriction Options meta box in the Post/Page editing station; there's no need for Restrictions against these two special Post Types. This change, together with the latest improvements in these two plugins: [WP Snippets](http://wordpress.org/plugins/wp-snippets/) and [WP Redirects](http://wordpress.org/plugins/wp-redirects/) (also produced by our team) offer a more powerful solution now that all of these plugins are more compatible with each other.
295
+ * (s2Member/s2Member Pro) **Backward Compatibility.** Updating calls to `get_post()`. We're adding a `NULL` argument to prevent warnings in older releases of WordPress where an argument was required; e.g., `get_post(NULL)`.
296
+ * (s2Member/s2Member Pro) **Forward Compatibility.** Adding support for the `relative` scheme in SSL filters that deal with `set_url_scheme()` in the latest versions of WordPress. This improves s2Member's "force SSL mode" where a site owner sets the Custom Field for a Post/Page; e.g., `s2member_force_ssl` is set to `yes`. This change will better support themes/plugins that use absolute relative paths together with WordPress core functions like `site_url()` and `home_url()`.
297
* (s2Member/s2Member Pro) **PHP Debug Notices.** Updating s2Member's source code to further prevent PHP debug notices when running in `WP_DEBUG` mode. This is part of an ongoing effort keep s2Member running smoothly in PHP strict mode; and to maintain conformity with WordPress standards.
298
+ * (s2Member Pro) **Unlimited Membership Levels.** Updating the built-in software documentation for s2Member Pro to cover an edge case where a site owner many choose to exceed the recommended maximum for Membership Levels when running s2Member Pro. If you intend to use more than `100` Membership Levels (this is not recommended); but if you do, please see: `Dashboard s2Member Pro General Options Membership Levels/Labels` for the latest details on this.
299
* (s2Member/s2Member Pro) **Dropping IE8 Support.** s2Member and s2Member Pro will no longer support IE8 in any official capacity. s2Member's HTML output and CSS files have been cleaned up; and all hacks related to IE8 have been removed. Out with the old, in with the new! We need to keep s2Member up-to-date with the latest improvements offered by IE9 and other modern browsers. While s2Member may continue to function relatively well in IE8, hacks used in the past to accomodate edge cases in this buggy browser have been removed in favor of standards compliance.
300
+ * (s2Member/s2Member Pro) **Lazy Loading CSS/JS.** s2Member now offers site owners the option to enable/disable lazy loading of CSS/JS libraries provided by the s2Member software. For further details, please see: `Dashboard s2Member General Options CSS/JS Lazy Loading`.
301
+ * (s2Member/s2Member Pro) **Bug Fix.** s2Member and s2Member Pro have both been updated to prevent spaces in a comma-delimited list of Custom Capabilities; e.g., `ccaps="music, videos"` should be `ccaps="music,videos"` please. Spaces in this list have never been allowed, but now there is better server-side validation to prevent this from happening; reducing the chance of error when a site owner configures a Button or Pro-Form shortcode with s2Member.
302
* (s2Member/s2Member Pro) **Other Minor Bug Fixes.** Please see: <https://github.com/WebSharks/s2Member/commits/000000-dev>
303
304
= v131109 =
309
* (s2Member/s2Member Pro) **Improvement (Speed)** Lazy load s2Member's CSS file at all times. Done, this release will speed your site up for first-time visitors.
310
* (s2Member/s2Member Pro) **Improvement (Speed)** Load s2Member's JS library in the footer if at all possible (instead of the `<head>`). Done, this will improve the speed of your site for first-time visitors.
311
* (s2Member/s2Member Pro) **Debug Notices** Resolved all of the most obvious PHP notices when running s2Member in debug mode. This improvement impacts developers only.
312
+ * (s2Member/s2Member Pro) **Password Strength Meter** Removed dependence on `password-strength-meter` (a JavaScript library) from the WordPress core. This was causing some SSL issues for site owners. In the past it was necessary for s2Member to load an additional JS resource for registration/checkout and Pro-Forms (`password-strength-meter`). Starting with this release, s2Member handles password strength meters all by itself, thereby avoiding the additional overhead; and also the issues associated with this core functionality over SSL pages. Fixed in this release.
313
* (s2Member/s2Member Pro) **Mobile Devices** The s2Stream shortcode (for protected audio/video files) was updated to better support mobile device playback. See also: <http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#s2stream-mobile-devices>.
314
+ * (s2Member Pro) **Checkout Options** Improving support for multiple Checkout Options. When a customer changes to a new Checkout Option by selecting an option from the drop-down menu in a Pro-Form; this action will now result in a hash jump back to the location of the Pro-Form on any given page; instead of to the top of the page, which could potentially result in a confusing experience on some sites (depending on the implementation). Aside: for developers, it's helpful to know that all s2Member Pro-Forms now have a hashable ID `#s2p-form` that is cleaner than the longer (product-specific) IDs associated with Pro-Forms; e.g., `s2member-pro-paypal-form...`, etc. If you need to hash a Pro-Form, please use the more general `#s2p-form` on the end of a URL. This will take a customer directly to that Pro-Form in the context of any given page.
315
316
= v131026 =
317
321
= v131025 =
322
323
* (s2Member) **WordPress v3.7 Compatibility** s2Member updated to support WordPress v3.7. s2Member remains compatible with WP v3.3 (or higher).
324
+ * (s2Member Pro) **New Feature: Simultaneous Login Monitoring** Available only w/ s2Member Pro. s2Member Pro has been updated to support configurations that limit the number of simultaneous logins a single username can receive. For further details, please see: `Dashboard s2Member Restriction Options Simultaneous Login Restrictions` (when s2Member Pro is installed).
325
* (s2Member) **Post Restrictions (#3)** Adding support for `all-[post type]` in addition to the existing `all-[post type]s` (plural) currently supported by s2Member's Restriction Options for Posts. This makes it possible for a site owner to type only the Post Type after the keyword prefix `all-`; and excluding the plural `s` in cases when this is necessary.
326
* (s2Member) **Documentation Update (#3)** Adding note in Download Options panel regarding `raw` shortcode tags around Shortcodes when using the inFocus theme. See also [this thread](http://mysitemyway.com/support/topic/infocus-adding-tags-into-plugin-content) for further details.
327
* (s2Member) **Documentation Cleanup (#12)** General cleanup in several s2Member panels to improve inline documentation that comes w/ the software. Branding improvements, padding adjustments, and subtle textual changes.
330
* (s2Member) **Quick Start Video (#10)** Adding Quick Start playlist to Quick Start section.
331
* (s2Member) **UI (#6)** Reducing padding around section headers in s2Member option panels to reduce the amount of space these consume.
332
* (s2Member Pro) **SSL** Forcing all automatic updates of s2Member Pro to occur over SSL for improved security.
333
+ * (s2Member) **Login Welcome Page** Improving support for new feature (force HTTP redirection). See: `s2Member General Options Login Welcome Page` for details on how this feature works.
334
* (s2Member) **Bug Fix: Registration/Profile Fields** Adding space between checkboxes and their labels.
335
* (s2Member) **ClickBank IPN Filter** Adding a new filter to s2Member's ClickBank IPN handler for developers integrating s2Member in creative ways: `c_ws_plugin__s2member_pro_clickbank_notify_handles_completions`. Defaults to a TRUE value. Forcing this filter to a FALSE value will prevent s2Member from handling term completions via IPN communication; in cases where it's preferred that a site owner deal with this specific scenario manually.
336
* (s2Member) **Conformity** Updating calls to `$wpdb->escape` changing to `esc_sql` to conform w/ WordPress standards.
337
+ * (s2Member Pro) **Compatibility: Checkout Options** Improving theme support for Checkout Options created using Pro-Forms by wrapping other Pro-Form Shortcodes. Some site owners reported line break injections in the previous verison. Fixed in this release.
338
* (s2Member) **See also: s2Member Repo** https://github.com/WebSharks/s2Member/commits/000000-dev
339
340
= v130816 =
342
* (s2Member Pro) **Compatibility, ClickBank (#467)** Improving support for ClickBank PitchPlus Upsell Flows. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-buttons-not-working/#post-55725) for further details.
343
* (s2Member/s2Member Pro) **User Search on Multisite Networks (#468)** User search functionality was partially broken for Child Blogs in a Multisite Network after some improvements were implemented in s2Member® v130731. The issue has now been corrected in this release for Multisite Networks. For further details, please see [this thread](http://www.s2member.com/forums/topic/user-search-no-longer-working/#post-55778).
344
* (s2Member/s2Member Pro) **Z-Index in Menu Pages (#461)** Stacking order against a WordPress® installation running a Dashboard with a collapsed sidebar menu (left side) was causing some UI problems. Fixed in this release.
345
+ * (s2Member/s2Member Pro) **SSL Compatibility (#437)** Adding a new option in the `s2Member® General Options Login Welcome Page` section. The default value for this new option is always `yes`. However, the default functionality can be turned off (if you prefer). This new option allows site owners to better integrate with a core WordPress® feature commonly referred to as `FORCE_SSL_LOGIN` and/or `FORCE_SSL_ADMIN`. This new feature can be used, or not. It is intended mainly for site owners running w/ `FORCE_SSL_LOGIN` and/or `FORCE_SSL_ADMIN`.
346
+ * (s2Member/s2Member Pro) **Login/Registration Design Option (#437)** Adding a new option in the `s2Member® General Options Login/Registration Design` section. This new option (found at the bottom of `s2Member® General Options Login/Registration Design`) allows a site owner to show/hide the `Back To Home Page` link at the bottom of the default WordPress® Login/Registration system. This can be useful for site owners running w/ `FORCE_SSL_LOGIN` and/or `FORCE_SSL_ADMIN`; where they would prefer NOT to link customers back to the main site under a default HTTPS link; but rather, create their own link and gain better control over this area of their site.
347
+ * (s2Member/s2Member Pro) **Videos (#467)** Updating internal documentation found in `Dashboard s2Member® Quick-Start`. Specifically, the video player here was integrated with an older version of the YouTube® API and was not working properly. Fixed in this release.
348
349
= v130802 =
350
351
+ * (s2Member Pro) **Compatibility, WordPress® v3.6** Updating s2Member® Pro-Form templates and their underlying CSS. This update improves their appearance against the Twenty Thirteen theme that comes with WordPress® v3.6. Specifically, some of the Pro-Form buttons were a little out of place in this new default theme. Fixed in this release.
352
+ * (s2Member Pro) **Compatibility, Checkout Options (#443)** Revision 3. Updating this feature to support a wider variety of WordPress® configurations and content filters. This update also resolves an empty `desc=""` attribute error reported by some site owners. Feature description... It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro-Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® PayPal® Pro-Forms Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro-Forms, and ALSO for Authorize.Net Pro-Forms.
353
354
= v130801 =
355
356
+ * (s2Member Pro) **New Feature; Checkout Options (#403)** Revision 2. Updating documentation on this new feature to prevent conufusion for site owners. s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro-Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® PayPal® Pro-Forms Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro-Forms, and ALSO for Authorize.Net Pro-Forms.
357
358
= v130731 =
359
360
+ * (s2Member Pro) **New Feature; Checkout Options (#403)** s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro-Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® PayPal® Pro-Forms Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro-Forms, and ALSO for Authorize.Net Pro-Forms.
361
+ * (s2Member Pro) **Free Checkout (#403)** It is now possible to offer a 100% free checkout experience using any of s2Member's Pro-Form Shortcodes. In previous releases of s2Member® it was not possible to set the `ra=""` Attribute to a zero dollar amount. Now it is! This works for PayPal® Pro-Forms, and also for Authorize.Net Pro-Forms.
362
+ * (s2Member Pro) **100% Off Coupons (#403)** It is now possible to offer a 100% off coupon. This works for PayPal® Pro-Forms, and also for Authorize.Net Pro-Forms. See: `s2Member® Pro Coupon Codes` for details and examples.
363
+ * (s2Member Pro) **Expiration Date Dropdowns (#428)** This release improves all s2Member® Pro-Form templates by adding dropdown menus for the customer's credit card expiration month/year instead of the simple text input field used in previous releases.
364
+ * (s2Member/s2Member Pro) **MySQL Wait Timeout (#349)** s2Member now automatically increases the MySQL `wait_timeout` to `300` seconds during s2Member processing routines. Reason for increase: should any 3rd party service API result in unexpected connection timeouts (such as PayPal, Authorize.Net, Amazon, MailChimp, AWeber, etc); this may cause a delay that could potentially exceed the default `wait_timeout` of `30` seconds on the MySQL resource handle that is global to all of WordPress. Increasing `wait_timeout` before transaction processing will decrease the chance of failure after a timeout is exceeded. Among other things, this resolves an elusive bug where there are mysterious 404 errors after checkout under the right scenario (e.g., when an unexpected timeout occurs). This may also resolve problems associated w/ some mysterious reports where emails were not sent during s2Member's attempt to complete post-processing of a transaction (and/or where other portions of post-processing failed under rare circumstances).
365
+ * (s2Member/s2Member Pro) **Alternative Views (#300)** This release gives s2Member® the ability to hide protected content in widgets that list protected WordPress® Pages. This is a new Alternative View in the Dashboard. See: `s2Member® Restriction Options Alternative Views` for further details please.
366
+ * (s2Member/s2Member Pro) **Documentation Update (#350)** Subtle improvements to the built-in documentation pertaining to s2Member's Automatic List Transitioning feature in the Dashboard. See: `s2Member® API/List Servers Automatic Unsubscribes` for further details please.
367
* (s2Member/s2Member Pro) **Bug Fix (#387)** In s2Member® Only mode, a recursive scan for the WordPress® `/wp-load.php` file was failing somtimes when/if a custom directory was configured for plugins. Fixed in this release. See [this thread](http://www.s2member.com/forums/topic/problem-with-wordpress-folder-search-code/) for further details.
368
* (s2Member/s2Member Pro) **Bug Fix (#418)** Fixed incorrect pagination of user search results in the Dashboard.
369
* (s2Member/s2Member Pro) **Bug Fix (#418)** Fixed slow query against user searches in the Dashboard.
371
372
= v130617 =
373
374
+ * (s2Member/s2Member Pro) **IP Restrictions (#148)** It is now possible to introduce a custom template file that controls the error message displayed when/if a user breaches security by exceeding your maximum unique IP addresses; as configured under `s2Member Restriction Options Unique IP Restrictions`. If you would like to use a custom template for this message, please copy the default template file from `/s2member/includes/templates/errors/ip-restrictions.php` and place this file into your active WordPress® theme directory (or into the `/wp-content/` directory if you prefer). s2Member will automatically find your custom template in one of these locations; and s2Member will use your custom template instead of the built-in default.
375
+ * (s2Member Pro) **Bug Fix (#302)** Updating Authorize.Net Pro-Form Generator to support max days of `365` instead of `7`.
376
* (s2Member Pro) **Amazon S3 Secret Access Keys (#321)** Updating UI configuration panel to better explain what a Secret Access Key is; and adding a note about Secret Access Keys for Amazon S3 integration. Amazon® is deprecating Secret Access Keys, but they ARE still required for digitally signed URLs. This update changes nothing in s2Member's functionality. It simply adds some additional detail to a configuration field that will assist site owners integrating s2Member w/ Amazon S3 for the first time.
377
* (s2Member/s2Member Pro) **Translations (#317)** Updating `/s2member/includes/translations/translations.txt` (README file). Adding blurp about fuzzy translation entries in existing PO files that translate s2Member. This contains some additional tips on how to update existing PO files upon each release of s2Member and/or s2Member Pro.
378
* (s2Member/s2Member Pro) **Bug Fix (#321)** Fixing bug in `/s2member/includes/templates/cfg-files/s2-cross-xml.php` for S3 Buckets (resulting in `crossdomain.xml`). This file contained a parse error and was causing some problems for site owners integrating Adobe Flash content served via Amazon S3. Fixed in this release.
379
+ * (s2Member Pro) **PayPal Pro-Forms (#315)** Adding note in the Dashboard here (`s2Member PayPal Pro-Forms Shortcode Attributes Explained`). In the list of Shortcode Attributes we are adding a note regarding max character length for the `desc=""` Attribute in a PayPal Pro-Form Shortcode. This can be as long as you like. However, all descriptions passed through PayPal® APIs are truncated automatically to 60 characters max (e.g., the maximum allowed length for PayPal® descriptions is 60 characters). Nothing new here, but we thought it would be a good idea to clarify this behavior in the documentation. Updated in this release.
380
+ * (s2Member Pro) **PayPal Pro-Forms (#312)** Preventing the use of multiple Pro-Forms in the same Post/Page. This has never been possible, it is known to break the functionality of s2Member Pro-Forms. Please limit Pro-Form Shortcodes to ONE for each Post/Page; and do NOT attempt to use more than one Pro-Form Shortcode on the same Post/Page (at the same time). In this release we have added a friendly JavaScript alert/warning for site owners that attempt this, so that problems and confusion can be avoided in this unlikely scenario.
381
382
= v130513 =
383
384
* (s2Member/s2Member Pro) **s2Stream Shortcode Bug Fix (#256)** Fixing a bug first introduced in the previous release where we added support for `player_aspectratio`. This quick update corrects the PHP parse error at line #154 of `sc-files-in.inc.php`. It also corrects the behavior of the `player_height=""` and `player_aspectratio=""` Shortcode Attributes for the `s2Stream` Shortcode. Many thanks to everyone that reported this bug.
385
* (s2Member Pro) **Codestyling Localization** Removing symlink creator for Codestyleing Localization compatibility. There have been some reports of problems during WordPress® automatic upgrades (when/if the symlink exists). Until we can find a way to avoid this, we're disabling the automatic symlink generator. If you're running the Codestyling Localization plugin together with s2Member Pro, you will need to create the symlink yourself if you want to make s2Member fully compatible. Please create a symlink here: `/wp-content/plugins/s2member/s2member-pro` that points to the s2Member Pro directory: `/wp-content/plugins/s2member-pro`. See notes in previous changelog for further details on this.
386
387
+ **IMPORTANT NOTE:** If you upgraded previously to v130510 (and you ran the Codestyling Localization plugin together with s2Member® v130510—at any time); please delete this symlink via FTP: `/wp-content/plugins/s2member/s2member-pro`. Please do this BEFORE attempting an automatic upgrade via WordPress®.
388
389
If you missed this note and you've already attempted an automatic upgrade, you will have trouble. Here's how to correct the problem.
390
395
396
= v130510 =
397
398
+ * (s2Member Pro) **Authorize.Net UK (and Other Currencies) (#104)** Adding support for Authorize.Net UK and other currencies too. s2Member Pro now officially supports Authorize.Net UK Edition. It is now possible to change your Authorize.Net Pro-Form Shortcode Attribute `cc="USD"` to one of these values: `cc="USD"`, or `cc="CAD"` or `cc="EUR"` or `cc="GBP"`. For further details, please see: `Dashboard Authorize.Net Pro-Forms Shortcode Attributes (Explained)`.
399
+ * (s2Member Pro) **ClickBank Skins (#227)** Adding support for the `cbskin=""` Shortcode Attribute. For further details, please see: `Dashboard ClickBank Buttons Shortcode Attributes (Explained)`.
400
+ * (s2Member Pro) **ClickBank PitchPlus Upsell Flows (#227)** Adding support for ClickBank PitchPlus Upsell Flows via new Shortcode Attributes: `cbfid=""`, `cbur=""`, `cbf="auto"`. s2Member Pro now officially supports ClickBank PitchPlus Upsell Flows. We support PitchPlus Basic and PitchPlus Advanced too. For further details, please see: `Dashboard ClickBank Buttons Shortcode Attributes (Explained)`.
401
* (s2Member/s2Member Pro) **Codestyling Localization** Adding automatic symlink creator for improved compatibility with the CodeStyling Localization plugin. A symlink is created automatically whenever the CodeStyling Localization plugin is installed, and s2Member® Pro is installed as well. The symlink allows the CodeStyling Localization plugin to scan files from the s2Member® Pro directory too; instead of only scanning the s2Member® Framework directory. s2Member and s2Member Pro are now both compatible with the Codestyling Localization plugin (optional).
402
* (s2Member/s2Member Pro) **Custom Templates w/ s2Stream Shortcode** Adding support for custom templates to be used in conjunction with the `s2Stream` Shortcode. It is now possible to take the default player templates from `/s2member/includes/templates/players/` and put these files inside your own WordPress® theme directory (or inside the `/wp-content/` directory). s2Member will automatically find your template files in these locations. Your custom template files will then be used instead of the built-in defaults.
403
* (s2Member/s2Member Pro) **Bug Fix (#59)** Resending a password to a User from the Dashboard (while changing the User's email address at the same time); resulted in the email being sent to the previous email address instead of the new one. Fixed in this release.
421
For further details, please see [this thread](http://www.s2member.com/forums/topic/paypal-expired-security-token/page/2/) (or monitor the [s2Member KB](http://www.s2member.com/kb/) for new articles on this subject).
422
* (s2Member Pro) **Payflow API Docs** Updating `s2m-pro-extras.zip` to include the latest versions of the PayPal Pro (Payflow Edition) APIs. s2Member Pro customers can download this optional ZIP file from their My Account page at s2Member.com. These are extras only, they are NOT part of the s2Member application.
423
* (s2Member Pro) **Google Checkout Bug Fix (#214)** Updating s2Member's Google Checkout integration to properly support the `rrt` Shortcode Attribute. Fixed in this release. For further details please see [this thread](http://www.s2member.com/forums/topic/google-recurring-problem/#post-48218).
424
+ * (s2Member Pro) **Username Validation (#246)** Now forcing user input (during Pro-Form registration) to lowercase on Multisite Networks to prevent unnecessary validation errors during checkout (saving a customer time). Also, s2Member now validates a customer's Username before it is passed through `sanitize_user()` (a core WordPress® function). This prevents confusion for a customer where certain characters were stripped out automatically, causing them problems when attempting to log in for the first time (e.g., the customer thinks their Username is `john~doe`; when it is actually `johndoe` because WordPress (when running a Multisite Network) removes anything that is NOT `a-z0-9 _.-@` (and s2Member removes whitespace as well).
425
426
= v130406 =
427
450
= v130220 =
451
452
* (s2Member Pro) **Feature Enhancement/User Exportation (#33)** Adding support for UTF-8 BOM in CSV User export files. Now a configurable option during User/Member Exportation.
453
+ * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#21)** Adding additional Replacement Codes for New User Email Notifications (for both the User/Member Notification and also for the Administrator Notification). The following Replacement Codes are now possible: `%%role%%`, `%%label%%`, `%%level%%`, `%%ccaps%%`. Also adding four new Filters for developers. These include: `ws_plugin__s2member_welcome_email_sbj`, `ws_plugin__s2member_welcome_email_msg`, `ws_plugin__s2member_admin_new_user_email_sbj`, `ws_plugin__s2member_admin_new_user_email_msg`. See `Dashboard General Options Email Configuration` for further details.
454
+ * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#30)** Adding support for PHP tags in the following emails: New User Notification, Administrative New User Notification, Signup Confirmation Email, Specific Post/Page Confirmation Email. See the relevant sections in your Dashboard for further details. Such as: `s2Member® General Options Email Configuration` and `s2Member® PayPal® Options Signup Confirmation Email`.
455
+ * (s2Member/s2Member Pro) **Feature Enhancement/Shortcodes (#23)** Adding support for the `lang=""` Attribute in PayPal Buttons, PayPal Pro-Forms, and in Google Checkout Buttons. This is a bit different from the existing `lc=""` value. The `lc=""` value controls the interface at PayPal, while the `lang=""` value controls the language of the Standard and/or Express Checkout Button itself (with respect to s2Member®). For further details, please see: `Dashboard PayPal Buttons (or Pro-Forms) Shortcode Attributes (Explained)`.
456
* (s2Member/s2Member Pro) **Bug Fix** Fixing bug in User Access Package. Now checking if `$cap_enabled` also is `TRUE`; just in case another plugin or hack file attempts to disable Custom Capabilities without removing them. Not likely, but we can support this easily with a quick update in this release. Note... this has no impact on s2Member's existing functionality. Custom Capabilities continue to work just as they always have.
457
+ * (s2Member/s2Member Pro) **Feature Enhancement/Logging** Adding new logger. Logs to file `reg-handler.log`. Includes all User/Member registrations handled by s2Member® (either directly or indirectly). Only if logging is enabled. For further details, please check your Dashboard here: `s2Member® Log Files (Debug)`.
458
+ * (s2Member/s2Member Pro) **Feature Enhancement/EOTs (#29)** Adding UI option for EOT Grace Time. For further details, please see: `Dashboard PayPal Options Automatic EOT Behavior`. Also adding a new Filter for developers: `ws_plugin__s2member_eot_grace_time`.
459
+ * (s2Member/s2Member Pro) **Feature Enhancement/EOTs** Adding UI option for EOT Custom Capability Removal. For further details, please see: `Dashboard PayPal Options Automatic EOT Behavior`. Also adding a new Filter for developers: `ws_plugin__s2member_remove_ccaps_during_eot_events`.
460
+ * (s2Member/s2Member Pro) **Feature Enhancement/s2Stream Shortcode (#32)** Adding additional support for JW Player™ Captions, Titles, Descriptions, and Media IDs (i.e., `player_title=""`, `player_description=""`, `player_mediaid=""`, `player_captions=""`). Please check the Shortcode Attributes tab in [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes) for further details.
461
462
= v130214 =
463
464
* **(Maintenance Release) Upgrade immediately.**
465
* (s2Member/s2Member Pro) **Log Viewer (#16)** Additional log file descriptions have been added to the Dashboard, along with some other UI enhancements in this section.
466
* (s2Member/s2Member Pro) **Bug Fix (#18)** Usernames consisting of all numeric values were not always being redirected to the Login Welcome Page upon logging in, even when s2Member® was configured to do so. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/subscribers-not-taken-to-welcome-page/page/2/#post-41663).
467
+ * (s2Member Pro) **Coupon Codes (#19)** Adding new Replacement Codes: `%%full_coupon_code%%`, `%%coupon_code%%` and `%%coupon_affiliate_id%%`. These are now available in all API Tracking Codes, in all Custom Return URLs for Pro-Forms, and in most API Notifications.
468
* (s2Member Pro) **Coupon Codes (#19)** Deprecating the `%%affiliate_id%%` Replacement Code for tracking Affiliate Coupon Codes in favor of `%%coupon_affiliate_id%%`.
469
* (s2Member/s2Member Pro) **Last Login Time** Improving readability of Last Login Time in list of Users/Members.
470
* (s2Member/s2Member Pro) **Compatibility** Improving support for WordPress® v3.6-alpha with respect to `tabindex` values on `/wp-login.php`.
473
= v130213 =
474
475
* **(Maintenance Release) Upgrade immediately.**
476
+ * (s2Member Pro) **Compatibility (#13)** PayPal® Payments Pro, PayPal® Payments Pro (Payflow Edition), and Authorize.Net. s2Member® Pro now supports a recurring interval of Semi-Yearly (e.g., charges occur every six months). This has always been possible by manipulating Shortcode Attribues, but it's now officially supported by Pro-Form Generators in your Dashboard—which come with s2Member® Pro.
477
* (s2Member Pro) **Compatibility (#13)** ClickBank® Recurring Products. ClickBank® has started allowing a Weekly recurring interval and stopped allowing Yearly. s2Member® has been updated in this release to support a Weekly recurring interval with ClickBank®; and to remove the Yearly option in the ClickBank® Button Generator.
478
* (s2Member Pro) **Compatibility (#13)** PayPal® Payments Pro (Payflow Edition). PayPal® Payments Pro (Payflow Edition) has started allowing a Daily recurring interval. s2Member® has been updated in this release to support a Daily recurring interval with PayPal® Payments Pro (Payflow Edition). Daily recurring intervals remain possible with PayPal® Pro accounts that do not include the additional Payflow API. This change simply adds official support for Daily recurring billing with PayPal® Payments Pro (Payflow Edition).
479
* (s2Member) **Debugging Assistance** Updating s2Member's PayPal® PDT/Auto-Return handler to better handle scenarios where a site owner is missing a PayPal® PDT Identity Token in their s2Member® configuration, or has incorrectly set the `custom=""` Shortcode Attribute in Payment Buttons generated with s2Member®. Administrative notices are now displayed in the Dashboard when/if this occurs and s2Member® can catch the issue during post-processing of a transaction.
480
* (s2Member/s2Member Pro) **General Code Cleanup** Removing all `/**/` markers in the s2Member® codebase. These were used in conjunction with PolyStyle® code formatting tools to preserve line breaks in the code. The WebSharks™ development team no longer uses PolyStyle®, making these obsolete now. Removed in this release to improve readability for developers.
481
* (s2Member/s2Member Pro) **General Code Cleanup** Removing all unnecessary uses of PHP's `eval()` function in s2Member's codebase. These were used to keep repetitive code all in a single line; part of a standard the WebSharks™ development team is now moving away from. Removed in this release to improve readability for developers; and to prevent unnecessary confusion.
482
* (s2Member/s2Member Pro) **Auto-EOT System** Updated s2Member's Auto-EOT System. s2Member® now leaves an additional note behind after a demotion, which references the Paid Subscr. Gateway and Paid Subscr. ID values before the demotion occurred. This way there is a better reference left behind after an automatic demotion occurs.
483
+ * (s2Member/s2Member Pro) **Searching Users** Updating search function in list of Users (i.e., `Dashboard Users [Search Box]`) to include the Administrative Notes field when searching for Users. This allows references to old Paid Subscr. IDs in the Administrative Notes field to be considered when searching Users/Members.
484
* (s2Member/s2Member Pro) **Last Login Time** Adding new User Option value (tracked by s2Member®). This option value tracks the last time each User/Member logged into your site. Ex: `get_user_option("s2member_last_login_time")`.
485
* (s2Member/s2Member Pro) **Last Login Time** Adding new User data column to list of Users in the Dashboard: `Last Login Time`.
486
* (s2Member/s2Member Pro) **Last Login Time** Adding new API Function: [`s2member_last_login_time()`](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/).
487
* (s2Member/s2Member Pro) **ezPHP** Updated all internal documentation references that pointed to Exec-PHP or the PHP Execution plugin as recommendations for developers that wish to integrate PHP tags into Posts/Pages/Widgets. These old references now point to the [ezPHP](http://www.s2member.com/kb/ezphp-plugin/) plugin by s2Member® Lead Developer: Jason Caldwell. s2Member® remains compatible with other PHP plugins, but we recommend [ezPHP](http://www.s2member.com/kb/ezphp-plugin/) for the best compatibility with both s2Member® and WordPress® itself.
488
+ * (s2Member/s2Member Pro) **Simple Shortcode Conditionals** Adding a [Simple Shortcode Conditionals](http://www.s2member.com/kb/simple-shortcode-conditionals/) section to `s2Member® Restriction Options` in the Dashboard. This way more site owners will be aware of this feature from the start.
489
+ * (s2Member/s2Member Pro) **Login/Registration Design** Login/Registration Design with s2Member® is now optional (e.g., this feature can be disabled now—if you prefer). See: `Dashboard s2Member® General Options Login/Registration Design`. This feature is enabled by default on all s2Member® installations.
490
* (s2Member/s2Member Pro) **Inline Documentation** Adding more links to KB articles throughout the Dashboard area.
491
+ * (s2Member/s2Member Pro) **Inline Documentation** Updating all spaced parenthesis like `( something... )` to remove the grammatical errors—by removing the extra spaces inside these brackets.
492
+ * (s2Member/s2Member Pro) **Inline Documentation** Removing all references to PriMoThemes and/or primothemes.com within the application itself. PriMoThemes is now s2Member® (as of Jan 2012—it's been awhile; so time to remove these obviously).
493
* (s2Member/s2Member Pro) **Inline Documentation** Adding link to "more updates..." in the Dashboard, pointing to the s2Member® KB. Increasing number of recent KB udpates from 3 up to 5. These are visible from any s2Member® page in the Dashboard (top of the right-hand column).
494
+ * (s2Member/s2Member Pro) **Inline Documentation** Adding [s2Member® Pro](http://www.s2member.com/pro/) (a recommended upgrade) to the Quick-Start Guide for s2Member®—in the Dashboard.
495
+ * (s2Member/s2Member Pro) **Inline Documentation** Adding Troubleshooting section to the Quick-Start Guide for s2Member®—in the Dashboard.
496
+ * (s2Member/s2Member Pro) **Inline Documentation** Adding Perfect Theme section to the Quick-Start Guide for s2Member®—in the Dashboard.
497
+ * (s2Member/s2Member Pro) **Inline Documentation** Adding video tutorial to the `Dashboard s2Member® API / Scripting Custom Capabilities` section.
498
+ * (s2Member/s2Member Pro) **Logging Functionality** Adding an s2Member® Log Viewer to the Dashboard for all site owners; and also for s2Member® Support Reps to use when running diagnostics. See: `Dashboard s2Member® Log Files (Debug)` for further details.
499
+ * (s2Member/s2Member Pro) **Logging Functionality** Logging routines are now enabled by default on all new installations of s2Member®. Existing installations of s2Member® are advised to enable logging, by visiting this section of your Dashboard. See: `s2Member® PayPal® Options (or Authorize.Net, ClickBank, etc) Account Details Logging`.
500
+ * (s2Member/s2Member Pro) **Logging Functionality** Additional logging routines that will track all s2Member® HTTP communication within WordPress® is now enabled by default. This new log file will be located inside `/wp-content/plugins/s2member-logs`. It is named: `s2-http-api-debug.log`. See: `Dashboard s2Member® Log Files (Debug)` for further details.
501
+ * (s2Member/s2Member Pro) **Logging Functionality** Additional logging routines that will track *all* HTTP communication within WordPress® are now possible (these are quite extensive). See: `Dashboard s2Member® Log Files (Debug) Logging Configuration` for further details. This more extensive logging is disabled by default; it must be enabled by a site owner. For debugging only—this should NEVER be enabled on a live site.
502
* (s2Member/s2Member Pro) **Logging Functionality** Adding date/time to all log entries maintained by s2Member®.
503
+ * (s2Member/s2Member Pro) **GZIP Conflicts** Adding additional lines of defense against GZIP conflicts during file downloads, with calls to `@apache_setenv("no-gzip", "1")` in other areas—not just during public file downloads (e.g., also during User/Member exporations, log file downloads, etc).
504
* (s2Member/s2Member Pro) **GZIP Conflicts** Adding an additional line of defense against GZIP conflicts during file downloads, with this line now appearing in the `.htaccess` file snippet added by the s2Member® software application: `RewriteCond %{QUERY_STRING} (^|\?|&)no-gzip\=1`.
505
* (s2Member/s2Member Pro) **GZIP Conflicts** Adding an additional line of defense against GZIP conflicts during User/Member exporations, log file downloads, and other downloads that come straight from the Dashboard area to site owners via web browsers. s2Member® now sends `Content-Encoding: none` to prevent Apache's `mod_deflate` from interfering with s2Member® under these special scenarios. A `Content-Encoding: none` header value is technically invalid, but it's known to prevent issues with `mod_deflate`. Since a `Content-Encoding: none` header value is technically invalid, s2Member® does NOT implement this during public file downloads; where we need to provide wider support for a long list of devices that may choke on this incorrect value. This is only implemented for site owners in the administrative areas of WordPress; and only for file downloads related to CSV export files and logs.
506
* (s2Member/s2Member Pro) **Bug Fix** Fixed incorrect `preg_split` limit against `$paypal['item_number']` in IPN handler for `subscr_payment` and `subscr_cancel` transaction types. Doesn't appear to have affected anything negatively, but it was wrong none the less. Fixed in this release.
507
* (s2Member/s2Member Pro) **Bug Fix** Fixed incorrect handling of a single opt-in checkbox on BuddyPress registration forms, which was not being wrapped with s2Member's BuddyPress container divs at all times. A symptom of this bug was to see a checkbox on your BuddyPress registration that was out of alignment or out of position. Fixed in this release.
508
+ * (s2Member/s2Member Pro) **Compatibility** Updated all of s2Member's IPN handlers to accept `$_REQUEST` data for Proxy-related variables like `s2member_paypal_proxy_return_url`. This allows s2Member® itself to use `$_POST` variables for Proxy-related variables; and it further reduces the likelihood of 403 Forbidden errors caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/). One issue this should help to correct, is a mysterious case where a `success=""` Shortcode Attribute is not working as you might expect. This can be caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/) at places like HostGator®, because a URL is passing through a query string. This release will help to prevent this from becoming a problem, because `success=""` URLs will be passed through `$_POST` variables now in all Pro-Form integrations.
509
510
= v130207 =
511
519
= v130203 =
520
521
* **(New Release) Please read this changelog for important details.**
522
+ * (s2Member Pro) **Remote Ops API (`create_user`)** s2Member® Pro's Remote Operations API, for the `create_user` Operation has been updated to support a new specification: `modify_if_login_exists`. For further details, please check your s2Member® Pro Dashboard here: `s2Member® API / Scripting Remote Operations API`.
523
+ * (s2Member Pro) **Remote Ops API (`modify_user`,`delete_user`)** s2Member® Pro's Remote Operations API has been updated to support two additional Operations: `update_user` and `delete_user`. For further details on these new Operations, please check your s2Member® Pro Dashboard here: `s2Member® API / Scripting Remote Operations API`.
524
* (s2Member Pro) **Remote Ops API (`init` hook priority)** s2Member® Pro's Remote Operations API has been updated to prevent conflicts when running in concert with BuddyPress v1.6.4+. Hook priority now running at default value of `11`, right after BuddyPress v1.6.4 at hook priority `10`.
525
+ * (s2Member/s2Member Pro) **s2Stream Shortcode (#88)** s2Member® now supports JW Player® license keys (for the professional edition) using Shortcode Attribute `player_key=""` (or they can be specified sitewide via JavaScript provided by Longtail Video—optional). See [this discussion](http://www.s2member.com/forums/topic/jwplayer-shortcode-for-poster-not-working/#post-40435). See also: [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes).
526
* (s2Member/s2Member Pro) **s2Stream Shortcode (#88)** Bug fix. The s2Stream Shortcode was not working properly (with respect to a specific Shortcode Attribute: `player_image=""`). Fixed in this release. See [this discussion](http://www.s2member.com/forums/topic/jwplayer-shortcode-for-poster-not-working/#post-40128). See also: [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes).
527
+ * (s2Member Pro) **User Exportation (#89)** s2Member® Pro's User Exportation now includes separate data columns for each Custom Registration/Profile Field that you've configured with s2Member®. Also, s2Member® Pro will now include ALL Custom Registration/Profile Fields (even if there is no value associated with certain Fields, for specific Users/Members—e.g., empty column values will now be included by s2Member® Pro). This provides a more consistent/readable CSV export file; a major improvement. Discussed in [this KB article](http://www.s2member.com/kb/importing-updating-users/#custom-registration-profile-fields).
528
+ * (s2Member Pro) **User Importation (#89)** s2Member® Pro's User/Member Import format changed in this release (with respect to Custom Registration/Profile Fields only). If you are importing Custom Registration/Profile Fields, please review [this KB article](http://www.s2member.com/kb/importing-updating-users/#custom-registration-profile-fields) before you import new Users/Members or mass update any existing Users/Members. ALSO NOTE: User/Member CSV Export Files generated by previous versions of s2Member® Pro (if they contained any Custom Registration/Profile Fields) will NOT be compatible with this latest release (e.g., you should NOT attempt to re-import those old files in an effort to mass update existing Users/Members). Please generate a new User/Member CSV Export File in the latest release of s2Member® Pro before attempting to edit and/or mass update existing Users/Members with applications like MS Excel or OpenOffice.
529
530
= v130123 =
531
533
* (s2Member/s2Member Pro) **s2Stream Shortcode (#78)** s2Member® now supports JW Player® license keys using Shortcode Attribute `player_key=""`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
534
* (s2Member/s2Member Pro) **s2Stream Shortcode (#79)** s2Member® now supports JW Player® [Advanced Option Blocks](http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player) using Shortcode Attribute `player_option_blocks=""`. Example: `player_option_blocks="sharing:{}"`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
535
* (s2Member Pro) **User Exportation (#80)** s2Member® Pro User Exportation now occurs with MySQL `ORDER BY ID`, instead of no `ORDER BY` at all. This helps to prevent confusion and buggy behavior. Discussed in [this thread](http://www.s2member.com/forums/topic/user-export-not-working-properly/#post-39123).
536
+ * (s2Member Pro) **User Exportation (#81)** s2Member Pro's User Exportation now supports the exporation of up to `1000` User/Member table rows at once. Of course it remains possible to export ALL of your Users/Members with s2Member® Pro. All we've done here is bump the default limit from `250` up to `1000` at a time. In addition, there is a new Filter making it possible to extend this limit further on servers that can handle it. Use Filter: `ws_plugin__s2member_pro_export_users_limit` if you would like to export more Users all at once. See also: `Dashboard s2Member® Pro User/Member Exportation`.
537
* (s2Member/s2Member Pro) **KB Articles** Inline documentation updated in some areas, with a few links pointing to helpful/related KB articles.
538
539
= v130121 =
540
541
* **(Maintenance Release) Upgrade immediately.**
542
+ * **New Feature** s2Member® now comes with a new Shortcode `[s2Stream file_download="video.mp4" player="jwplayer-v6" ... /]`, making it MUCH easier for site owners to implemement RTMP streams of audio/video content. For further details, please check your Dashboard under: `s2Member® Download Options JW Player® v6 and RTMP Protocol Examples`. See also: `s2Member® Download Options Shortcode Attributes (Explained)`.
543
* **Compatibility (#75)** Updated s2Member's local file storage engine (for File Downloads via s2Member®), to support special characters in file names. Discussed in [this thread](http://www.s2member.com/forums/topic/problem-with-quotes-in-filename-downloads/#post-38395).
544
* **Bug Fix (#71)** A bug first introduced in the previous release of v130116, where we added support for byte-range requests to s2Member's File Download functionality, was causing multiple byte-range requests (processed by s2Member) to count against each User/Member as multiple File Downloads. Fixed in this release.
545
+ * **Compatibility** Updated s2Member's integration with Amazon® S3 to extend the default 30 second connection timeout (which was too conservative for many integrations) up to 24 hours by default, making it match the same as s2Member's Amazon® CloudFront connection timeout. For further details, please check your Dashboard under: `s2Member® Download Options Amazon® S3/CDN Storage Dev Note w/Technical Details`. It is possible to modify this connection timeout through a Filter discussed there.
546
547
= v130116 =
548
checksum.txt CHANGED
@@ -1 +1 @@
1
- 84638519eea37bbc521b44a83b66c496
1
+ 73638fc82a53a79d203ccd74db9b5416
images/trans-bg.png CHANGED
Binary file
includes/classes/access-cap-times.inc.php CHANGED
@@ -121,7 +121,7 @@ if(!class_exists('c_ws_plugin__s2member_access_cap_times'))
121
foreach($caps as &$_caps_prev_now)
122
{
123
foreach(array_intersect(array_keys($_caps_prev_now), array_keys($role_objects)) as $_role)
124
- if($_caps_prev_now[$_role]) // If the cap (i.e. the role) is enabled; merge its caps.
125
$_caps_prev_now = array_merge($_caps_prev_now, $role_objects[$_role]->capabilities);
126
127
$_s2_caps_prev_now = array();
@@ -199,11 +199,11 @@ if(!class_exists('c_ws_plugin__s2member_access_cap_times'))
199
* @param array $access_caps Optional. If not passed, this returns all times for all caps.
200
* If passed, please pass an array of specific access capabilities to get the times for.
201
* If removal times are desired, you should add a `-` prefix.
202
- * e.g. `array('ccap_music','level2','-ccap_video')`
203
*
204
* @return array An array of all access capability times.
205
* Keys are UTC timestamps (w/ microtime precision), values are the capabilities (including `-` prefixed removals).
206
- * e.g. `array('1234567890.0001' => 'ccap_music', '1234567890.0002' => 'level2', '1234567890.0003' => '-ccap_video')`
207
*/
208
public static function get_access_cap_times($user_id, $access_caps = array())
209
{
121
foreach($caps as &$_caps_prev_now)
122
{
123
foreach(array_intersect(array_keys($_caps_prev_now), array_keys($role_objects)) as $_role)
124
+ if($_caps_prev_now[$_role]) // If the cap (i.e., the role) is enabled; merge its caps.
125
$_caps_prev_now = array_merge($_caps_prev_now, $role_objects[$_role]->capabilities);
126
127
$_s2_caps_prev_now = array();
199
* @param array $access_caps Optional. If not passed, this returns all times for all caps.
200
* If passed, please pass an array of specific access capabilities to get the times for.
201
* If removal times are desired, you should add a `-` prefix.
202
+ * e.g., `array('ccap_music','level2','-ccap_video')`
203
*
204
* @return array An array of all access capability times.
205
* Keys are UTC timestamps (w/ microtime precision), values are the capabilities (including `-` prefixed removals).
206
+ * e.g., `array('1234567890.0001' => 'ccap_music', '1234567890.0002' => 'level2', '1234567890.0003' => '-ccap_video')`
207
*/
208
public static function get_access_cap_times($user_id, $access_caps = array())
209
{
includes/classes/admin-notices.inc.php CHANGED
@@ -33,7 +33,7 @@ if(!class_exists('c_ws_plugin__s2member_admin_notices'))
33
* @package s2Member\Admin_Notices
34
* @since 3.5
35
*
36
- * @param string $notice String value of actual notice *(i.e. the message)*.
37
* @param string|array $on_pages Optional. Defaults to any page. String or array of pages to display this notice on.
38
* @param bool $error Optional. True if this notice is regarding an error. Defaults to false.
39
* @param int $time Optional. Unix timestamp indicating when this notice will be displayed.
@@ -65,7 +65,7 @@ if(!class_exists('c_ws_plugin__s2member_admin_notices'))
65
* @package s2Member\Admin_Notices
66
* @since 3.5
67
*
68
- * @param string $notice String value of actual notice *(i.e. the message)*.
69
* @param bool $error Optional. True if this notice is regarding an error. Defaults to false.
70
* @param bool $dismiss Optional. If true, the notice will be displayed with a dismissal link. Defaults to false.
71
*/
33
* @package s2Member\Admin_Notices
34
* @since 3.5
35
*
36
+ * @param string $notice String value of actual notice *(i.e., the message)*.
37
* @param string|array $on_pages Optional. Defaults to any page. String or array of pages to display this notice on.
38
* @param bool $error Optional. True if this notice is regarding an error. Defaults to false.
39
* @param int $time Optional. Unix timestamp indicating when this notice will be displayed.
65
* @package s2Member\Admin_Notices
66
* @since 3.5
67
*
68
+ * @param string $notice String value of actual notice *(i.e., the message)*.
69
* @param bool $error Optional. True if this notice is regarding an error. Defaults to false.
70
* @param bool $dismiss Optional. If true, the notice will be displayed with a dismissal link. Defaults to false.
71
*/
includes/classes/auto-eots.inc.php CHANGED
@@ -176,7 +176,7 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
176
c_ws_plugin__s2member_user_notes::append_user_notes($user_id, 'Demoted by s2Member: '.date('D M j, Y g:i a T'));
177
178
if($subscr_gateway && $subscr_id) // Also note the Paid Subscr. Gateway/ID so there is a reference left behind here.
179
- c_ws_plugin__s2member_user_notes::append_user_notes($user_id, 'Paid Subscr. ID @ time of demotion: '.$subscr_gateway.' -› '.$subscr_id);
180
181
if($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'] && is_array($cv = preg_split('/\|/', $custom)))
182
{
176
c_ws_plugin__s2member_user_notes::append_user_notes($user_id, 'Demoted by s2Member: '.date('D M j, Y g:i a T'));
177
178
if($subscr_gateway && $subscr_id) // Also note the Paid Subscr. Gateway/ID so there is a reference left behind here.
179
+ c_ws_plugin__s2member_user_notes::append_user_notes($user_id, 'Paid Subscr. ID @ time of demotion: '.$subscr_gateway.' '.$subscr_id);
180
181
if($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'] && is_array($cv = preg_split('/\|/', $custom)))
182
{
includes/classes/aweber.inc.php CHANGED
@@ -44,7 +44,7 @@ if(!class_exists('c_ws_plugin__s2member_aweber'))
44
include_once dirname(dirname(__FILE__)).'/externals/aweber/aweber_api.php';
45
46
if(count($key_parts = explode('|', $GLOBALS['WS_PLUGIN__']['s2member']['o']['aweber_api_key'])) < 5)
47
- return NULL; // It's an invalid API key; i.e. authorization code.
48
49
list($consumerKey, $consumerSecret, $requestToken, $tokenSecret, $verifier) = $key_parts;
50
$internal_api_key_checksum = md5($consumerKey.$consumerSecret.$requestToken.$tokenSecret.$verifier);
@@ -185,7 +185,7 @@ if(!class_exists('c_ws_plugin__s2member_aweber'))
185
186
$_aw['findSubscriber'] = array('email' => $args->email);
187
if(self::count($_aw['foundSubscribers'] = $_aw['list']->subscribers->find($_aw['findSubscriber']))
188
- && $_aw['foundSubscribers'][0]->status !== 'unconfirmed' // i.e. `subscribed|unsubscribed`.
189
) // Cannot modify an `unconfirmed` subscriber.
190
{
191
/** @var AWeberEntry $_existing_subscriber */
44
include_once dirname(dirname(__FILE__)).'/externals/aweber/aweber_api.php';
45
46
if(count($key_parts = explode('|', $GLOBALS['WS_PLUGIN__']['s2member']['o']['aweber_api_key'])) < 5)
47
+ return NULL; // It's an invalid API key; i.e., authorization code.
48
49
list($consumerKey, $consumerSecret, $requestToken, $tokenSecret, $verifier) = $key_parts;
50
$internal_api_key_checksum = md5($consumerKey.$consumerSecret.$requestToken.$tokenSecret.$verifier);
185
186
$_aw['findSubscriber'] = array('email' => $args->email);
187
if(self::count($_aw['foundSubscribers'] = $_aw['list']->subscribers->find($_aw['findSubscriber']))
188
+ && $_aw['foundSubscribers'][0]->status !== 'unconfirmed' // i.e., `subscribed|unsubscribed`.
189
) // Cannot modify an `unconfirmed` subscriber.
190
{
191
/** @var AWeberEntry $_existing_subscriber */
includes/classes/constants.inc.php CHANGED
@@ -258,7 +258,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
258
* The current User's Membership Access Label.
259
*
260
* As configured by the site owner. Each Membership Level is associated with a Membership Label
261
- * *(i.e. Bronze, Silver, Gold, Platinum)*, or whatever the site owner has configured.
262
*
263
* An empty string if NOT logged-in.
264
*
@@ -1076,7 +1076,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1076
*
1077
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1078
*
1079
- * @see `Dashboard -› s2Member -› Download Options`
1080
*/
1081
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED'))
1082
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED', ($c[] = (int)$file_downloads['allowed']));
@@ -1085,7 +1085,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1085
* Does the current User have access to unlimited File Downloads.
1086
*
1087
* A value of true means the current User's allowed downloads are >= `999999999`, and false means it is not.
1088
- * This is useful if you are allowing unlimited ( i.e. `999999999+` ) Downloads on some Membership Levels.
1089
* You can display `Unlimited` instead of a numerical value.
1090
*
1091
* This will be false if NOT logged-in.
@@ -1131,7 +1131,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1131
*
1132
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1133
*
1134
- * @see `Dashboard -› s2Member -› Download Options`
1135
*/
1136
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED'))
1137
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED', ($c[] = (($file_downloads['allowed'] >= 999999999) ? TRUE : FALSE)));
@@ -1177,7 +1177,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1177
*
1178
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1179
*
1180
- * @see `Dashboard -› s2Member -› Download Options`
1181
*/
1182
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY'))
1183
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY', ($c[] = (int)$file_downloads['currently']));
@@ -1223,7 +1223,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1223
*
1224
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1225
*
1226
- * @see `Dashboard -› s2Member -› Download Options`
1227
*/
1228
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS'))
1229
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS', ($c[] = (int)$file_downloads['allowed_days']));
@@ -1279,7 +1279,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1279
*
1280
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1281
*
1282
- * @see `Dashboard -› s2Member -› Download Options`
1283
*/
1284
if(!defined('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_ID'))
1285
define ('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_ID', ($c[] = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_limit_exceeded_page']));
@@ -1320,7 +1320,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1320
*
1321
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1322
*
1323
- * @see `Dashboard -› s2Member -› General Options -› Membership Options Page`
1324
*/
1325
if(!defined('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_ID'))
1326
define ('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_ID', ($c[] = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_options_page']));
@@ -1361,7 +1361,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1361
*
1362
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1363
*
1364
- * @see `Dashboard -› s2Member -› General Options -› Login Welcome Page`
1365
*/
1366
if(!defined('S2MEMBER_LOGIN_WELCOME_PAGE_ID'))
1367
define ('S2MEMBER_LOGIN_WELCOME_PAGE_ID', ($c[] = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page']));
@@ -1369,7 +1369,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1369
/**
1370
* A URL, which leads to the Stand-Alone Profile Modification Page.
1371
*
1372
- * This is always a reference to `/?s2member_profile=1` *(i.e. the Stand-Alone version)*.
1373
*
1374
* ———— Quick PHP Code Sample ————
1375
* ```
@@ -1401,7 +1401,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1401
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_ID
1402
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_URL
1403
*
1404
- * @see `Dashboard -› s2Member -› General Options -› Profile Modifications`
1405
*/
1406
if(!defined('S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL'))
1407
define ('S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL', ($c[] = (string)home_url('/?s2member_profile=1')));
@@ -1457,7 +1457,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1457
*
1458
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1459
*
1460
- * @see `Dashboard -› s2Member -› Download Options`
1461
*/
1462
if(!defined('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_URL'))
1463
define ('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_URL', ($c[] = (string)$links['file_download_limit_exceeded_page']));
@@ -1498,7 +1498,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1498
*
1499
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1500
*
1501
- * @see `Dashboard -› s2Member -› General Options -› Membership Options Page`
1502
*/
1503
if(!defined('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_URL'))
1504
define ('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_URL', ($c[] = (string)$links['membership_options_page'])); // Signup page.
@@ -1539,7 +1539,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1539
*
1540
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1541
*
1542
- * @see `Dashboard -› s2Member -› General Options -› Login Welcome Page`
1543
*/
1544
if(!defined('S2MEMBER_LOGIN_WELCOME_PAGE_URL'))
1545
define ('S2MEMBER_LOGIN_WELCOME_PAGE_URL', ($c[] = (($login_redirection_url) ? (string)$login_redirection_url : (string)$links['login_welcome_page'])));
@@ -1664,7 +1664,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1664
*
1665
* @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
1666
*
1667
- * @see `Dashboard -› s2Member -› General Options -› Membership Level (Labels)`
1668
*/
1669
for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
1670
{
@@ -1716,7 +1716,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1716
*
1717
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1718
*
1719
- * @see `Dashboard -› s2Member -› Download Options`
1720
*/
1721
for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
1722
{
@@ -1769,7 +1769,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1769
*
1770
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1771
*
1772
- * @see `Dashboard -› s2Member -› Download Options`
1773
*/
1774
for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
1775
{
@@ -1813,7 +1813,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1813
* @see s2Member\API_Constants\S2MEMBER_LEVELn_FILE_DOWNLOADS_ALLOWED
1814
* @see s2Member\API_Constants\S2MEMBER_LEVELn_FILE_DOWNLOADS_ALLOWED_DAYS
1815
*
1816
- * @see `Dashboard -› s2Member -› Download Options`
1817
*/
1818
if(!defined('S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS'))
1819
define ('S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_inline_extensions']));
@@ -1841,7 +1841,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1841
*
1842
* @see s2Member\API_Constants\S2MEMBER_REG_EMAIL_FROM_EMAIL
1843
*
1844
- * @see `Dashboard -› s2Member -› General Options`
1845
*/
1846
if(!defined('S2MEMBER_REG_EMAIL_FROM_NAME'))
1847
define ('S2MEMBER_REG_EMAIL_FROM_NAME', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_name']));
@@ -1869,7 +1869,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1869
*
1870
* @see s2Member\API_Constants\S2MEMBER_REG_EMAIL_FROM_NAME
1871
*
1872
- * @see `Dashboard -› s2Member -› General Options`
1873
*/
1874
if(!defined('S2MEMBER_REG_EMAIL_FROM_EMAIL'))
1875
define ('S2MEMBER_REG_EMAIL_FROM_EMAIL', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_email']));
@@ -1898,7 +1898,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1898
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_RETURN_URL
1899
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN
1900
*
1901
- * @see `Dashboard -› s2Member -› PayPal Options -› IPN Integration`
1902
*/
1903
if(!defined('S2MEMBER_PAYPAL_NOTIFY_URL'))
1904
define ('S2MEMBER_PAYPAL_NOTIFY_URL', ($c[] = (string)home_url('/?s2member_paypal_notify=1')));
@@ -1927,7 +1927,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1927
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_NOTIFY_URL
1928
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN
1929
*
1930
- * @see `Dashboard -› s2Member -› PayPal Options -› Auto-Return/PDT Integration`
1931
*/
1932
if(!defined('S2MEMBER_PAYPAL_RETURN_URL'))
1933
define ('S2MEMBER_PAYPAL_RETURN_URL', ($c[] = (string)home_url('/?s2member_paypal_return=1')));
@@ -1957,7 +1957,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1957
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_PASSWORD
1958
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_SIGNATURE
1959
*
1960
- * @see `Dashboard -› s2Member -› PayPal Options -› Account Details`
1961
*/
1962
if(!defined('S2MEMBER_PAYPAL_BUSINESS'))
1963
define ('S2MEMBER_PAYPAL_BUSINESS', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_business']));
@@ -1988,7 +1988,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
1988
*
1989
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_ENDPOINT
1990
*
1991
- * @see `Dashboard -› s2Member -› PayPal Options -› Account Details`
1992
*/
1993
if(!defined('S2MEMBER_PAYPAL_ENDPOINT'))
1994
define ('S2MEMBER_PAYPAL_ENDPOINT', ($c[] = (($GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_sandbox']) ? 'www.sandbox.paypal.com' : 'www.paypal.com')));
@@ -2019,7 +2019,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2019
*
2020
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_ENDPOINT
2021
*
2022
- * @see `Dashboard -› s2Member -› PayPal Options -› Account Details`
2023
*/
2024
if(!defined('S2MEMBER_PAYPAL_API_ENDPOINT'))
2025
define ('S2MEMBER_PAYPAL_API_ENDPOINT', ($c[] = (($GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_sandbox']) ? 'api-3t.sandbox.paypal.com' : 'api-3t.paypal.com')));
@@ -2048,7 +2048,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2048
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_PASSWORD
2049
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_SIGNATURE
2050
*
2051
- * @see `Dashboard -› s2Member -› PayPal Options -› Account Details`
2052
*/
2053
if(!defined('S2MEMBER_PAYPAL_API_USERNAME'))
2054
define ('S2MEMBER_PAYPAL_API_USERNAME', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_username']));
@@ -2077,7 +2077,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2077
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_USERNAME
2078
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_SIGNATURE
2079
*
2080
- * @see `Dashboard -› s2Member -› PayPal Options -› Account Details`
2081
*/
2082
if(!defined('S2MEMBER_PAYPAL_API_PASSWORD'))
2083
define ('S2MEMBER_PAYPAL_API_PASSWORD', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_password']));
@@ -2106,7 +2106,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2106
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_USERNAME
2107
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_PASSWORD
2108
*
2109
- * @see `Dashboard -› s2Member -› PayPal Options -› Account Details`
2110
*/
2111
if(!defined('S2MEMBER_PAYPAL_API_SIGNATURE'))
2112
define ('S2MEMBER_PAYPAL_API_SIGNATURE', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_signature']));
@@ -2134,7 +2134,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2134
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_RETURN_URL
2135
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_NOTIFY_URL
2136
*
2137
- * @see `Dashboard -› s2Member -› PayPal Options -› Auto-Return/PDT Integration`
2138
*/
2139
if(!defined('S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN'))
2140
define ('S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_identity_token']));
@@ -2146,7 +2146,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2146
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\s2member_value_for_pp_inv()} function should be used instead.
2147
*
2148
* Note. This API Constant is excluded from the ``$c[]`` hash calculation used in the generation of {@link s2Member\API_Constants\WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5}.
2149
- * It MUST be excluded, because the value of this particular API Constant will change too often *(i.e. it changes, depending on microtime)*.
2150
* So, when including this API Constant in the JavaScript API as a Global, care must be taken to build an Invoice, using JavaScript
2151
* to calculate the unique time-based code, with something like: `Math.round (new Date ().getTime ())`.
2152
*
@@ -2195,7 +2195,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2195
*
2196
* @see s2Member\API_Functions\s2member_value_for_pp_inv()
2197
*
2198
- * @see `Dashboard -› s2Member -› PayPal Buttons`
2199
*/
2200
if(!defined('S2MEMBER_VALUE_FOR_PP_INV'))
2201
define ('S2MEMBER_VALUE_FOR_PP_INV', uniqid().'~'.S2MEMBER_CURRENT_USER_IP);
@@ -2203,7 +2203,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2203
/**
2204
* PayPal value for Payment Buttons with input name: `on0`.
2205
*
2206
- * Used in PayPal Modification Buttons *(i.e. upgrades/downgrades)*.
2207
*
2208
* This auto-fills the `on0` value in PayPal Button Codes. If a Button Code is presented to a logged-in Member,
2209
* this will auto-fill the value for the `on0` input variable, with the string: "Referencing Customer ID".
@@ -2254,7 +2254,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2254
*
2255
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0
2256
*
2257
- * @see `Dashboard -› s2Member -› PayPal Buttons`
2258
*/
2259
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0'))
2260
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0', ($c[] = ((S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID) ? 'Referencing Customer ID' : 'Originating Domain')));
@@ -2262,7 +2262,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2262
/**
2263
* PayPal value for Payment Buttons with input name: `os0`.
2264
*
2265
- * Used in PayPal Modification Buttons *(i.e. upgrades/downgrades)*.
2266
*
2267
* This auto-fills the `os0` value in PayPal Button Codes. If a Button Code is presented to a logged-in Member,
2268
* this will auto-fill the value for the `os0` input variable, with the value of {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID}.
@@ -2313,7 +2313,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2313
*
2314
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0
2315
*
2316
- * @see `Dashboard -› s2Member -› PayPal Buttons`
2317
*/
2318
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0'))
2319
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0', ($c[] = ((S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID) ? S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID : (string)@$_SERVER['HTTP_HOST'])));
@@ -2369,7 +2369,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2369
*
2370
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1
2371
*
2372
- * @see `Dashboard -› s2Member -› PayPal Buttons`
2373
*/
2374
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1'))
2375
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1', ($c[] = 'Customer IP Address' /* Via $_SERVER['REMOTE_ADDR'] below. */));
@@ -2425,7 +2425,7 @@ if(!class_exists('c_ws_plugin__s2member_constants'))
2425
*
2426
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1
2427
*
2428
- * @see `Dashboard -› s2Member -› PayPal Buttons`
2429
*/
2430
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1'))
2431
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1', ($c[] = (string)@$_SERVER['REMOTE_ADDR']));
258
* The current User's Membership Access Label.
259
*
260
* As configured by the site owner. Each Membership Level is associated with a Membership Label
261
+ * *(i.e., Bronze, Silver, Gold, Platinum)*, or whatever the site owner has configured.
262
*
263
* An empty string if NOT logged-in.
264
*
1076
*
1077
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1078
*
1079
+ * @see `Dashboard s2Member Download Options`
1080
*/
1081
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED'))
1082
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED', ($c[] = (int)$file_downloads['allowed']));
1085
* Does the current User have access to unlimited File Downloads.
1086
*
1087
* A value of true means the current User's allowed downloads are >= `999999999`, and false means it is not.
1088
+ * This is useful if you are allowing unlimited ( i.e., `999999999+` ) Downloads on some Membership Levels.
1089
* You can display `Unlimited` instead of a numerical value.
1090
*
1091
* This will be false if NOT logged-in.
1131
*
1132
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1133
*
1134
+ * @see `Dashboard s2Member Download Options`
1135
*/
1136
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED'))
1137
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED', ($c[] = (($file_downloads['allowed'] >= 999999999) ? TRUE : FALSE)));
1177
*
1178
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1179
*
1180
+ * @see `Dashboard s2Member Download Options`
1181
*/
1182
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY'))
1183
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY', ($c[] = (int)$file_downloads['currently']));
1223
*
1224
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1225
*
1226
+ * @see `Dashboard s2Member Download Options`
1227
*/
1228
if(!defined('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS'))
1229
define ('S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS', ($c[] = (int)$file_downloads['allowed_days']));
1279
*
1280
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1281
*
1282
+ * @see `Dashboard s2Member Download Options`
1283
*/
1284
if(!defined('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_ID'))
1285
define ('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_ID', ($c[] = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_limit_exceeded_page']));
1320
*
1321
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1322
*
1323
+ * @see `Dashboard s2Member General Options Membership Options Page`
1324
*/
1325
if(!defined('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_ID'))
1326
define ('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_ID', ($c[] = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_options_page']));
1361
*
1362
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1363
*
1364
+ * @see `Dashboard s2Member General Options Login Welcome Page`
1365
*/
1366
if(!defined('S2MEMBER_LOGIN_WELCOME_PAGE_ID'))
1367
define ('S2MEMBER_LOGIN_WELCOME_PAGE_ID', ($c[] = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page']));
1369
/**
1370
* A URL, which leads to the Stand-Alone Profile Modification Page.
1371
*
1372
+ * This is always a reference to `/?s2member_profile=1` *(i.e., the Stand-Alone version)*.
1373
*
1374
* ———— Quick PHP Code Sample ————
1375
* ```
1401
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_ID
1402
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_URL
1403
*
1404
+ * @see `Dashboard s2Member General Options Profile Modifications`
1405
*/
1406
if(!defined('S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL'))
1407
define ('S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL', ($c[] = (string)home_url('/?s2member_profile=1')));
1457
*
1458
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1459
*
1460
+ * @see `Dashboard s2Member Download Options`
1461
*/
1462
if(!defined('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_URL'))
1463
define ('S2MEMBER_FILE_DOWNLOAD_LIMIT_EXCEEDED_PAGE_URL', ($c[] = (string)$links['file_download_limit_exceeded_page']));
1498
*
1499
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1500
*
1501
+ * @see `Dashboard s2Member General Options Membership Options Page`
1502
*/
1503
if(!defined('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_URL'))
1504
define ('S2MEMBER_MEMBERSHIP_OPTIONS_PAGE_URL', ($c[] = (string)$links['membership_options_page'])); // Signup page.
1539
*
1540
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL
1541
*
1542
+ * @see `Dashboard s2Member General Options Login Welcome Page`
1543
*/
1544
if(!defined('S2MEMBER_LOGIN_WELCOME_PAGE_URL'))
1545
define ('S2MEMBER_LOGIN_WELCOME_PAGE_URL', ($c[] = (($login_redirection_url) ? (string)$login_redirection_url : (string)$links['login_welcome_page'])));
1664
*
1665
* @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
1666
*
1667
+ * @see `Dashboard s2Member General Options Membership Level (Labels)`
1668
*/
1669
for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
1670
{
1716
*
1717
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1718
*
1719
+ * @see `Dashboard s2Member Download Options`
1720
*/
1721
for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
1722
{
1769
*
1770
* @see s2Member\API_Constants\S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS
1771
*
1772
+ * @see `Dashboard s2Member Download Options`
1773
*/
1774
for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
1775
{
1813
* @see s2Member\API_Constants\S2MEMBER_LEVELn_FILE_DOWNLOADS_ALLOWED
1814
* @see s2Member\API_Constants\S2MEMBER_LEVELn_FILE_DOWNLOADS_ALLOWED_DAYS
1815
*
1816
+ * @see `Dashboard s2Member Download Options`
1817
*/
1818
if(!defined('S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS'))
1819
define ('S2MEMBER_FILE_DOWNLOAD_INLINE_EXTENSIONS', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_inline_extensions']));
1841
*
1842
* @see s2Member\API_Constants\S2MEMBER_REG_EMAIL_FROM_EMAIL
1843
*
1844
+ * @see `Dashboard s2Member General Options`
1845
*/
1846
if(!defined('S2MEMBER_REG_EMAIL_FROM_NAME'))
1847
define ('S2MEMBER_REG_EMAIL_FROM_NAME', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_name']));
1869
*
1870
* @see s2Member\API_Constants\S2MEMBER_REG_EMAIL_FROM_NAME
1871
*
1872
+ * @see `Dashboard s2Member General Options`
1873
*/
1874
if(!defined('S2MEMBER_REG_EMAIL_FROM_EMAIL'))
1875
define ('S2MEMBER_REG_EMAIL_FROM_EMAIL', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_email']));
1898
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_RETURN_URL
1899
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN
1900
*
1901
+ * @see `Dashboard s2Member PayPal Options IPN Integration`
1902
*/
1903
if(!defined('S2MEMBER_PAYPAL_NOTIFY_URL'))
1904
define ('S2MEMBER_PAYPAL_NOTIFY_URL', ($c[] = (string)home_url('/?s2member_paypal_notify=1')));
1927
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_NOTIFY_URL
1928
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN
1929
*
1930
+ * @see `Dashboard s2Member PayPal Options Auto-Return/PDT Integration`
1931
*/
1932
if(!defined('S2MEMBER_PAYPAL_RETURN_URL'))
1933
define ('S2MEMBER_PAYPAL_RETURN_URL', ($c[] = (string)home_url('/?s2member_paypal_return=1')));
1957
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_PASSWORD
1958
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_SIGNATURE
1959
*
1960
+ * @see `Dashboard s2Member PayPal Options Account Details`
1961
*/
1962
if(!defined('S2MEMBER_PAYPAL_BUSINESS'))
1963
define ('S2MEMBER_PAYPAL_BUSINESS', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_business']));
1988
*
1989
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_ENDPOINT
1990
*
1991
+ * @see `Dashboard s2Member PayPal Options Account Details`
1992
*/
1993
if(!defined('S2MEMBER_PAYPAL_ENDPOINT'))
1994
define ('S2MEMBER_PAYPAL_ENDPOINT', ($c[] = (($GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_sandbox']) ? 'www.sandbox.paypal.com' : 'www.paypal.com')));
2019
*
2020
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_ENDPOINT
2021
*
2022
+ * @see `Dashboard s2Member PayPal Options Account Details`
2023
*/
2024
if(!defined('S2MEMBER_PAYPAL_API_ENDPOINT'))
2025
define ('S2MEMBER_PAYPAL_API_ENDPOINT', ($c[] = (($GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_sandbox']) ? 'api-3t.sandbox.paypal.com' : 'api-3t.paypal.com')));
2048
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_PASSWORD
2049
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_SIGNATURE
2050
*
2051
+ * @see `Dashboard s2Member PayPal Options Account Details`
2052
*/
2053
if(!defined('S2MEMBER_PAYPAL_API_USERNAME'))
2054
define ('S2MEMBER_PAYPAL_API_USERNAME', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_username']));
2077
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_USERNAME
2078
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_SIGNATURE
2079
*
2080
+ * @see `Dashboard s2Member PayPal Options Account Details`
2081
*/
2082
if(!defined('S2MEMBER_PAYPAL_API_PASSWORD'))
2083
define ('S2MEMBER_PAYPAL_API_PASSWORD', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_password']));
2106
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_USERNAME
2107
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_API_PASSWORD
2108
*
2109
+ * @see `Dashboard s2Member PayPal Options Account Details`
2110
*/
2111
if(!defined('S2MEMBER_PAYPAL_API_SIGNATURE'))
2112
define ('S2MEMBER_PAYPAL_API_SIGNATURE', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_signature']));
2134
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_RETURN_URL
2135
* @see s2Member\API_Constants\S2MEMBER_PAYPAL_NOTIFY_URL
2136
*
2137
+ * @see `Dashboard s2Member PayPal Options Auto-Return/PDT Integration`
2138
*/
2139
if(!defined('S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN'))
2140
define ('S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN', ($c[] = (string)$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_identity_token']));
2146
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\s2member_value_for_pp_inv()} function should be used instead.
2147
*
2148
* Note. This API Constant is excluded from the ``$c[]`` hash calculation used in the generation of {@link s2Member\API_Constants\WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5}.
2149
+ * It MUST be excluded, because the value of this particular API Constant will change too often *(i.e., it changes, depending on microtime)*.
2150
* So, when including this API Constant in the JavaScript API as a Global, care must be taken to build an Invoice, using JavaScript
2151
* to calculate the unique time-based code, with something like: `Math.round (new Date ().getTime ())`.
2152
*
2195
*
2196
* @see s2Member\API_Functions\s2member_value_for_pp_inv()
2197
*
2198
+ * @see `Dashboard s2Member PayPal Buttons`
2199
*/
2200
if(!defined('S2MEMBER_VALUE_FOR_PP_INV'))
2201
define ('S2MEMBER_VALUE_FOR_PP_INV', uniqid().'~'.S2MEMBER_CURRENT_USER_IP);
2203
/**
2204
* PayPal value for Payment Buttons with input name: `on0`.
2205
*
2206
+ * Used in PayPal Modification Buttons *(i.e., upgrades/downgrades)*.
2207
*
2208
* This auto-fills the `on0` value in PayPal Button Codes. If a Button Code is presented to a logged-in Member,
2209
* this will auto-fill the value for the `on0` input variable, with the string: "Referencing Customer ID".
2254
*
2255
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0
2256
*
2257
+ * @see `Dashboard s2Member PayPal Buttons`
2258
*/
2259
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0'))
2260
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0', ($c[] = ((S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID) ? 'Referencing Customer ID' : 'Originating Domain')));
2262
/**
2263
* PayPal value for Payment Buttons with input name: `os0`.
2264
*
2265
+ * Used in PayPal Modification Buttons *(i.e., upgrades/downgrades)*.
2266
*
2267
* This auto-fills the `os0` value in PayPal Button Codes. If a Button Code is presented to a logged-in Member,
2268
* this will auto-fill the value for the `os0` input variable, with the value of {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID}.
2313
*
2314
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0
2315
*
2316
+ * @see `Dashboard s2Member PayPal Buttons`
2317
*/
2318
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0'))
2319
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0', ($c[] = ((S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID) ? S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID : (string)@$_SERVER['HTTP_HOST'])));
2369
*
2370
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1
2371
*
2372
+ * @see `Dashboard s2Member PayPal Buttons`
2373
*/
2374
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1'))
2375
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1', ($c[] = 'Customer IP Address' /* Via $_SERVER['REMOTE_ADDR'] below. */));
2425
*
2426
* @see s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1
2427
*
2428
+ * @see `Dashboard s2Member PayPal Buttons`
2429
*/
2430
if(!defined('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1'))
2431
define ('S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1', ($c[] = (string)@$_SERVER['REMOTE_ADDR']));
includes/classes/files-in.inc.php CHANGED
@@ -141,7 +141,7 @@ if(!class_exists('c_ws_plugin__s2member_files_in'))
141
status_header(503);
142
header('Content-Type: text/html; charset=UTF-8');
143
while(@ob_end_clean()) ; // Clean any existing output buffers.
144
- exit(_x('<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <code>s2Member -› General Options -› Membership Options Page</code>.', 's2member-front', 's2member'));
145
}
146
return FALSE; // Else return false.
147
}
@@ -152,7 +152,7 @@ if(!class_exists('c_ws_plugin__s2member_files_in'))
152
status_header(503);
153
header('Content-Type: text/html; charset=UTF-8');
154
while(@ob_end_clean()) ; // Clean any existing output buffers.
155
- exit(_x('<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <code>s2Member -› Download Options -› Basic Download Restrictions</code>.', 's2member-front', 's2member'));
156
}
157
return FALSE; // Else return false.
158
}
@@ -510,7 +510,7 @@ if(!class_exists('c_ws_plugin__s2member_files_in'))
510
*
511
* @param array $config Required. This is an array of configuration options associated with permissions being checked against the current User/Member; and also the actual URL generated by this routine.
512
* Possible ``$config`` array elements: `file_download` *(required)*, `file_download_key`, `file_stream`, `file_inline`, `file_storage`, `file_remote`, `file_ssl`, `file_rewrite`, `file_rewrite_base`, `skip_confirmation`, `url_to_storage_source`, `count_against_user`, `check_user`.
513
- * @param bool $get_streamer_array Optional. Defaults to `false`. If `true`, this function will return an array with the following elements: `streamer`, `file`, `url`. For further details, please review this section in your Dashboard: `s2Member -› Download Options -› JW Player & RTMP Protocol Examples`.
514
*
515
* @return string A File Download URL string on success; or an array on success, with elements `streamer`, `file`, `url` when/if ``$get_streamer_array`` is true; else false on any type of failure.
516
*
@@ -684,10 +684,10 @@ if(!class_exists('c_ws_plugin__s2member_files_in'))
684
* @package s2Member\Files
685
* @since 150108
686
*
687
- * @param string $s3_date The date header; e.g. `YYYYMMDD'T'HHMMSS'Z'`.
688
- * @param string $s3_domain The API endpoint domain; e.g. `[bucket].s3.amazonaws.com`.
689
- * @param string $s3_location The API endpoint URI; e.g. `/?acl`.
690
- * @param string $s3_method The request method; e.g. `GET`, `PUT`, `POST`, etc.
691
* @param array $s3_headers An associative array of all headers.
692
* @param string $s3_body Any input data sent with the request.
693
* @param boolean $sig_only Return signature only?
141
status_header(503);
142
header('Content-Type: text/html; charset=UTF-8');
143
while(@ob_end_clean()) ; // Clean any existing output buffers.
144
+ exit(_x('<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <strong>s2Member General Options Membership Options Page</strong>.', 's2member-front', 's2member'));
145
}
146
return FALSE; // Else return false.
147
}
152
status_header(503);
153
header('Content-Type: text/html; charset=UTF-8');
154
while(@ob_end_clean()) ; // Clean any existing output buffers.
155
+ exit(_x('<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <strong>s2Member Download Options Basic Download Restrictions</strong>.', 's2member-front', 's2member'));
156
}
157
return FALSE; // Else return false.
158
}
510
*
511
* @param array $config Required. This is an array of configuration options associated with permissions being checked against the current User/Member; and also the actual URL generated by this routine.
512
* Possible ``$config`` array elements: `file_download` *(required)*, `file_download_key`, `file_stream`, `file_inline`, `file_storage`, `file_remote`, `file_ssl`, `file_rewrite`, `file_rewrite_base`, `skip_confirmation`, `url_to_storage_source`, `count_against_user`, `check_user`.
513
+ * @param bool $get_streamer_array Optional. Defaults to `false`. If `true`, this function will return an array with the following elements: `streamer`, `file`, `url`. For further details, please review this section in your Dashboard: `s2Member Download Options JW Player & RTMP Protocol Examples`.
514
*
515
* @return string A File Download URL string on success; or an array on success, with elements `streamer`, `file`, `url` when/if ``$get_streamer_array`` is true; else false on any type of failure.
516
*
684
* @package s2Member\Files
685
* @since 150108
686
*
687
+ * @param string $s3_date The date header; e.g., `YYYYMMDD'T'HHMMSS'Z'`.
688
+ * @param string $s3_domain The API endpoint domain; e.g., `[bucket].s3.amazonaws.com`.
689
+ * @param string $s3_location The API endpoint URI; e.g., `/?acl`.
690
+ * @param string $s3_method The request method; e.g., `GET`, `PUT`, `POST`, etc.
691
* @param array $s3_headers An associative array of all headers.
692
* @param string $s3_body Any input data sent with the request.
693
* @param boolean $sig_only Return signature only?
includes/classes/files.inc.php CHANGED
@@ -57,7 +57,7 @@ if(!class_exists('c_ws_plugin__s2member_files'))
57
*
58
* @param array $config Required. This is an array of configuration options associated with permissions being checked against the current User/Member; and also the actual URL generated by this routine.
59
* Possible ``$config`` array elements: `file_download` *(required)*, `file_download_key`, `file_stream`, `file_inline`, `file_storage`, `file_remote`, `file_ssl`, `file_rewrite`, `file_rewrite_base`, `skip_confirmation`, `url_to_storage_source`, `count_against_user`, `check_user`.
60
- * @param bool $get_streamer_array Optional. Defaults to `false`. If `true`, this function will return an array with the following elements: `streamer`, `file`, `url`. For further details, please review this section in your Dashboard: `s2Member -› Download Options -› JW Player & RTMP Protocol Examples`.
61
*
62
* @return string A File Download URL string on success; or an array on success, with elements `streamer`, `file`, `url` when/if ``$get_streamer_array`` is true; else false on any type of failure.
63
*
@@ -149,7 +149,7 @@ if(!class_exists('c_ws_plugin__s2member_files'))
149
* @since 3.5
150
*
151
* @param string $file Location of your protected file, relative to the `/s2member-files/` directory.
152
- * In other words, just the name of the file *(i.e. `file.zip` )*.
153
* @param string $directive Optional. One of `ip-forever|universal|cache-compatible`.
154
* `ip-forever` = a Download Key that never expires, tied only to a specific file and IP address.
155
* `universal` and/or `cache-compatible` = a Download Key which never expires, and is NOT tied to any specific User. Use at your own risk.
@@ -187,8 +187,8 @@ if(!class_exists('c_ws_plugin__s2member_files'))
187
* @param object $user Optional. A `WP_User` object. Defaults to the current User's object.
188
* @param string $not_counting_this_particular_file Optional. If you want to exclude a particular file,
189
* relative to the `/s2member-files/` directory, or relative to the root of your Amazon S3 Bucket *(when applicable)*.
190
- * @param array $user_log Optional. Prevents another database connection *(i.e. the User's log does not need to be pulled again)*.
191
- * @param array $user_arc Optional. Prevents another database connection *(i.e. the User's archive does not need to be pulled again)*.
192
*
193
* @return array An array with the following elements... File Downloads allowed for this User: (int)`allowed`, Download Period for this User in days: (int)`allowed_days`, Files downloaded by this User in the current Period: (int)`currently`, log of all Files downloaded in the current Period, with file names/dates: (array)`log`, archive of all Files downloaded in prior Periods, with file names/dates: (array)`archive`.
194
*
@@ -301,7 +301,7 @@ if(!class_exists('c_ws_plugin__s2member_files'))
301
foreach($la_entries as $la_entry /* Go through all of the entries in each result ``$r``; collecting `counter` values. */)
302
if(!empty($la_entry['file']) && $la_entry['file'] === $file && (!empty($la_entry['counter']) || ($la_entry['counter'] = 1)))
303
{
304
- $total = (!empty($total)) ? $total + 1 : 1; // Only count `1` here (i.e. unique downloads).
305
break; // Break now. No need to continue looping; ``$file`` found in these entries.
306
}
307
}
57
*
58
* @param array $config Required. This is an array of configuration options associated with permissions being checked against the current User/Member; and also the actual URL generated by this routine.
59
* Possible ``$config`` array elements: `file_download` *(required)*, `file_download_key`, `file_stream`, `file_inline`, `file_storage`, `file_remote`, `file_ssl`, `file_rewrite`, `file_rewrite_base`, `skip_confirmation`, `url_to_storage_source`, `count_against_user`, `check_user`.
60
+ * @param bool $get_streamer_array Optional. Defaults to `false`. If `true`, this function will return an array with the following elements: `streamer`, `file`, `url`. For further details, please review this section in your Dashboard: `s2Member Download Options JW Player & RTMP Protocol Examples`.
61
*
62
* @return string A File Download URL string on success; or an array on success, with elements `streamer`, `file`, `url` when/if ``$get_streamer_array`` is true; else false on any type of failure.
63
*
149
* @since 3.5
150
*
151
* @param string $file Location of your protected file, relative to the `/s2member-files/` directory.
152
+ * In other words, just the name of the file *(i.e., `file.zip` )*.
153
* @param string $directive Optional. One of `ip-forever|universal|cache-compatible`.
154
* `ip-forever` = a Download Key that never expires, tied only to a specific file and IP address.
155
* `universal` and/or `cache-compatible` = a Download Key which never expires, and is NOT tied to any specific User. Use at your own risk.
187
* @param object $user Optional. A `WP_User` object. Defaults to the current User's object.
188
* @param string $not_counting_this_particular_file Optional. If you want to exclude a particular file,
189
* relative to the `/s2member-files/` directory, or relative to the root of your Amazon S3 Bucket *(when applicable)*.
190
+ * @param array $user_log Optional. Prevents another database connection *(i.e., the User's log does not need to be pulled again)*.
191
+ * @param array $user_arc Optional. Prevents another database connection *(i.e., the User's archive does not need to be pulled again)*.
192
*
193
* @return array An array with the following elements... File Downloads allowed for this User: (int)`allowed`, Download Period for this User in days: (int)`allowed_days`, Files downloaded by this User in the current Period: (int)`currently`, log of all Files downloaded in the current Period, with file names/dates: (array)`log`, archive of all Files downloaded in prior Periods, with file names/dates: (array)`archive`.
194
*
301
foreach($la_entries as $la_entry /* Go through all of the entries in each result ``$r``; collecting `counter` values. */)
302
if(!empty($la_entry['file']) && $la_entry['file'] === $file && (!empty($la_entry['counter']) || ($la_entry['counter'] = 1)))
303
{
304
+ $total = (!empty($total)) ? $total + 1 : 1; // Only count `1` here (i.e., unique downloads).
305
break; // Break now. No need to continue looping; ``$file`` found in these entries.
306
}
307
}
includes/classes/getresponse.inc.php CHANGED
@@ -92,7 +92,7 @@ if(!class_exists('c_ws_plugin__s2member_getresponse'))
92
$_gr['api_success'] = $success = TRUE; // Flag this as `TRUE`; assists with return value below.
93
}
94
}
95
- else // Create a new contact; i.e. they do not exist yet.
96
{
97
$_gr['api_method'] = 'add_contact'; // Add new contact.
98
$_gr['api_headers'] = array('Content-Type' => 'application/json');
92
$_gr['api_success'] = $success = TRUE; // Flag this as `TRUE`; assists with return value below.
93
}
94
}
95
+ else // Create a new contact; i.e., they do not exist yet.
96
{
97
$_gr['api_method'] = 'add_contact'; // Add new contact.
98
$_gr['api_headers'] = array('Content-Type' => 'application/json');
includes/classes/installation.inc.php CHANGED
@@ -92,17 +92,17 @@ if(!class_exists('c_ws_plugin__s2member_installation'))
92
if(!$v || !version_compare($v, '110912', '>=') && $GLOBALS['WS_PLUGIN__']['s2member']['o']['filter_wp_query'] === array('all'))
93
// s2Member v110912 changed the way the 'all' option for Alternative Views was handled.
94
{
95
- $notice = '<strong>IMPORTANT:</strong> This version of s2Member changes the way your <code>Alternative View Protections</code> work. Please review your options under: <code>s2Member -› Restriction Options -› Alternative View Protections</code>.';
96
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
97
}
98
if($v && version_compare($v, '130316', '<=')) // This version disables logging by default.
99
{
100
c_ws_plugin__s2member_menu_pages::update_all_options(array('ws_plugin__s2member_gateway_debug_logs' => '0', 'ws_plugin__s2member_gateway_debug_logs_extensive' => '0'), TRUE, FALSE, FALSE, FALSE, FALSE);
101
102
- $notice = '<strong>IMPORTANT:</strong> This version of s2Member disables s2Member\'s debug logging by default (for added security). Please see: <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-logs')).'">s2Member -› Log Files (Debug) -› Configuration</a> for further details.';
103
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
104
105
- $notice = '<strong>IMPORTANT / Regarding s2Member Security Badges:</strong> If debug logging is enabled, your site will no longer qualify for an s2Member Security Badge until you disable logging (and you MUST also download, and then delete any existing log files from the past). Please see KB Article: <a href="http://www.s2member.com/kb/security-badges/" target="_blank" rel="external">s2Member Security Badges</a> for further details. If you have existing s2Member log files, you will need to delete those files from the server before your s2Member Security Badge can be re-enabled. s2Member stores log files here: <code>'.esc_html(c_ws_plugin__s2member_utils_dirs::doc_root_path($GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'])).'</code>. See also: <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-logs')).'">s2Member -› Log Files (Debug) -› Configuration</a> for further details.';
106
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
107
}
108
if($v && version_compare($v, '140128', '<=')) // This version introduces support for partial refunds.
@@ -114,7 +114,7 @@ if(!class_exists('c_ws_plugin__s2member_installation'))
114
$notice .= 'You now have version '.esc_html(WS_PLUGIN__S2MEMBER_VERSION).'. Your existing configuration remains.';
115
116
if(!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) // No Changelog on a Multisite Blog Farm.
117
- $notice .= '<br />Have fun, <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-info#rm-changelog')).'">read the Changelog</a>, and make some money! :-)';
118
119
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
120
}
@@ -136,7 +136,7 @@ if(!class_exists('c_ws_plugin__s2member_installation'))
136
$notice = '<strong>Multisite Network</strong> updated automatically by <strong>s2Member</strong> v'.esc_html(WS_PLUGIN__S2MEMBER_VERSION).'.<br />';
137
$notice .= 'You\'ll want to configure s2Member\'s Multisite options now.<br />';
138
$notice .= 'In the Dashboard for your Main Site, see:<br />';
139
- $notice .= '<code>s2Member -› Multisite (Config)</code>.';
140
141
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
142
92
if(!$v || !version_compare($v, '110912', '>=') && $GLOBALS['WS_PLUGIN__']['s2member']['o']['filter_wp_query'] === array('all'))
93
// s2Member v110912 changed the way the 'all' option for Alternative Views was handled.
94
{
95
+ $notice = '<strong>IMPORTANT:</strong> This version of s2Member changes the way your <code>Alternative View Protections</code> work. Please review your options under: <strong>s2Member Restriction Options Alternative View Protections</strong>.';
96
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
97
}
98
if($v && version_compare($v, '130316', '<=')) // This version disables logging by default.
99
{
100
c_ws_plugin__s2member_menu_pages::update_all_options(array('ws_plugin__s2member_gateway_debug_logs' => '0', 'ws_plugin__s2member_gateway_debug_logs_extensive' => '0'), TRUE, FALSE, FALSE, FALSE, FALSE);
101
102
+ $notice = '<strong>IMPORTANT:</strong> This version of s2Member disables s2Member\'s debug logging by default (for added security). Please see: <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-logs')).'">s2Member Log Files (Debug) Configuration</a> for further details.';
103
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
104
105
+ $notice = '<strong>IMPORTANT / Regarding s2Member Security Badges:</strong> If debug logging is enabled, your site will no longer qualify for an s2Member Security Badge until you disable logging (and you must also download, and then delete any existing log files from the past). Please see KB Article: <a href="http://www.s2member.com/kb/security-badges/" target="_blank" rel="external">s2Member Security Badges</a> for further details. If you have existing s2Member log files, you will need to delete those files from the server before your s2Member Security Badge can be re-enabled. s2Member stores log files here: <code>'.esc_html(c_ws_plugin__s2member_utils_dirs::doc_root_path($GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'])).'</code>. See also: <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-logs')).'">s2Member Log Files (Debug) Configuration</a> for further details.';
106
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
107
}
108
if($v && version_compare($v, '140128', '<=')) // This version introduces support for partial refunds.
114
$notice .= 'You now have version '.esc_html(WS_PLUGIN__S2MEMBER_VERSION).'. Your existing configuration remains.';
115
116
if(!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) // No Changelog on a Multisite Blog Farm.
117
+ $notice .= '<br />Have fun, <a href="'.esc_attr(c_ws_plugin__s2member_readmes::parse_readme_value('Changelog URI')).'" target="_blank">read the Changelog</a>, and make some money! :-)';
118
119
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
120
}
136
$notice = '<strong>Multisite Network</strong> updated automatically by <strong>s2Member</strong> v'.esc_html(WS_PLUGIN__S2MEMBER_VERSION).'.<br />';
137
$notice .= 'You\'ll want to configure s2Member\'s Multisite options now.<br />';
138
$notice .= 'In the Dashboard for your Main Site, see:<br />';
139
+ $notice .= '<strong>s2Member Multisite (Config)</strong>.';
140
141
c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, array('blog|network:plugins.php', 'blog|network:ws-plugin--s2member-start', 'blog|network:ws-plugin--s2member-mms-ops', 'blog|network:ws-plugin--s2member-gen-ops', 'blog|network:ws-plugin--s2member-res-ops'));
142
includes/classes/list-servers.inc.php CHANGED
@@ -83,7 +83,7 @@ if(!class_exists('c_ws_plugin__s2member_list_servers'))
83
*
84
* @param bool $opt_in Defaults to `FALSE`; must be set to `TRUE`.
85
* @param bool $double_opt_in Defaults to `TRUE`. Use at your own risk.
86
- * @param bool $clean_user_cache Defaults to `TRUE`; i.e. we start from a fresh copy of the current user.
87
*
88
* @return bool True if at least one list server is processed successfully.
89
*/
@@ -166,7 +166,7 @@ if(!class_exists('c_ws_plugin__s2member_list_servers'))
166
* @package s2Member\List_Servers
167
*
168
* @param bool $opt_out Defaults to `FALSE`; must be set to `TRUE`.
169
- * @param bool $clean_user_cache Defaults to `TRUE`; i.e. we start from a fresh copy of the current user.
170
*
171
* @return bool True if at least one list server removal is processed successfully.
172
*/
83
*
84
* @param bool $opt_in Defaults to `FALSE`; must be set to `TRUE`.
85
* @param bool $double_opt_in Defaults to `TRUE`. Use at your own risk.
86
+ * @param bool $clean_user_cache Defaults to `TRUE`; i.e., we start from a fresh copy of the current user.
87
*
88
* @return bool True if at least one list server is processed successfully.
89
*/
166
* @package s2Member\List_Servers
167
*
168
* @param bool $opt_out Defaults to `FALSE`; must be set to `TRUE`.
169
+ * @param bool $clean_user_cache Defaults to `TRUE`; i.e., we start from a fresh copy of the current user.
170
*
171
* @return bool True if at least one list server removal is processed successfully.
172
*/
includes/classes/login-checks.inc.php CHANGED
@@ -140,7 +140,7 @@ if(!class_exists('c_ws_plugin__s2member_login_checks'))
140
* @package s2Member\Login_Checks
141
* @since 131025
142
*
143
- * @param string $username Expects a username (e.g. a `user_login` value).
144
*
145
* @return integer Current number of simultaneous logins.
146
*/
@@ -156,7 +156,7 @@ if(!class_exists('c_ws_plugin__s2member_login_checks'))
156
$transient_entries = $prefix.md5('s2member_simultaneous_login_entries_for_'.strtolower((string)$username));
157
158
$timeout = $GLOBALS['WS_PLUGIN__']['s2member']['o']['max_simultaneous_logins_timeout'];
159
- $timeout_ago = strtotime('-'.$timeout); // e.g. 30 minutes ago.
160
161
$entries = (is_array($entries = get_transient($transient_entries))) ? $entries : array();
162
foreach($entries as $_entry => $_time /* Auto-expire entries, based on time. */)
@@ -173,7 +173,7 @@ if(!class_exists('c_ws_plugin__s2member_login_checks'))
173
*
174
* @attaches-to ``add_action('wp_login');``
175
*
176
- * @param string $username Expects a username (e.g. a `user_login` value).
177
* @param WP_User|null $user When fired against `wp_login` this receives a WP_User object also.
178
* @param string $action Default action is to increment the counter. This can be set to `decrement` or NULL to do nothing.
179
*/
@@ -189,7 +189,7 @@ if(!class_exists('c_ws_plugin__s2member_login_checks'))
189
$transient_entries = $prefix.md5('s2member_simultaneous_login_entries_for_'.strtolower((string)$username));
190
191
$timeout = $GLOBALS['WS_PLUGIN__']['s2member']['o']['max_simultaneous_logins_timeout'];
192
- $timeout_ago = strtotime('-'.$timeout); // e.g. 30 minutes ago.
193
194
$entries = (is_array($entries = get_transient($transient_entries))) ? $entries : array();
195
foreach($entries as $_entry => $_time /* Auto-expire entries, based on time. */)
140
* @package s2Member\Login_Checks
141
* @since 131025
142
*
143
+ * @param string $username Expects a username (e.g., a `user_login` value).
144
*
145
* @return integer Current number of simultaneous logins.
146
*/
156
$transient_entries = $prefix.md5('s2member_simultaneous_login_entries_for_'.strtolower((string)$username));
157
158
$timeout = $GLOBALS['WS_PLUGIN__']['s2member']['o']['max_simultaneous_logins_timeout'];
159
+ $timeout_ago = strtotime('-'.$timeout); // e.g., 30 minutes ago.
160
161
$entries = (is_array($entries = get_transient($transient_entries))) ? $entries : array();
162
foreach($entries as $_entry => $_time /* Auto-expire entries, based on time. */)
173
*
174
* @attaches-to ``add_action('wp_login');``
175
*
176
+ * @param string $username Expects a username (e.g., a `user_login` value).
177
* @param WP_User|null $user When fired against `wp_login` this receives a WP_User object also.
178
* @param string $action Default action is to increment the counter. This can be set to `decrement` or NULL to do nothing.
179
*/
189
$transient_entries = $prefix.md5('s2member_simultaneous_login_entries_for_'.strtolower((string)$username));
190
191
$timeout = $GLOBALS['WS_PLUGIN__']['s2member']['o']['max_simultaneous_logins_timeout'];
192
+ $timeout_ago = strtotime('-'.$timeout); // e.g., 30 minutes ago.
193
194
$entries = (is_array($entries = get_transient($transient_entries))) ? $entries : array();
195
foreach($entries as $_entry => $_time /* Auto-expire entries, based on time. */)
includes/classes/login-customizations.inc.php CHANGED
@@ -76,7 +76,7 @@ if(!class_exists('c_ws_plugin__s2member_login_customizations'))
76
}
77
78
/**
79
- * Styles login/registration *( i.e. `/wp-login.php` )*.
80
*
81
* @package s2Member\Login_Customizations
82
* @since 3.5
76
}
77
78
/**
79
+ * Styles login/registration *( i.e., `/wp-login.php` )*.
80
*
81
* @package s2Member\Login_Customizations
82
* @since 3.5
includes/classes/login-redirects.inc.php CHANGED
@@ -209,10 +209,10 @@ if(!class_exists('c_ws_plugin__s2member_login_redirects'))
209
$url = preg_replace('/%%current_user_logins%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_logins)), $url);
210
211
if($url !== $orig_url && (!($parse = c_ws_plugin__s2member_utils_urls::parse_url($url, -1, FALSE)) || (!empty($parse['path']) && strpos($parse['path'], '//') !== FALSE)))
212
- $url = home_url('/'); // Defaults to Home Page. We don't return invalid URLs produced by empty Replacement Codes ( i.e. with `//` ).
213
214
if($root_returns_false && c_ws_plugin__s2member_utils_conds::is_site_root($url)) // Used by s2Member's security gate.
215
- $url = FALSE; // In case we need to return false on root URLs (i.e. don't protect the Home Page inadvertently).
216
217
return apply_filters('ws_plugin__s2member_fill_login_redirect_rc_vars', $url, get_defined_vars());
218
}
209
$url = preg_replace('/%%current_user_logins%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_logins)), $url);
210
211
if($url !== $orig_url && (!($parse = c_ws_plugin__s2member_utils_urls::parse_url($url, -1, FALSE)) || (!empty($parse['path']) && strpos($parse['path'], '//') !== FALSE)))
212
+ $url = home_url('/'); // Defaults to Home Page. We don't return invalid URLs produced by empty Replacement Codes ( i.e., with `//` ).
213
214
if($root_returns_false && c_ws_plugin__s2member_utils_conds::is_site_root($url)) // Used by s2Member's security gate.
215
+ $url = FALSE; // In case we need to return false on root URLs (i.e., don't protect the Home Page inadvertently).
216
217
return apply_filters('ws_plugin__s2member_fill_login_redirect_rc_vars', $url, get_defined_vars());
218
}
includes/classes/mailchimp-o.inc.php CHANGED
@@ -105,7 +105,7 @@ if(!class_exists('c_ws_plugin__s2member_mailchimp_o'))
105
106
if($_mc['api_response'] = $mc_api->{$_mc['api_method']}($_mc['list_id'], $args->email, // See: `http://apidocs.mailchimp.com/` for full details.
107
($_mc['api_merge_array'] = apply_filters('ws_plugin__s2member_mailchimp_merge_array', $_mc['merge_array'], get_defined_vars())), // Configured merge array above.
108
- ($_mc['api_email_type'] = apply_filters('ws_plugin__s2member_mailchimp_email_type', 'html', get_defined_vars())), // Type of email to receive (i.e. html,text,mobile).
109
($_mc['api_double_optin'] = apply_filters('ws_plugin__s2member_mailchimp_double_optin', $args->double_opt_in, get_defined_vars())), // Abuse of this may cause account suspension.
110
($_mc['api_update_existing'] = apply_filters('ws_plugin__s2member_mailchimp_update_existing', TRUE, get_defined_vars())), // Existing subscribers should be updated with this?
111
($_mc['api_replace_interests'] = apply_filters('ws_plugin__s2member_mailchimp_replace_interests', TRUE, get_defined_vars())), // Replace interest groups? (only if provided).
105
106
if($_mc['api_response'] = $mc_api->{$_mc['api_method']}($_mc['list_id'], $args->email, // See: `http://apidocs.mailchimp.com/` for full details.
107
($_mc['api_merge_array'] = apply_filters('ws_plugin__s2member_mailchimp_merge_array', $_mc['merge_array'], get_defined_vars())), // Configured merge array above.
108
+ ($_mc['api_email_type'] = apply_filters('ws_plugin__s2member_mailchimp_email_type', 'html', get_defined_vars())), // Type of email to receive (i.e., html,text,mobile).
109
($_mc['api_double_optin'] = apply_filters('ws_plugin__s2member_mailchimp_double_optin', $args->double_opt_in, get_defined_vars())), // Abuse of this may cause account suspension.
110
($_mc['api_update_existing'] = apply_filters('ws_plugin__s2member_mailchimp_update_existing', TRUE, get_defined_vars())), // Existing subscribers should be updated with this?
111
($_mc['api_replace_interests'] = apply_filters('ws_plugin__s2member_mailchimp_replace_interests', TRUE, get_defined_vars())), // Replace interest groups? (only if provided).
includes/classes/mailchimp.inc.php CHANGED
@@ -107,7 +107,7 @@ if(!class_exists('c_ws_plugin__s2member_mailchimp'))
107
{
108
if(($_mc['api_response'] = $mc_api->lists->subscribe($_mc['list_id'], array('email' => $args->email), // See: `http://apidocs.mailchimp.com/` for full details.
109
($_mc['api_merge_array'] = apply_filters('ws_plugin__s2member_mailchimp_merge_array', $_mc['merge_array'], get_defined_vars())), // Configured merge array above.
110
- ($_mc['api_email_type'] = apply_filters('ws_plugin__s2member_mailchimp_email_type', 'html', get_defined_vars())), // Type of email to receive (i.e. html,text,mobile).
111
($_mc['api_double_optin'] = apply_filters('ws_plugin__s2member_mailchimp_double_optin', $args->double_opt_in, get_defined_vars())), // Abuse of this may cause account suspension.
112
($_mc['api_update_existing'] = apply_filters('ws_plugin__s2member_mailchimp_update_existing', TRUE, get_defined_vars())), // Existing subscribers should be updated with this?
113
($_mc['api_replace_interests'] = apply_filters('ws_plugin__s2member_mailchimp_replace_interests', TRUE, get_defined_vars())), // Replace interest groups? (only if provided).
107
{
108
if(($_mc['api_response'] = $mc_api->lists->subscribe($_mc['list_id'], array('email' => $args->email), // See: `http://apidocs.mailchimp.com/` for full details.
109
($_mc['api_merge_array'] = apply_filters('ws_plugin__s2member_mailchimp_merge_array', $_mc['merge_array'], get_defined_vars())), // Configured merge array above.
110
+ ($_mc['api_email_type'] = apply_filters('ws_plugin__s2member_mailchimp_email_type', 'html', get_defined_vars())), // Type of email to receive (i.e., html,text,mobile).
111
($_mc['api_double_optin'] = apply_filters('ws_plugin__s2member_mailchimp_double_optin', $args->double_opt_in, get_defined_vars())), // Abuse of this may cause account suspension.
112
($_mc['api_update_existing'] = apply_filters('ws_plugin__s2member_mailchimp_update_existing', TRUE, get_defined_vars())), // Existing subscribers should be updated with this?
113
($_mc['api_replace_interests'] = apply_filters('ws_plugin__s2member_mailchimp_replace_interests', TRUE, get_defined_vars())), // Replace interest groups? (only if provided).
includes/classes/menu-pages-rs.inc.php CHANGED
@@ -50,7 +50,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_pages_rs"))
50
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"])
51
{
52
echo '<div class="ws-menu-page-others">' . "\n";
53
- echo '<a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a>' . "\n";
54
echo '</div>' . "\n";
55
}
56
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"])
50
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"])
51
{
52
echo '<div class="ws-menu-page-others">' . "\n";
53
+ echo '<a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Add-on / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a>' . "\n";
54
echo '</div>' . "\n";
55
}
56
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"])
includes/classes/menu-pages-tb.inc.php CHANGED
@@ -47,7 +47,7 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages_tb'))
47
}
48
if($GLOBALS['WS_PLUGIN__']['s2member']['c']['menu_pages']['upsell-pro'])
49
{
50
- echo '<a href="'.esc_attr(c_ws_plugin__s2member_readmes::parse_readme_value('Pro Module / Prices')).'" target="_blank" style="font-size:120%; font-weight:bold;"><i class="fa fa-money"></i> s2Member® Pro (Upgrade)</a>'."\n";
51
}
52
if($GLOBALS['WS_PLUGIN__']['s2member']['c']['menu_pages']['installation'])
53
{
47
}
48
if($GLOBALS['WS_PLUGIN__']['s2member']['c']['menu_pages']['upsell-pro'])
49
{
50
+ echo '<a href="'.esc_attr(c_ws_plugin__s2member_readmes::parse_readme_value('Pro Add-on / Prices')).'" target="_blank" style="font-size:120%; font-weight:bold;"><i class="fa fa-money"></i> s2Member® Pro (Upgrade)</a>'."\n";
51
}
52
if($GLOBALS['WS_PLUGIN__']['s2member']['c']['menu_pages']['installation'])
53
{
includes/classes/menu-pages.inc.php CHANGED
@@ -96,25 +96,25 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
96
97
if(empty($_GET['page']) || $_GET['page'] !== 'ws-plugin--s2member-mms-ops') // Do NOT display page-conflict-warnings on the Main Multisite Configuration panel.
98
{
99
- if(!$options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>NOTE:</strong> s2Member security restrictions will NOT be enforced until you\'ve configured a Membership Options Page. See: <code>s2Member -› General Options -› Membership Options Page</code>.'))
100
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
101
102
- if($options['login_welcome_page'] && $options['login_welcome_page'] === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Login Welcome Page is the same as your Membership Options Page. Please correct this. See: <code>s2Member -› General Options -› Login Welcome Page</code>.'))
103
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
104
105
- if($options['membership_options_page'] && (string)get_option('page_on_front') === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Membership Options Page is currently configured as your Home Page (i.e. static page) for WordPress. This causes internal conflicts with s2Member. Your Membership Options Page MUST stand alone. Please correct this. See: <code>WordPress -› Reading Options</code>. Or change: <code>s2Member -› General Options -› Membership Options Page</code>.'))
106
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
107
108
- if($options['login_welcome_page'] && (string)get_option('page_on_front') === $options['login_welcome_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Login Welcome Page is currently configured as your Home Page (i.e. static page) for WordPress. This causes internal conflicts with s2Member. Your Login Welcome Page MUST stand alone. Please correct this. See: <code>WordPress -› Reading Options</code>. Or change: <code>s2Member -› General Options -› Login Welcome Page</code>.'))
109
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
110
111
- if($options['membership_options_page'] && (string)get_option('page_for_posts') === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Membership Options Page is currently configured as your Posts Page (i.e. static page) for WordPress. This causes internal conflicts with s2Member. Your Membership Options Page MUST stand alone. Please correct this. See: <code>WordPress -› Reading Options</code>. Or change: <code>s2Member -› General Options -› Membership Options Page</code>.'))
112
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
113
114
- if($options['login_welcome_page'] && (string)get_option('page_for_posts') === $options['login_welcome_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Login Welcome Page is currently configured as your Posts Page (i.e. static page) for WordPress. This causes internal conflicts with s2Member. Your Login Welcome Page MUST stand alone. Please correct this. See: <code>WordPress -› Reading Options</code>. Or change: <code>s2Member -› General Options -› Login Welcome Page</code>.'))
115
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
116
117
- if($options['file_download_limit_exceeded_page'] && $options['file_download_limit_exceeded_page'] === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Download Limit Exceeded Page is the same as your Membership Options Page. Please correct this. See: <code>s2Member -› Download Options</code>.'))
118
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
119
}
120
$updated_all_options = TRUE; // Flag indicating this routine was processed successfully; and that all s2Member options have been updated successfully.
@@ -205,12 +205,6 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
205
if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_logs_page', (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()), get_defined_vars()))
206
add_submenu_page($menu, 's2Member Logs', 'Log Files (Debug)', 'create_users', 'ws-plugin--s2member-logs', 'c_ws_plugin__s2member_menu_pages::logs_page');
207
208
- if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_divider_6', (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()), get_defined_vars()))
209
- add_submenu_page($menu, '', '<span style="display:block; margin:1px 0 1px -5px; padding:0; height:1px; line-height:1px; background:#CCCCCC;"></span>', 'create_users', '#');
210
-
211
- if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_info_page', (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()), get_defined_vars()))
212
- add_submenu_page($menu, 's2Member Information', 's2Member Info', 'create_users', 'ws-plugin--s2member-info', 'c_ws_plugin__s2member_menu_pages::info_page');
213
-
214
do_action('ws_plugin__s2member_during_add_admin_options_additional_pages', get_defined_vars());
215
}
216
do_action('ws_plugin__s2member_after_add_admin_options', get_defined_vars());
@@ -239,9 +233,6 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
239
240
add_submenu_page($menu, 's2Member Multisite (Configuration)', 'Multisite (Config)', 'create_users', 'ws-plugin--s2member-mms-ops', 'c_ws_plugin__s2member_menu_pages::mms_ops_page');
241
242
- if(apply_filters('ws_plugin__s2member_during_add_network_admin_options_add_info_page', (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()), get_defined_vars()))
243
- add_submenu_page($menu, 's2Member Information', 's2Member Info', 'create_users', 'ws-plugin--s2member-info', 'c_ws_plugin__s2member_menu_pages::info_page');
244
-
245
do_action('ws_plugin__s2member_during_add_network_admin_options_additional_pages', get_defined_vars());
246
}
247
do_action('ws_plugin__s2member_after_add_network_admin_options', get_defined_vars());
@@ -626,7 +617,8 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
626
c_ws_plugin__s2member_menu_pages::update_all_options();
627
628
if(!empty($_REQUEST['ws_plugin__s2member_cf_options_reset'])
629
- && wp_verify_nonce($_REQUEST['ws_plugin__s2member_cf_options_reset'], 'ws-plugin--s2member-cf-options-reset'))
630
{
631
c_ws_plugin__s2member_files_in::reset_aws_cf_config_values(); // A full CloudFront reset.
632
c_ws_plugin__s2member_admin_notices::display_admin_notice('Amazon CloudFront configuration reset successfully.');
@@ -662,7 +654,7 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
662
663
if(!empty($_POST['ws_plugin__s2member_amazon_cf_files_auto_configure_distros']) && ($nonce = $_POST['ws_plugin__s2member_amazon_cf_files_auto_configure_distros']) && wp_verify_nonce($nonce, 'ws-plugin--s2member-amazon-cf-files-auto-configure-distros'))
664
if(($amazon_cf_auto_configure_distros = c_ws_plugin__s2member_files_in::amazon_cf_auto_configure_distros()) && $amazon_cf_auto_configure_distros['success'])
665
- c_ws_plugin__s2member_admin_notices::display_admin_notice('Amazon CloudFront Distributions auto-configured successfully. Please allow 30 minutes for initial propagation. <strong>Tip:</strong> If you try to stream over the RTMP protocol using something like the <code>[s2Stream /]</code> shortcode, and you keep getting an "ID Not Found" error while using JW Player; please note that it can <em>sometimes</em> take a full 24 hours for RTMP (i.e. streaming distributions) to begin working properly. This is because there are a few initialization routines that must complete on the AWS side when you first integrate with CloudFront. Please be patient.'.(($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_downloads_cname']) ? '<br /><em>Downloads Distribution CNAME: <code>'.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_downloads_cname']).' &mdash;&raquo; '.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_downloads_dname']).'</code></em>' : '').(($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_streaming_cname']) ? '<br /><em>Streaming Distribution CNAME: <code>'.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_streaming_cname']).' &mdash;&raquo; '.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_streaming_dname']).'</code></em>' : ''));
666
else // Else there was an error. We need to report this back to the site owner so they can understand what's going on.
667
(c_ws_plugin__s2member_menu_pages::$pre_display_errors['cf_files_auto_configure_distros'] = TRUE).c_ws_plugin__s2member_admin_notices::display_admin_notice('Unable to auto-configure Amazon CloudFront Distributions.<br />Error code: <code>'.esc_html($amazon_cf_auto_configure_distros['code']).'</code>. Error Message: <code>'.esc_html($amazon_cf_auto_configure_distros['message']).'</code>', TRUE);
668
@@ -677,7 +669,6 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
677
do_action('ws_plugin__s2member_after_down_ops_page', get_defined_vars());
678
}
679
680
-
681
/**
682
* Builds and handles the API Tracking options page.
683
*
@@ -740,7 +731,7 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
740
do_action('ws_plugin__s2member_before_paypal_buttons_page', get_defined_vars());
741
742
if(!$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_business'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_merchant_id'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_username'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_password'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_signature'])
743
- c_ws_plugin__s2member_admin_notices::display_admin_notice('Please configure <code>s2Member -› PayPal Options</code> first. Once all of your PayPal Options are configured; including your Email Address, Merchant ID, API Username, Password, and Signature; return to this page &amp; generate your PayPal Button(s).', TRUE);
744
745
include_once dirname(dirname(__FILE__)).'/menu-pages/paypal-buttons.inc.php';
746
@@ -823,20 +814,5 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
823
824
do_action('ws_plugin__s2member_after_logs_page', get_defined_vars());
825
}
826
-
827
- /**
828
- * Builds and handles the s2Member Info page.
829
- *
830
- * @package s2Member\Menu_Pages
831
- * @since 3.5
832
- */
833
- public static function info_page()
834
- {
835
- do_action('ws_plugin__s2member_before_info_page', get_defined_vars());
836
-
837
- include_once dirname(dirname(__FILE__)).'/menu-pages/info.inc.php';
838
-
839
- do_action('ws_plugin__s2member_after_info_page', get_defined_vars());
840
- }
841
}
842
}
96
97
if(empty($_GET['page']) || $_GET['page'] !== 'ws-plugin--s2member-mms-ops') // Do NOT display page-conflict-warnings on the Main Multisite Configuration panel.
98
{
99
+ if(!$options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>NOTE:</strong> s2Member security restrictions will NOT be enforced until you\'ve configured a Membership Options Page. See: <strong>s2Member General Options Membership Options Page</strong>.'))
100
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
101
102
+ if($options['login_welcome_page'] && $options['login_welcome_page'] === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Login Welcome Page is the same as your Membership Options Page. Please correct this. See: <strong>s2Member General Options Login Welcome Page</strong>.'))
103
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
104
105
+ if($options['membership_options_page'] && (string)get_option('page_on_front') === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Membership Options Page is currently configured as your Home Page (i.e., static page) for WordPress. This causes internal conflicts with s2Member. Your Membership Options Page MUST stand alone. Please correct this. See: <strong>WordPress Reading Options</strong>. Or change: <strong>s2Member General Options Membership Options Page</strong>.'))
106
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
107
108
+ if($options['login_welcome_page'] && (string)get_option('page_on_front') === $options['login_welcome_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Login Welcome Page is currently configured as your Home Page (i.e., static page) for WordPress. This causes internal conflicts with s2Member. Your Login Welcome Page MUST stand alone. Please correct this. See: <strong>WordPress Reading Options</strong>. Or change: <strong>s2Member General Options Login Welcome Page</strong>.'))
109
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
110
111
+ if($options['membership_options_page'] && (string)get_option('page_for_posts') === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Membership Options Page is currently configured as your Posts Page (i.e., static page) for WordPress. This causes internal conflicts with s2Member. Your Membership Options Page MUST stand alone. Please correct this. See: <strong>WordPress Reading Options</strong>. Or change: <strong>s2Member General Options Membership Options Page</strong>.'))
112
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
113
114
+ if($options['login_welcome_page'] && (string)get_option('page_for_posts') === $options['login_welcome_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Login Welcome Page is currently configured as your Posts Page (i.e., static page) for WordPress. This causes internal conflicts with s2Member. Your Login Welcome Page MUST stand alone. Please correct this. See: <strong>WordPress Reading Options</strong>. Or change: <strong>s2Member General Options Login Welcome Page</strong>.'))
115
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
116
117
+ if($options['file_download_limit_exceeded_page'] && $options['file_download_limit_exceeded_page'] === $options['membership_options_page'] && ($display_notices === TRUE || in_array('page-conflict-warnings', (array)$display_notices)) && ($notice = '<strong>s2Member:</strong> Your Download Limit Exceeded Page is the same as your Membership Options Page. Please correct this. See: <strong>s2Member Download Options</strong>.'))
118
($enqueue_notices === TRUE || in_array('page-conflict-warnings', (array)$enqueue_notices)) ? c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, '*:*', TRUE) : c_ws_plugin__s2member_admin_notices::display_admin_notice($notice, TRUE);
119
}
120
$updated_all_options = TRUE; // Flag indicating this routine was processed successfully; and that all s2Member options have been updated successfully.
205
if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_logs_page', (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()), get_defined_vars()))
206
add_submenu_page($menu, 's2Member Logs', 'Log Files (Debug)', 'create_users', 'ws-plugin--s2member-logs', 'c_ws_plugin__s2member_menu_pages::logs_page');
207
208
do_action('ws_plugin__s2member_during_add_admin_options_additional_pages', get_defined_vars());
209
}
210
do_action('ws_plugin__s2member_after_add_admin_options', get_defined_vars());
233
234
add_submenu_page($menu, 's2Member Multisite (Configuration)', 'Multisite (Config)', 'create_users', 'ws-plugin--s2member-mms-ops', 'c_ws_plugin__s2member_menu_pages::mms_ops_page');
235
236
do_action('ws_plugin__s2member_during_add_network_admin_options_additional_pages', get_defined_vars());
237
}
238
do_action('ws_plugin__s2member_after_add_network_admin_options', get_defined_vars());
617
c_ws_plugin__s2member_menu_pages::update_all_options();
618
619
if(!empty($_REQUEST['ws_plugin__s2member_cf_options_reset'])
620
+ && wp_verify_nonce($_REQUEST['ws_plugin__s2member_cf_options_reset'], 'ws-plugin--s2member-cf-options-reset')
621
+ )
622
{
623
c_ws_plugin__s2member_files_in::reset_aws_cf_config_values(); // A full CloudFront reset.
624
c_ws_plugin__s2member_admin_notices::display_admin_notice('Amazon CloudFront configuration reset successfully.');
654
655
if(!empty($_POST['ws_plugin__s2member_amazon_cf_files_auto_configure_distros']) && ($nonce = $_POST['ws_plugin__s2member_amazon_cf_files_auto_configure_distros']) && wp_verify_nonce($nonce, 'ws-plugin--s2member-amazon-cf-files-auto-configure-distros'))
656
if(($amazon_cf_auto_configure_distros = c_ws_plugin__s2member_files_in::amazon_cf_auto_configure_distros()) && $amazon_cf_auto_configure_distros['success'])
657
+ c_ws_plugin__s2member_admin_notices::display_admin_notice('Amazon CloudFront Distributions auto-configured successfully. Please allow 30 minutes for initial propagation. <strong>Tip:</strong> If you try to stream over the RTMP protocol using something like the <code>[s2Stream /]</code> shortcode, and you keep getting an "ID Not Found" error while using JW Player; please note that it can <em>sometimes</em> take a full 24 hours for RTMP (i.e., streaming distributions) to begin working properly. This is because there are a few initialization routines that must complete on the AWS side when you first integrate with CloudFront. Please be patient.'.(($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_downloads_cname']) ? '<br /><em>Downloads Distribution CNAME: <code>'.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_downloads_cname']).' &mdash;&raquo; '.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_downloads_dname']).'</code></em>' : '').(($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_streaming_cname']) ? '<br /><em>Streaming Distribution CNAME: <code>'.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_streaming_cname']).' &mdash;&raquo; '.esc_html($GLOBALS['WS_PLUGIN__']['s2member']['o']['amazon_cf_files_distro_streaming_dname']).'</code></em>' : ''));
658
else // Else there was an error. We need to report this back to the site owner so they can understand what's going on.
659
(c_ws_plugin__s2member_menu_pages::$pre_display_errors['cf_files_auto_configure_distros'] = TRUE).c_ws_plugin__s2mem