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

Version Description

= v151210 =

(Maintenance Release) Upgrade immediately.

Download this release

Release Info

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

Code changes from version 150925 to 151210

Files changed (194) hide show
  1. changelog.md +72 -0
  2. checksum.txt +1 -1
  3. includes/classes/access-cap-times.inc.php +1 -1
  4. includes/classes/admin-css-js-in.inc.php +1 -1
  5. includes/classes/admin-css-js.inc.php +1 -1
  6. includes/classes/admin-lockouts.inc.php +1 -1
  7. includes/classes/admin-notices.inc.php +1 -1
  8. includes/classes/auto-eots.inc.php +12 -5
  9. includes/classes/aweber-e.inc.php +1 -1
  10. includes/classes/aweber.inc.php +1 -1
  11. includes/classes/brute-force.inc.php +1 -1
  12. includes/classes/cache.inc.php +1 -1
  13. includes/classes/catgs-sp.inc.php +1 -1
  14. includes/classes/catgs.inc.php +1 -1
  15. includes/classes/check-activation.inc.php +1 -1
  16. includes/classes/constants.inc.php +1 -1
  17. includes/classes/cron-jobs-in.inc.php +14 -14
  18. includes/classes/cron-jobs.inc.php +1 -1
  19. includes/classes/css-js-in.inc.php +1 -1
  20. includes/classes/css-js-themes.inc.php +1 -1
  21. includes/classes/css-js.inc.php +1 -1
  22. includes/classes/custom-reg-fields-4bp.inc.php +1 -1
  23. includes/classes/custom-reg-fields.inc.php +1 -1
  24. includes/classes/database.inc.php +1 -1
  25. includes/classes/email-configs.inc.php +9 -10
  26. includes/classes/files-in.inc.php +2 -2
  27. includes/classes/files.inc.php +1 -1
  28. includes/classes/getresponse.inc.php +1 -1
  29. includes/classes/installation.inc.php +4 -5
  30. includes/classes/ip-restrictions.inc.php +1 -1
  31. includes/classes/labels.inc.php +1 -1
  32. includes/classes/list-server-base.inc.php +1 -1
  33. includes/classes/list-servers.inc.php +1 -1
  34. includes/classes/login-checks.inc.php +1 -1
  35. includes/classes/login-customizations.inc.php +1 -1
  36. includes/classes/login-redirects-r.inc.php +1 -1
  37. includes/classes/login-redirects.inc.php +1 -1
  38. includes/classes/mailchimp-o.inc.php +1 -1
  39. includes/classes/mailchimp.inc.php +1 -1
  40. includes/classes/menu-pages-rs.inc.php +2 -2
  41. includes/classes/menu-pages-tb.inc.php +1 -1
  42. includes/classes/menu-pages.inc.php +3 -3
  43. includes/classes/meta-box-saves.inc.php +1 -1
  44. includes/classes/meta-box-security.inc.php +1 -1
  45. includes/classes/meta-boxes.inc.php +1 -1
  46. includes/classes/mms-patches.inc.php +1 -1
  47. includes/classes/mo-page-in.inc.php +1 -1
  48. includes/classes/mo-page.inc.php +1 -1
  49. includes/classes/no-cache.inc.php +1 -1
  50. includes/classes/op-notices.inc.php +1 -1
  51. includes/classes/option-forces.inc.php +1 -1
  52. includes/classes/pages-sp.inc.php +1 -1
  53. includes/classes/pages.inc.php +1 -1
  54. includes/classes/paypal-notify-in-billing-agreement-signup.inc.php +1 -1
  55. includes/classes/paypal-notify-in-cart.inc.php +1 -1
  56. includes/classes/paypal-notify-in-express-checkout.inc.php +1 -1
  57. includes/classes/paypal-notify-in-rec-profile-creation-w-level.inc.php +1 -1
  58. includes/classes/paypal-notify-in-send-money.inc.php +1 -1
  59. includes/classes/paypal-notify-in-sp-refund-reversal.inc.php +6 -6
  60. includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php +11 -11
  61. includes/classes/paypal-notify-in-subscr-or-rp-cancellation-w-level.inc.php +6 -6
  62. includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php +9 -9
  63. includes/classes/paypal-notify-in-subscr-or-rp-payment-failed-w-level.inc.php +1 -1
  64. includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php +6 -6
  65. includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php +27 -27
  66. includes/classes/paypal-notify-in-virtual-terminal.inc.php +1 -1
  67. includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php +13 -13
  68. includes/classes/paypal-notify-in-web-accept-sp.inc.php +14 -14
  69. includes/classes/paypal-notify-in.inc.php +13 -25
  70. includes/classes/paypal-notify.inc.php +1 -1
  71. includes/classes/paypal-return-in-no-tx-data.inc.php +1 -1
  72. includes/classes/paypal-return-in-proxy-ty-email.inc.php +1 -1
  73. includes/classes/paypal-return-in-proxy-x-preview.inc.php +1 -1
  74. includes/classes/paypal-return-in-subscr-modify-w-level.inc.php +4 -4
  75. includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php +5 -5
  76. includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php +4 -4
  77. includes/classes/paypal-return-in-web-accept-sp.inc.php +4 -4
  78. includes/classes/paypal-return-in.inc.php +8 -20
  79. includes/classes/paypal-return.inc.php +1 -1
  80. includes/classes/paypal-utilities.inc.php +1 -1
  81. includes/classes/posts-sp.inc.php +1 -1
  82. includes/classes/posts.inc.php +1 -1
  83. includes/classes/profile-in.inc.php +1 -1
  84. includes/classes/profile-mods-4bp-in.inc.php +1 -1
  85. includes/classes/profile-mods-4bp.inc.php +1 -1
  86. includes/classes/profile-mods-in.inc.php +1 -1
  87. includes/classes/profile-mods.inc.php +1 -1
  88. includes/classes/profile.inc.php +1 -1
  89. includes/classes/ptags-sp.inc.php +1 -1
  90. includes/classes/ptags.inc.php +1 -1
  91. includes/classes/querys.inc.php +1 -1
  92. includes/classes/readmes.inc.php +1 -1
  93. includes/classes/register-access.inc.php +1 -1
  94. includes/classes/register-in.inc.php +1 -1
  95. includes/classes/register.inc.php +1 -1
  96. includes/classes/registration-times.inc.php +1 -1
  97. includes/classes/registrations.inc.php +4 -7
  98. includes/classes/return-templates.inc.php +1 -1
  99. includes/classes/roles-caps.inc.php +1 -1
  100. includes/classes/ruris-sp.inc.php +1 -1
  101. includes/classes/ruris.inc.php +1 -1
  102. includes/classes/s-badge-status-in.inc.php +1 -1
  103. includes/classes/s-badge-status.inc.php +1 -1
  104. includes/classes/sc-eots-in.inc.php +1 -1
  105. includes/classes/sc-eots.inc.php +1 -1
  106. includes/classes/sc-files-in.inc.php +1 -1
  107. includes/classes/sc-files.inc.php +1 -1
  108. includes/classes/sc-gets-in.inc.php +1 -1
  109. includes/classes/sc-gets.inc.php +1 -1
  110. includes/classes/sc-if-conds-in.inc.php +1 -1
  111. includes/classes/sc-if-conds.inc.php +1 -1
  112. includes/classes/sc-keys-in.inc.php +1 -1
  113. includes/classes/sc-keys.inc.php +1 -1
  114. includes/classes/sc-paypal-button-e.inc.php +1 -1
  115. includes/classes/sc-paypal-button-in.inc.php +2 -2
  116. includes/classes/sc-paypal-button.inc.php +1 -1
  117. includes/classes/sc-profile-in.inc.php +1 -1
  118. includes/classes/sc-profile.inc.php +1 -1
  119. includes/classes/sc-s-badge-in.inc.php +1 -1
  120. includes/classes/sc-s-badge.inc.php +1 -1
  121. includes/classes/security.inc.php +1 -1
  122. includes/classes/sp-access.inc.php +1 -1
  123. includes/classes/ssl-in.inc.php +1 -1
  124. includes/classes/ssl.inc.php +1 -1
  125. includes/classes/systematics-sp.inc.php +1 -1
  126. includes/classes/systematics.inc.php +1 -1
  127. includes/classes/tracking-codes.inc.php +1 -1
  128. includes/classes/tracking-cookies-in.inc.php +1 -1
  129. includes/classes/tracking-cookies.inc.php +1 -1
  130. includes/classes/translations.inc.php +1 -1
  131. includes/classes/user-access.inc.php +1 -1
  132. includes/classes/user-deletions.inc.php +6 -5
  133. includes/classes/user-new-in.inc.php +1 -1
  134. includes/classes/user-new.inc.php +1 -1
  135. includes/classes/user-notes.inc.php +1 -1
  136. includes/classes/user-securities.inc.php +1 -1
  137. includes/classes/users-list-in.inc.php +1 -1
  138. includes/classes/users-list.inc.php +1 -1
  139. includes/classes/utilities.inc.php +1 -1
  140. includes/classes/utils-arrays.inc.php +1 -1
  141. includes/classes/utils-captchas.inc.php +1 -1
  142. includes/classes/utils-conds.inc.php +1 -1
  143. includes/classes/utils-css.inc.php +1 -1
  144. includes/classes/utils-cur.inc.php +1 -1
  145. includes/classes/utils-dirs.inc.php +1 -1
  146. includes/classes/utils-encryption.inc.php +1 -1
  147. includes/classes/utils-forms.inc.php +1 -1
  148. includes/classes/utils-gets.inc.php +1 -1
  149. includes/classes/utils-html.inc.php +1 -1
  150. includes/classes/utils-logs.inc.php +14 -10
  151. includes/classes/utils-s2o.inc.php +4 -3
  152. includes/classes/utils-strings.inc.php +14 -2
  153. includes/classes/utils-time.inc.php +60 -29
  154. includes/classes/utils-urls.inc.php +1 -1
  155. includes/classes/utils-users.inc.php +1 -1
  156. includes/classes/wp-footer.inc.php +1 -1
  157. includes/codes.inc.php +1 -1
  158. includes/externals/mailchimp/Mailchimp-o.php +1 -1
  159. includes/externals/markdown/nc-markdown.inc.php +2 -2
  160. includes/funcs.inc.php +1 -1
  161. includes/functions/api-functions.inc.php +1 -1
  162. includes/functions/class-autoloader.inc.php +1 -1
  163. includes/functions/deprecated.inc.php +1 -1
  164. includes/functions/pluggables.inc.php +1 -1
  165. includes/hooks.inc.php +2 -1
  166. includes/jquery/jquery.json-ps/jquery.json-ps.js +1 -1
  167. includes/jquery/jquery.sprintf/jquery.sprintf.js +1 -1
  168. includes/jquery/jquery.ui-effects/jquery.ui-effects.js +1 -1
  169. includes/menu-pages/api-ops.inc.php +1 -1
  170. includes/menu-pages/down-ops.inc.php +1 -1
  171. includes/menu-pages/els-ops.inc.php +1 -1
  172. includes/menu-pages/gen-ops.inc.php +3 -1
  173. includes/menu-pages/integrations.inc.php +1 -1
  174. includes/menu-pages/logs.inc.php +6 -6
  175. includes/menu-pages/menu-pages-s-min.js +1 -1
  176. includes/menu-pages/menu-pages-s.css +1 -1
  177. includes/menu-pages/menu-pages-s.js +11 -1
  178. includes/menu-pages/menu-pages.css +34 -1
  179. includes/menu-pages/menu-pages.js +1 -1
  180. includes/menu-pages/mms-ops.inc.php +1 -1
  181. includes/menu-pages/paypal-buttons.inc.php +2 -2
  182. includes/menu-pages/paypal-ops.inc.php +1 -1
  183. includes/menu-pages/res-ops.inc.php +1 -1
  184. includes/menu-pages/scripting.inc.php +1 -1
  185. includes/menu-pages/start.inc.php +48 -80
  186. includes/menu-pages/trk-ops.inc.php +1 -1
  187. includes/menu-pages/updates.inc.php +1 -1
  188. includes/s2member.css +1 -1
  189. includes/s2member.js +1 -1
  190. includes/syscon.inc.php +1 -1
  191. includes/translations/s2member.pot +125 -120
  192. readme.txt +97 -25
  193. s2member-o.php +1 -1
  194. s2member.php +23 -18
changelog.md CHANGED
@@ -1,3 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  = v150925 =
2
 
3
  - (s2Member/s2Member Pro) **WP v4.3 Compat.** This release corrects a minor backward compatibility issue with versions of WordPress before v4.3, and for installations of s2Member that still use the `%%user_pass%%` Replacement Code in their New User Email notification. See [this GitHub issue](https://github.com/websharks/s2member/issues/710) if you'd like additional details.
1
+ = v151210 =
2
+
3
+ - (s2Member/s2Member Pro) **WP/PHP Compat:** Updated for compatibility with WordPress 4.4 and PHP v7.0. Note that s2Member and s2Member Pro also remain compatible with WordPress 4.3 and PHP 5.2. However, PHP 5.5+ is strongly recommended.
4
+
5
+ - (s2Member Pro) **New Feature! EOT Renewal/Reminder Email Notifications:** This release adds a long-awaited feature which allows you to configure & send EOT Renewal/Reminder Email notifications to your customers; to let them know their account with you will expire soon.
6
+
7
+ It's possible to configure one or more notifications, each with a different set of recipients, and a different subject and message body. Notifications can be sent out X days before the EOT occurs, _the day_ of the EOT, or X days after the EOT has already occurred; e.g., to encourage renewals.
8
+
9
+ See: **Dashboard → s2Member → Stripe Options → EOT Renewal/Reminder Email(s)**
10
+ _Also works with PayPal Pro, Authorize.Net, and ClickBank._
11
+
12
+ Props @clavaque @KTS915 @raamdev @patdumond @kristineds @pagelab @chronicelite @csexplorer17 @radven, and all of our great supporters. See [this GitHub issue](https://github.com/websharks/s2member/issues/122#issuecomment-161531763).
13
+
14
+ - (s2Member/s2Member Pro) **Cleanup:** This release improves the list of Other Gateways; moving deprecated payment gateways to the bottom of the list and improving the display of the list overall. Props @kristineds @clavaque. For further details, see [this GitHub issue](https://github.com/websharks/s2member/issues/715).
15
+
16
+ - (s2Member/s2Member Pro) **Bug Fix:** This release corrects an "Insecure Content Warning" that may have appeared in certain portions of the s2Member Dashboard panels whenever you accessed your Dashboard over the `https` protocol. The issue was seen in Google Chrome and it was simply a `<form>` tag that referenced the s2Member mailing list. This is now hidden by default if you access the Dashboard over SSL, in order to avoid this warning. Props @patdumond for reporting. Props @renzms for fixing. See also [this GitHub issue](https://github.com/websharks/s2member/issues/678) if you'd like additional details.
17
+
18
+ - (s2Member Pro) **Stripe Locale:** This release adjusts the Stripe overlay so that it will automatically display in the language associated with a visitor's country. This was accomplished by setting the Stripe Checkout variable `locale: 'auto'` as suggested in [this GitHub issue](https://github.com/websharks/s2member/issues/728). Props @renzms
19
+
20
+ - (s2Member Pro) **Stripe Bug Fix:** This release improves the way Stripe Image Branding and Stripe Statement Descriptions are applied whenever you intentionally leave them empty. It also changes the default value of Stripe Image Branding to an empty string; which will tell Stripe to use the account-level default value that you configured in your Stripe Dashboard in favor of that which you configure with s2Member. The choice is still yours, but this release sets what others have told us are better default values. See also [this GitHub issue](https://github.com/websharks/s2member/issues/666) if you'd like additional details.
21
+
22
+ - (s2Member Pro) **Stripe Enhancement:** This release makes it possible to configure the Stripe "Remember Me" functionality with s2Member; i.e., it is now possible to turn this on/off if you so desire. See also [this GitHub issue](https://github.com/websharks/s2member/issues/357) for details.
23
+
24
+ - (s2Member Pro) **Stripe Enhancement:** This release makes it possible for you to tell Stripe to collect a customer's full Billing Address and/or full Shipping Address. See [this GitHub issue](https://github.com/websharks/s2member/issues/667) for additional details.
25
+
26
+ - (s2Member/s2Member Pro) **UI Clarity:** This release improves the way the New User Email Notification panel behaves whenever you also have Custom Passwords enabled with s2Member. The New User Email Notification is only sent when Custom Passwords are off, so this panel should disable itself whenever that is the case. Fixed in this release. Props @raamdev See also: [this GitHub issue](https://github.com/websharks/s2member/issues/739) if you'd like additional details.
27
+
28
+ - (s2Member/s2Member Pro) **Bug Fix:** This release resolves a minor issue for developers running Vagrant and VVV with symlink plugins. Props @magbicaleman ~ See [this GitHub issue](https://github.com/websharks/s2member/issues/717) for further details.
29
+
30
+ - (s2Member Pro) **Conflict Resolution:** This release resolves a conflict with the WP Full Stripe plugin and any other plugins that already load an existing copy of the Stripe SDK at runtime; in concert with s2Member Pro. See [this GitHub issue](https://github.com/websharks/s2member/issues/750) if you'd like additional details.
31
+
32
+ - (s2Member/s2Member Pro) **New Log File:** This release of s2Member adds a new log file that keeps track of all automatic EOTs that occur through the underlying CRON job. The new log file is named: `auto-eot-system.log` and you can learn more about this file and view it from: **Dashboard → s2Member → Log Files (Debug) → Log Viewer**. Props @raamdev ~ See [this GitHub issue](https://github.com/websharks/s2member/issues/759) if you'd like additional details.
33
+
34
+ - (s2Member Pro) **`[s2Member-List /]` Bug Fix:** This release resolves a problem in the `[s2Member-List /]` shortcode whenever it is configured to search Custom Fields generated with s2Member. Props @patdumond @renzms. See [this GitHub issue](https://github.com/websharks/s2member/issues/765) if you'd like additional details.
35
+
36
+ - (s2Member Pro) **Stripe Enhancement:** This release updates s2Member's Stripe integration so that any Buy Now transaction spawns a Stripe popup with the amount and full description filled within the popup itself as well. Props @raamdev. See [this GitHub issue](https://github.com/websharks/s2member/issues/749) for further details.
37
+
38
+ - (s2Member/s2Member Pro) **WP v4.3 Compat.** This release addresses a minor conflict between functionality provided by s2Member and that of the WordPress core itself. Whenever you change a user's password by editing their account, you can choose to send them an email about this change (or not). Since WordPress v4.3, the WordPress core will _also_ send a more vague email to notify the user of a password change, which is not customizable. This release disables that default email notification in favor of the more helpful and customizable email message that can be sent by s2Member. Simply tick the "Reset Password & Resend New User Email Notification" checkbox whenever you are editing a user. Props @patdumond for reporting. See also [this GitHub issue](https://github.com/websharks/s2member/issues/777) if you'd like additional details.
39
+
40
+ - (s2Member/s2Member Pro) **PayPal Compat.** This release resolves a conflict between s2Member and a nasty bug at PayPal.com that came to light recently. In some cases, customers reported that clicking the "Continue" button at PayPal.com simply reloaded the page and gave no response. We found that this was attributed to a bug on the PayPal side (see [792](https://github.com/websharks/s2member/issues/792)). To work around this bug, we are using a new default value for the `ns="1"` shortcode attribute in PayPal Pro-Forms and PayPal Buttons. The new default value is `ns="0"`, which seems to work around this bug for the time being. Props @patdumond @raamdev for reporting and testing this fix. See also [full report here](https://github.com/websharks/s2member/issues/792).
41
+
42
+ - `ns="0"` (**new default**) = prompt for a shipping address, but do not require one
43
+ - `ns="1"` (old default) = do not prompt for a shipping address whatsoever
44
+
45
+ See also: **Dashboard → s2Member → PayPal Pro-Forms → PayPal Shortcode Attributes (Explained)**
46
+
47
+ - (s2Member/s2Member Pro) **Getting Started:** The old Quick Start Guide was renamed to "Getting Started" in this release. It was also cleaned up and improved a bit; i.e., brought up-to-date. In addition, there is a new welcome message for first-time users of the software that invites them to read over the Getting Started page before they begin. Props @raamdev. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/655).
48
+
49
+ - (s2Member Pro) **Stripe Bug Fix:** This release corrects a problem with Stripe refund and chargeback notification handling. s2Member Pro will now receive and handle Stripe refund and/or chargeback events (through your existing Webhook) as expected.
50
+
51
+ See: **Dashboard → s2Member → Stripe Options → Automatic EOT Behavior** for options that allow you to control the way in which s2Member should respond whenever a refund is processed, or when a dispute (chargeback) occurs at Stripe.
52
+
53
+ Props @ElizWS and @tubiz w/ AffiliateWP. See also [this GitHub issue](https://github.com/websharks/s2member/issues/706).
54
+
55
+ - (s2Member Pro) **`[s2Member-List /]`** Added the ability to search usermeta data too. For instance, you can now search `first_name`, `last_name`, `nickname`, `description`, `s2member_subscr_id`, `s2member_custom`, etc, etc. See [this GitHub issue](https://github.com/websharks/s2member/issues/596).
56
+
57
+ _**Note:** The `first_name`, `last_name`, and `nickname` columns are now a part of the default value for the `search_columns=""` attribute in the `[s2Member-List /]` shortcode. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/596). Props @patdumond for her ideas._
58
+
59
+ - (s2Member Pro) **`[s2Member-List /]`** There are some new `orderby=""` options. You may now choose to order the list by: `first_name`, `last_name`, or `nickname`.
60
+
61
+ - (s2Member Pro) **`[s2Member-List /]`** It is now possible to search through s2Member Custom Registration/Profile Fields that may contain an array of values; i.e., you can now search _any_ Custom Registration/Profile Field in s2Member. For instance, if a field is designed to accept multiple selections, or you provide a set of multiple checkbox options. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/555).
62
+
63
+ - (s2Member Pro) **`[s2Member-List /]` Bug Fix:** Meta fields that contained a timestamp were being displayed by the `date_i18n()` function in WP core. However, the time offset calculation was wrong; i.e., not a match to the local time configured by your installation of WordPress. Fixed in this release.
64
+
65
+ - (s2Member Pro) **`[s2Member-List /]` Bug Fix:** Minor formatting corrections for replacement codes made available for the `link_*=""` attributes in the `[s2Member-List /]` shortcode.
66
+
67
+ - (s2Member Pro) **`[s2Member-List /]`:** It is now possible to search for an exact match by surrounding your search query with double quotes; e.g., `"john doe"` (in quotes, for an exact match), instead of the default behavior, which is `*john doe*` behind-the-scenes; i.e., a fuzzy match.
68
+
69
+ - (s2Member Pro) **`[s2Member-List /]`:** Several behind-the-scenes performance enhancements.
70
+
71
+ - (s2Member/s2Member Pro) **PHP 7 Compat.** This release of s2Member removes its use of the `/e` modifier in calls to `preg_replace()`, which was deprecated in PHP 5.5 and has been removed in PHP 7. Props @bridgeport. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/415).
72
+
73
  = v150925 =
74
 
75
  - (s2Member/s2Member Pro) **WP v4.3 Compat.** This release corrects a minor backward compatibility issue with versions of WordPress before v4.3, and for installations of s2Member that still use the `%%user_pass%%` Replacement Code in their New User Email notification. See [this GitHub issue](https://github.com/websharks/s2member/issues/710) if you'd like additional details.
checksum.txt CHANGED
@@ -1 +1 @@
1
- 7ca3eb527170d3c241213d269e2dfcd4
1
+ 95ca15ddfbbd89600e1ac81f5ac3e577
includes/classes/access-cap-times.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Access CAP Times.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Access CAP Times.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/admin-css-js-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Administrative CSS/JS for menu pages (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Administrative CSS/JS for menu pages (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/admin-css-js.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Administrative CSS/JS for menu pages.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Administrative CSS/JS for menu pages.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/admin-lockouts.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Locks Users/Members out of admin panels.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Locks Users/Members out of admin panels.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/admin-notices.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Enqueues/displays administrative notices.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Enqueues/displays administrative notices.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/auto-eots.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Auto-EOT System *(EOT = End Of Term)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -127,11 +127,15 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
127
  delete_user_option($user_id, 's2member_last_auto_eot_time');
128
  delete_user_option($user_id, 's2member_auto_eot_time');
129
 
 
 
 
130
  if(!$user->has_cap('administrator') /* Do NOT process Administrator accounts. */)
131
  {
132
  if($GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_eot_behavior'] === 'demote')
133
  {
134
  $eot_del_type = 'auto-eot-cancellation-expiration-demotion'; // Set EOT/Del type.
 
135
 
136
  $custom = get_user_option('s2member_custom', $user_id);
137
  $subscr_gateway = get_user_option('s2member_subscr_gateway', $user_id);
@@ -183,11 +187,11 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
183
  if($subscr_gateway && $subscr_id) // Also note the Paid Subscr. Gateway/ID so there is a reference left behind here.
184
  c_ws_plugin__s2member_user_notes::append_user_notes($user_id, 'Paid Subscr. ID @ time of demotion: '.$subscr_gateway.' → '.$subscr_id);
185
 
186
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'] && is_array($cv = preg_split('/\|/', $custom)))
187
  {
188
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications.
189
 
190
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode('auto-eot-cancellation-expiration-demotion')), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_id)), $url)))
191
  if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
192
  if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
193
  if(($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->user_email)), $url)))
@@ -204,7 +208,7 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
204
  c_ws_plugin__s2member_utils_urls::remote($url);
205
  }
206
  }
207
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'] && is_array($cv = preg_split('/\|/', $custom)))
208
  {
209
  $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
210
  c_ws_plugin__s2member_email_configs::email_config_release();
@@ -239,7 +243,7 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
239
  $msg .= 'cv8: %%cv8%%'."\n";
240
  $msg .= 'cv9: %%cv9%%';
241
 
242
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs('auto-eot-cancellation-expiration-demotion'), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_id), $msg)))
243
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_baid), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_cid), $msg)))
244
  if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
245
  if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
@@ -267,6 +271,7 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
267
  else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_eot_behavior'] === 'delete')
268
  {
269
  $eot_del_type = $GLOBALS['ws_plugin__s2member_eot_del_type'] = 'auto-eot-cancellation-expiration-deletion';
 
270
 
271
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
272
  do_action('ws_plugin__s2member_during_auto_eot_system_during_before_delete', get_defined_vars());
@@ -290,6 +295,8 @@ if(!class_exists('c_ws_plugin__s2member_auto_eots'))
290
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
291
  do_action('ws_plugin__s2member_during_auto_eot_system', get_defined_vars());
292
  unset($__refs, $__v); // Housekeeping.
 
 
293
  }
294
  }
295
  }
3
  * s2Member's Auto-EOT System *(EOT = End Of Term)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
127
  delete_user_option($user_id, 's2member_last_auto_eot_time');
128
  delete_user_option($user_id, 's2member_auto_eot_time');
129
 
130
+ $log_entry = array('user' => (array)$user); // Intialize.
131
+ $log_entry['auto_eot_time'] = $auto_eot_time; // Record EOT time.
132
+
133
  if(!$user->has_cap('administrator') /* Do NOT process Administrator accounts. */)
134
  {
135
  if($GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_eot_behavior'] === 'demote')
136
  {
137
  $eot_del_type = 'auto-eot-cancellation-expiration-demotion'; // Set EOT/Del type.
138
+ $log_entry['eot_del_type'] = $eot_del_type; // Deleting user in this case.
139
 
140
  $custom = get_user_option('s2member_custom', $user_id);
141
  $subscr_gateway = get_user_option('s2member_subscr_gateway', $user_id);
187
  if($subscr_gateway && $subscr_id) // Also note the Paid Subscr. Gateway/ID so there is a reference left behind here.
188
  c_ws_plugin__s2member_user_notes::append_user_notes($user_id, 'Paid Subscr. ID @ time of demotion: '.$subscr_gateway.' → '.$subscr_id);
189
 
190
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'])
191
  {
192
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications.
193
 
194
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $custom, true)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode('auto-eot-cancellation-expiration-demotion')), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_id)), $url)))
195
  if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
196
  if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
197
  if(($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->user_email)), $url)))
208
  c_ws_plugin__s2member_utils_urls::remote($url);
209
  }
210
  }
211
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'])
212
  {
213
  $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
214
  c_ws_plugin__s2member_email_configs::email_config_release();
243
  $msg .= 'cv8: %%cv8%%'."\n";
244
  $msg .= 'cv9: %%cv9%%';
245
 
246
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs('auto-eot-cancellation-expiration-demotion'), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_id), $msg)))
247
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_baid), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_cid), $msg)))
248
  if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
249
  if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
271
  else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_eot_behavior'] === 'delete')
272
  {
273
  $eot_del_type = $GLOBALS['ws_plugin__s2member_eot_del_type'] = 'auto-eot-cancellation-expiration-deletion';
274
+ $log_entry['eot_del_type'] = $eot_del_type; // Deleting user in this case.
275
 
276
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
277
  do_action('ws_plugin__s2member_during_auto_eot_system_during_before_delete', get_defined_vars());
295
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
296
  do_action('ws_plugin__s2member_during_auto_eot_system', get_defined_vars());
297
  unset($__refs, $__v); // Housekeeping.
298
+
299
+ c_ws_plugin__s2member_utils_logs::log_entry('auto-eot-system', $log_entry);
300
  }
301
  }
302
  }
includes/classes/aweber-e.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * AWeber (Old via Email)
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * AWeber (Old via Email)
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/aweber.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * AWeber
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * AWeber
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/brute-force.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Brute Force protection routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Brute Force protection routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/cache.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's caching routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's caching routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/catgs-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Category protection routines *(for specific Categories)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Category protection routines *(for specific Categories)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/catgs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Category protection routines *(for current page)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Category protection routines *(for current page)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/check-activation.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's self re-activation routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's self re-activation routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/constants.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's API Constants *(for site owners)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's API Constants *(for site owners)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/cron-jobs-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Cron routines handled by s2Member (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -15,9 +15,9 @@
15
  * @since 3.5
16
  */
17
  if(!defined('WPINC')) // MUST have WordPress.
18
- exit ("Do not access this file directly.");
19
 
20
- if(!class_exists("c_ws_plugin__s2member_cron_jobs_in"))
21
  {
22
  /**
23
  * Cron routines handled by s2Member (inner processing routines).
@@ -33,7 +33,7 @@ if(!class_exists("c_ws_plugin__s2member_cron_jobs_in"))
33
  * @package s2Member\Cron_Jobs
34
  * @since 3.5
35
  *
36
- * @attaches-to ``add_filter("cron_schedules");``
37
  *
38
  * @param array $schedules Expects an array of WP_Cron schedules passed in by the Filter.
39
  *
@@ -42,12 +42,12 @@ if(!class_exists("c_ws_plugin__s2member_cron_jobs_in"))
42
  public static function extend_cron_schedules($schedules = array())
43
  {
44
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
45
- do_action("ws_plugin__s2member_before_extend_cron_schedules", get_defined_vars());
46
  unset($__refs, $__v);
47
 
48
- $array = array("every10m" => array("interval" => 600, "display" => "Every 10 Minutes"));
49
 
50
- return apply_filters("ws_plugin__s2member_extend_cron_schedules", array_merge($array, $schedules), get_defined_vars());
51
  }
52
 
53
  /**
@@ -56,22 +56,22 @@ if(!class_exists("c_ws_plugin__s2member_cron_jobs_in"))
56
  * @package s2Member\Cron_Jobs
57
  * @since 3.5
58
  *
59
- * @attaches-to ``add_action("init");``
60
  */
61
  public static function auto_eot_system_via_cron()
62
  {
63
- do_action("ws_plugin__s2member_before_auto_eot_system_via_cron", get_defined_vars());
64
 
65
- if(!empty($_GET["s2member_auto_eot_system_via_cron"]))
66
  {
67
- if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"])
68
  {
69
  c_ws_plugin__s2member_auto_eots::auto_eot_system(); // Process.
70
- do_action("ws_plugin__s2member_during_auto_eot_system_via_cron", get_defined_vars());
71
  }
72
  exit(); // Clean exit.
73
  }
74
- do_action("ws_plugin__s2member_after_auto_eot_system_via_cron", get_defined_vars());
75
  }
76
  }
77
- }
3
  * Cron routines handled by s2Member (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
15
  * @since 3.5
16
  */
17
  if(!defined('WPINC')) // MUST have WordPress.
18
+ exit ('Do not access this file directly.');
19
 
20
+ if(!class_exists('c_ws_plugin__s2member_cron_jobs_in'))
21
  {
22
  /**
23
  * Cron routines handled by s2Member (inner processing routines).
33
  * @package s2Member\Cron_Jobs
34
  * @since 3.5
35
  *
36
+ * @attaches-to ``add_filter('cron_schedules');``
37
  *
38
  * @param array $schedules Expects an array of WP_Cron schedules passed in by the Filter.
39
  *
42
  public static function extend_cron_schedules($schedules = array())
43
  {
44
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
45
+ do_action('ws_plugin__s2member_before_extend_cron_schedules', get_defined_vars());
46
  unset($__refs, $__v);
47
 
48
+ $array = array('every10m' => array('interval' => 600, 'display' => 'Every 10 Minutes'));
49
 
50
+ return apply_filters('ws_plugin__s2member_extend_cron_schedules', array_merge($array, $schedules), get_defined_vars());
51
  }
52
 
53
  /**
56
  * @package s2Member\Cron_Jobs
57
  * @since 3.5
58
  *
59
+ * @attaches-to ``add_action('init');``
60
  */
61
  public static function auto_eot_system_via_cron()
62
  {
63
+ do_action('ws_plugin__s2member_before_auto_eot_system_via_cron', get_defined_vars());
64
 
65
+ if(!empty($_GET['s2member_auto_eot_system_via_cron']))
66
  {
67
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['auto_eot_system_enabled'])
68
  {
69
  c_ws_plugin__s2member_auto_eots::auto_eot_system(); // Process.
70
+ do_action('ws_plugin__s2member_during_auto_eot_system_via_cron', get_defined_vars());
71
  }
72
  exit(); // Clean exit.
73
  }
74
+ do_action('ws_plugin__s2member_after_auto_eot_system_via_cron', get_defined_vars());
75
  }
76
  }
77
+ }
includes/classes/cron-jobs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Cron routines handled by s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Cron routines handled by s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/css-js-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * CSS/JS loading handlers for s2Member (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * CSS/JS loading handlers for s2Member (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/css-js-themes.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * CSS/JS integrations with theme.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * CSS/JS integrations with theme.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/css-js.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * CSS/JS loading handlers for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * CSS/JS loading handlers for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/custom-reg-fields-4bp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Custom Registration/Profile Fields for BuddyPress integration.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Custom Registration/Profile Fields for BuddyPress integration.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/custom-reg-fields.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Custom Registration/Profile Fields for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Custom Registration/Profile Fields for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/database.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Database routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Database routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/email-configs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Email configurations for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -216,8 +216,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
216
  * @since 110707
217
  *
218
  * @param string|int $user_id A numeric WordPress User ID.
219
- * @param string $user_pass Optional. A plain text version of the User's password.
220
- * If omitted, only the administrative notification will be sent.
221
  * @param array $notify An array of directives. Must be non-empty, with at least one of these values `user,admin`.
222
  * @param string $user_email Optional. This defaults to the user's currently configured email address.
223
  * @return bool True if all required parameters are supplied, else false.
@@ -277,7 +276,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
277
  else $wp_set_pass_url = wp_lostpassword_url(); // Default behavior; and older versions of WordPress.
278
 
279
  $fields = get_user_option ('s2member_custom_fields', $user_id);
280
- $cv = preg_split ('/\|/', get_user_option ('s2member_custom', $user_id));
281
 
282
  $role = c_ws_plugin__s2member_user_access::user_access_role($user);
283
  $label = c_ws_plugin__s2member_user_access::user_access_label($user);
@@ -289,7 +288,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
289
  $user_ip = $_SERVER['REMOTE_ADDR'];
290
 
291
  if (($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_subject']))
292
- if (($sbj = preg_replace ('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)))
293
  if (($sbj = preg_replace ('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($wp_set_pass_url), $sbj)))
294
  if (($sbj = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $sbj)))
295
  if (($sbj = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $sbj)))
@@ -311,7 +310,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
311
  break; // Empty; we can stop here.
312
 
313
  if (($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message']))
314
- if (($msg = preg_replace ('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)))
315
  if (($msg = preg_replace ('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($wp_set_pass_url), $msg)))
316
  if (($msg = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $msg)))
317
  if (($msg = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $msg)))
@@ -347,7 +346,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
347
  if (in_array('admin', $notify, true) && $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients'])
348
  {
349
  $fields = get_user_option ('s2member_custom_fields', $user_id);
350
- $cv = preg_split ('/\|/', get_user_option ('s2member_custom', $user_id));
351
 
352
  $role = c_ws_plugin__s2member_user_access::user_access_role($user);
353
  $label = c_ws_plugin__s2member_user_access::user_access_label($user);
@@ -359,7 +358,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
359
  $user_ip = $_SERVER['REMOTE_ADDR'];
360
 
361
  if (($rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients']))
362
- if (($rec = preg_replace ('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)))
363
  if (($rec = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $rec)))
364
  if (($rec = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $rec)))
365
  if (($rec = preg_replace ('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($label), $rec)))
@@ -380,7 +379,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
380
  break; // Empty; we can stop here.
381
 
382
  if (($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_subject']))
383
- if (($sbj = preg_replace ('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)))
384
  if (($sbj = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $sbj)))
385
  if (($sbj = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $sbj)))
386
  if (($sbj = preg_replace ('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($label), $sbj)))
@@ -401,7 +400,7 @@ if (!class_exists ('c_ws_plugin__s2member_email_configs'))
401
  break; // Empty; we can stop here.
402
 
403
  if (($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_message']))
404
- if (($msg = preg_replace ('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)))
405
  if (($msg = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $msg)))
406
  if (($msg = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $msg)))
407
  if (($msg = preg_replace ('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($label), $msg)))
3
  * Email configurations for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
216
  * @since 110707
217
  *
218
  * @param string|int $user_id A numeric WordPress User ID.
219
+ * @param string $user_pass Optional; plain text pass. No longer suggested, by here for back compat.
 
220
  * @param array $notify An array of directives. Must be non-empty, with at least one of these values `user,admin`.
221
  * @param string $user_email Optional. This defaults to the user's currently configured email address.
222
  * @return bool True if all required parameters are supplied, else false.
276
  else $wp_set_pass_url = wp_lostpassword_url(); // Default behavior; and older versions of WordPress.
277
 
278
  $fields = get_user_option ('s2member_custom_fields', $user_id);
279
+ $custom = get_user_option ('s2member_custom', $user_id);
280
 
281
  $role = c_ws_plugin__s2member_user_access::user_access_role($user);
282
  $label = c_ws_plugin__s2member_user_access::user_access_label($user);
288
  $user_ip = $_SERVER['REMOTE_ADDR'];
289
 
290
  if (($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_subject']))
291
+ if (($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $custom)))
292
  if (($sbj = preg_replace ('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($wp_set_pass_url), $sbj)))
293
  if (($sbj = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $sbj)))
294
  if (($sbj = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $sbj)))
310
  break; // Empty; we can stop here.
311
 
312
  if (($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message']))
313
+ if (($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)))
314
  if (($msg = preg_replace ('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($wp_set_pass_url), $msg)))
315
  if (($msg = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $msg)))
316
  if (($msg = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $msg)))
346
  if (in_array('admin', $notify, true) && $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients'])
347
  {
348
  $fields = get_user_option ('s2member_custom_fields', $user_id);
349
+ $custom = get_user_option ('s2member_custom', $user_id);
350
 
351
  $role = c_ws_plugin__s2member_user_access::user_access_role($user);
352
  $label = c_ws_plugin__s2member_user_access::user_access_label($user);
358
  $user_ip = $_SERVER['REMOTE_ADDR'];
359
 
360
  if (($rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients']))
361
+ if (($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $custom)))
362
  if (($rec = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $rec)))
363
  if (($rec = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $rec)))
364
  if (($rec = preg_replace ('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($label), $rec)))
379
  break; // Empty; we can stop here.
380
 
381
  if (($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_subject']))
382
+ if (($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $custom)))
383
  if (($sbj = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $sbj)))
384
  if (($sbj = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $sbj)))
385
  if (($sbj = preg_replace ('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($label), $sbj)))
400
  break; // Empty; we can stop here.
401
 
402
  if (($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_message']))
403
+ if (($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)))
404
  if (($msg = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $msg)))
405
  if (($msg = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $msg)))
406
  if (($msg = preg_replace ('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($label), $msg)))
includes/classes/files-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * File Download routines for s2Member (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -1599,4 +1599,4 @@ if(!class_exists('c_ws_plugin__s2member_files_in'))
1599
  );
1600
  }
1601
  }
1602
- }
3
  * File Download routines for s2Member (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
1599
  );
1600
  }
1601
  }
1602
+ }
includes/classes/files.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * File Download routines for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * File Download routines for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/getresponse.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * GetResponse
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * GetResponse
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/installation.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Installation routines for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -118,14 +118,13 @@ if(!class_exists('c_ws_plugin__s2member_installation'))
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
  }
121
- else // Otherwise (initial activation); we'll help the Site Owner out by giving them a link to the Quick Start Guide.
122
  {
123
  $notice = '<strong>Note:</strong> s2Member adds some new data columns to your list of Users/Members. If your list gets overcrowded, please use the <strong>Screen Options</strong> tab <em>(upper right-hand corner)</em>. With WordPress Screen Options, you can add/remove specific data columns; thereby making the most important data easier to read. For example, if you create Custom Registration/Profile Fields with s2Member, those Custom Fields will result in new data columns; which can cause your list of Users/Members to become nearly unreadable. So just use the Screen Options tab to clean things up.';
124
-
125
  c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, 'blog:users.php', FALSE, FALSE, TRUE);
126
 
127
- $notice = '<strong>s2Member</strong> v'.esc_html(WS_PLUGIN__S2MEMBER_VERSION).' has been <strong>activated</strong>. Nice work!<br />';
128
- $notice .= 'Have fun, <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-start')).'">read the Quick Start Guide</a>, and make some money! :-)';
129
 
130
  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'));
131
  }
3
  * Installation routines for s2Member.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
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
  }
121
+ else // Otherwise (initial activation); we'll help the Site Owner out by giving them a link to the Getting Started section.
122
  {
123
  $notice = '<strong>Note:</strong> s2Member adds some new data columns to your list of Users/Members. If your list gets overcrowded, please use the <strong>Screen Options</strong> tab <em>(upper right-hand corner)</em>. With WordPress Screen Options, you can add/remove specific data columns; thereby making the most important data easier to read. For example, if you create Custom Registration/Profile Fields with s2Member, those Custom Fields will result in new data columns; which can cause your list of Users/Members to become nearly unreadable. So just use the Screen Options tab to clean things up.';
 
124
  c_ws_plugin__s2member_admin_notices::enqueue_admin_notice($notice, 'blog:users.php', FALSE, FALSE, TRUE);
125
 
126
+ $notice = '<strong>s2Member v'.esc_html(WS_PLUGIN__S2MEMBER_VERSION).' has been activated. Nice work!</strong><br />';
127
+ $notice .= 'We suggest a review of the "Getting Started" page to familiarize yourself with s2Member terminology and basic configuration.<br />&#8627;&nbsp; Would you want to review now? &nbsp;&nbsp;&nbsp; <a href="'.esc_attr(admin_url('/admin.php?page=ws-plugin--s2member-start')).'"><strong>Yes (explain)</strong></a>';
128
 
129
  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'));
130
  }
includes/classes/ip-restrictions.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * IP Restrictions.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * IP Restrictions.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/labels.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Membership Level Labels.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Membership Level Labels.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/list-server-base.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * List Server Base
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * List Server Base
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/list-servers.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * List Server integrations.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * List Server integrations.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/login-checks.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Login checks.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Login checks.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/login-customizations.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Login customizations.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Login customizations.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/login-redirects-r.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Login redirect removals.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Login redirect removals.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/login-redirects.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Login redirections.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Login redirections.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/mailchimp-o.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * MailChimp (Old API)
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * MailChimp (Old API)
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/mailchimp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * MailChimp
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * MailChimp
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/menu-pages-rs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Right-side for Menu Pages.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -41,7 +41,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_pages_rs"))
41
 
42
  ob_start(); // output buffer these so we can display a toggler conditionally.
43
 
44
- if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["updates"])
45
  {
46
  echo '<div class="ws-menu-page-updates">' . "\n";
47
  include_once dirname (dirname (__FILE__)) . "/menu-pages/updates.inc.php";
3
  * Right-side for Menu Pages.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
41
 
42
  ob_start(); // output buffer these so we can display a toggler conditionally.
43
 
44
+ if (!is_ssl() && $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["updates"])
45
  {
46
  echo '<div class="ws-menu-page-updates">' . "\n";
47
  include_once dirname (dirname (__FILE__)) . "/menu-pages/updates.inc.php";
includes/classes/menu-pages-tb.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Toolbox for Menu Pages.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Toolbox for Menu Pages.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/menu-pages.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Administrative menu pages.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -152,7 +152,7 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
152
  'create_users', $menu, 'c_ws_plugin__s2member_menu_pages::start_page', $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/images/brand-favicon.png');
153
 
154
  if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_start_page', TRUE, get_defined_vars()))
155
- add_submenu_page($menu, 's2Member Quick-Start Guide', 'Quick-Start Guide', 'create_users', 'ws-plugin--s2member-start', 'c_ws_plugin__s2member_menu_pages::start_page');
156
 
157
  if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_divider_1', TRUE, get_defined_vars()))
158
  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', '#');
@@ -496,7 +496,7 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
496
  }
497
 
498
  /**
499
- * Builds and handles the Quick Start page.
500
  *
501
  * @package s2Member\Menu_Pages
502
  * @since 3.5
3
  * Administrative menu pages.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
152
  'create_users', $menu, 'c_ws_plugin__s2member_menu_pages::start_page', $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/images/brand-favicon.png');
153
 
154
  if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_start_page', TRUE, get_defined_vars()))
155
+ add_submenu_page($menu, 'Getting Started w/ s2Member', 'Getting Started', 'create_users', 'ws-plugin--s2member-start', 'c_ws_plugin__s2member_menu_pages::start_page');
156
 
157
  if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_divider_1', TRUE, get_defined_vars()))
158
  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', '#');
496
  }
497
 
498
  /**
499
+ * Builds and handles the Getting Started page.
500
  *
501
  * @package s2Member\Menu_Pages
502
  * @since 3.5
includes/classes/meta-box-saves.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Meta box saves.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Meta box saves.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/meta-box-security.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Security meta box.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Security meta box.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/meta-boxes.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Administrative Meta Boxes.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Administrative Meta Boxes.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/mms-patches.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Main Multisite patches.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Main Multisite patches.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/mo-page-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Membership Options Page (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Membership Options Page (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/mo-page.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Membership Options Page.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Membership Options Page.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/no-cache.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * No-cache routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * No-cache routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/op-notices.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Option panel notices.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Option panel notices.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/option-forces.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Forces WordPress options.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Forces WordPress options.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/pages-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Page protection routines *(for specific Pages)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Page protection routines *(for specific Pages)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/pages.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Page protection routines *(for current Page)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Page protection routines *(for current Page)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-billing-agreement-signup.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-cart.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-express-checkout.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-rec-profile-creation-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-send-money.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-sp-refund-reversal.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -70,11 +70,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal'))
70
  Since this routine ignores the processing check, it is *possible* that Refund/Reversal Notification URLs will be contacted more than once.
71
  If you're writing scripts that depend on Refund/Reversal Notifications, please keep this in mind.
72
  */
73
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_ref_rev_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
74
  {
75
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_ref_rev_notification_urls']) as $url)
76
 
77
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_id'])), $url)))
78
  if(($url = preg_replace('/%%parent_txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_baid'])), $url)) && ($url = preg_replace('/%%parent_txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_cid'])), $url)))
79
  if(($url = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_number'])), $url)) && ($url = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_name'])), $url)))
80
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
@@ -89,7 +89,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal'))
89
 
90
  $paypal['s2member_log'][] = 'Specific Post/Page ~ Refund/Reversal Notification URLs have been processed.';
91
  }
92
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_ref_rev_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
93
  {
94
  $msg = $sbj = '(s2Member / API Notification Email) - Specific Post/Page ~ Refund/Reversal';
95
  $msg .= "\n\n"; // Spacing in the message body.
@@ -120,7 +120,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal'))
120
  $msg .= 'cv8: %%cv8%%'."\n";
121
  $msg .= 'cv9: %%cv9%%';
122
 
123
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_id']), $msg)))
124
  if(($msg = preg_replace('/%%parent_txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_baid']), $msg)) && ($msg = preg_replace('/%%parent_txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_cid']), $msg)))
125
  if(($msg = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $msg)) && ($msg = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $msg)))
126
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
@@ -156,4 +156,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal'))
156
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal', FALSE, get_defined_vars());
157
  }
158
  }
159
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
70
  Since this routine ignores the processing check, it is *possible* that Refund/Reversal Notification URLs will be contacted more than once.
71
  If you're writing scripts that depend on Refund/Reversal Notifications, please keep this in mind.
72
  */
73
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_ref_rev_notification_urls'])
74
  {
75
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_ref_rev_notification_urls']) as $url)
76
 
77
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_id'])), $url)))
78
  if(($url = preg_replace('/%%parent_txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_baid'])), $url)) && ($url = preg_replace('/%%parent_txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_cid'])), $url)))
79
  if(($url = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_number'])), $url)) && ($url = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_name'])), $url)))
80
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
89
 
90
  $paypal['s2member_log'][] = 'Specific Post/Page ~ Refund/Reversal Notification URLs have been processed.';
91
  }
92
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_ref_rev_notification_recipients'])
93
  {
94
  $msg = $sbj = '(s2Member / API Notification Email) - Specific Post/Page ~ Refund/Reversal';
95
  $msg .= "\n\n"; // Spacing in the message body.
120
  $msg .= 'cv8: %%cv8%%'."\n";
121
  $msg .= 'cv9: %%cv9%%';
122
 
123
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_id']), $msg)))
124
  if(($msg = preg_replace('/%%parent_txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_baid']), $msg)) && ($msg = preg_replace('/%%parent_txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_cid']), $msg)))
125
  if(($msg = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $msg)) && ($msg = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $msg)))
126
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
156
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal', FALSE, get_defined_vars());
157
  }
158
  }
159
+ }
includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -140,7 +140,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
140
  $msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_message']; // The same for standard and w/ Pro-Forms.
141
  $rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_recipients']; // The same for standard and w/ Pro-Forms.
142
 
143
- if(($rec = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
144
  if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
145
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
146
  if(($rec = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $rec)) && ($rec = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $rec)))
@@ -159,7 +159,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
159
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $rec)))
160
  if(($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)))
161
 
162
- if(($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) && ($sbj = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $sbj)))
163
  if(($sbj = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $sbj)) && ($sbj = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $sbj)))
164
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
165
  if(($sbj = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $sbj)) && ($sbj = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $sbj)))
@@ -178,7 +178,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
178
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $sbj)))
179
  if(($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)))
180
 
181
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
182
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
183
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
184
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)))
@@ -216,11 +216,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
216
  $paypal['s2member_log'][] = 'Modification Confirmation Email sent to: '.$rec.'.';
217
  }
218
  }
219
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
220
  {
221
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls']) as $url)
222
 
223
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
224
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
225
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
226
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
@@ -247,7 +247,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
247
  }
248
  $paypal['s2member_log'][] = 'Modification Notification URLs have been processed.';
249
  }
250
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
251
  {
252
  $msg = $sbj = '(s2Member / API Notification Email) - Modification';
253
  $msg .= "\n\n"; // Spacing in the message body.
@@ -292,7 +292,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
292
  $msg .= 'cv8: %%cv8%%'."\n";
293
  $msg .= 'cv9: %%cv9%%';
294
 
295
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
296
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
297
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
298
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)) && ($msg = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $msg)))
@@ -321,9 +321,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
321
  }
322
  $paypal['s2member_log'][] = 'Modification Notification Emails have been processed.';
323
  }
324
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
325
  {
326
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
327
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
328
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
329
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
@@ -376,4 +376,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
376
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level', FALSE, get_defined_vars());
377
  }
378
  }
379
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
140
  $msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_message']; // The same for standard and w/ Pro-Forms.
141
  $rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_recipients']; // The same for standard and w/ Pro-Forms.
142
 
143
+ if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
144
  if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
145
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
146
  if(($rec = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $rec)) && ($rec = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $rec)))
159
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $rec)))
160
  if(($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)))
161
 
162
+ if(($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $paypal['custom'])) && ($sbj = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $sbj)))
163
  if(($sbj = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $sbj)) && ($sbj = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $sbj)))
164
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
165
  if(($sbj = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $sbj)) && ($sbj = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $sbj)))
178
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $sbj)))
179
  if(($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)))
180
 
181
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
182
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
183
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
184
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)))
216
  $paypal['s2member_log'][] = 'Modification Confirmation Email sent to: '.$rec.'.';
217
  }
218
  }
219
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls'])
220
  {
221
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls']) as $url)
222
 
223
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
224
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
225
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
226
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
247
  }
248
  $paypal['s2member_log'][] = 'Modification Notification URLs have been processed.';
249
  }
250
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_recipients'])
251
  {
252
  $msg = $sbj = '(s2Member / API Notification Email) - Modification';
253
  $msg .= "\n\n"; // Spacing in the message body.
292
  $msg .= 'cv8: %%cv8%%'."\n";
293
  $msg .= 'cv9: %%cv9%%';
294
 
295
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
296
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
297
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
298
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)) && ($msg = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $msg)))
321
  }
322
  $paypal['s2member_log'][] = 'Modification Notification Emails have been processed.';
323
  }
324
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']))
325
  {
326
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
327
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
328
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
329
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
376
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level', FALSE, get_defined_vars());
377
  }
378
  }
379
+ }
includes/classes/paypal-notify-in-subscr-or-rp-cancellation-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -88,11 +88,11 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancella
88
  }
89
  else $paypal["s2member_log"][] = "Ignoring Cancellation. An Auto-EOT Time is already set for this Member. An s2Member API Notification will still be processed however.";
90
 
91
- if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"] && is_array($cv = preg_split ("/\|/", $paypal["custom"])))
92
  {
93
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"]) as $url) // Handle Cancellation Notifications.
94
 
95
- if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["subscr_id"])), $url)))
96
  if (($url = preg_replace ("/%%subscr_baid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["subscr_baid"])), $url)) && ($url = preg_replace ("/%%subscr_cid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["subscr_cid"])), $url)))
97
  if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["item_name"])), $url)))
98
  if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($user->last_name)), $url)))
@@ -112,7 +112,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancella
112
  }
113
  $paypal["s2member_log"][] = "Cancellation Notification URLs have been processed.";
114
  }
115
- if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_recipients"] && is_array($cv = preg_split ("/\|/", $paypal["custom"])))
116
  {
117
  $msg = $sbj = "(s2Member / API Notification Email) - Cancellation";
118
  $msg .= "\n\n"; // Spacing in the message body.
@@ -145,7 +145,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancella
145
  $msg .= "cv8: %%cv8%%\n";
146
  $msg .= "cv9: %%cv9%%";
147
 
148
- if (($msg = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["subscr_id"]), $msg)))
149
  if (($msg = preg_replace ("/%%subscr_baid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["subscr_baid"]), $msg)) && ($msg = preg_replace ("/%%subscr_cid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["subscr_cid"]), $msg)))
150
  if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["item_name"]), $msg)))
151
  if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($user->last_name), $msg)))
@@ -187,4 +187,4 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancella
187
  else return apply_filters("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level", false, get_defined_vars ());
188
  }
189
  }
190
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
88
  }
89
  else $paypal["s2member_log"][] = "Ignoring Cancellation. An Auto-EOT Time is already set for this Member. An s2Member API Notification will still be processed however.";
90
 
91
+ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"])
92
  {
93
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"]) as $url) // Handle Cancellation Notifications.
94
 
95
+ if (($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["subscr_id"])), $url)))
96
  if (($url = preg_replace ("/%%subscr_baid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["subscr_baid"])), $url)) && ($url = preg_replace ("/%%subscr_cid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["subscr_cid"])), $url)))
97
  if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($paypal["item_name"])), $url)))
98
  if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs (urlencode ($user->last_name)), $url)))
112
  }
113
  $paypal["s2member_log"][] = "Cancellation Notification URLs have been processed.";
114
  }
115
+ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_recipients"])
116
  {
117
  $msg = $sbj = "(s2Member / API Notification Email) - Cancellation";
118
  $msg .= "\n\n"; // Spacing in the message body.
145
  $msg .= "cv8: %%cv8%%\n";
146
  $msg .= "cv9: %%cv9%%";
147
 
148
+ if (($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["subscr_id"]), $msg)))
149
  if (($msg = preg_replace ("/%%subscr_baid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["subscr_baid"]), $msg)) && ($msg = preg_replace ("/%%subscr_cid%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["subscr_cid"]), $msg)))
150
  if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($paypal["item_name"]), $msg)))
151
  if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs ($user->last_name), $msg)))
187
  else return apply_filters("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level", false, get_defined_vars ());
188
  }
189
  }
190
+ }
includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -153,11 +153,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
153
 
154
  $paypal['s2member_log'][] = 'Member Level/Capabilities demoted to: '.ucwords(preg_replace('/_/', ' ', $demotion_role)).'.';
155
 
156
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
157
  {
158
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications.
159
 
160
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($eot_del_type)), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
161
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
162
  if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
163
  if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
@@ -176,7 +176,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
176
  }
177
  $paypal['s2member_log'][] = 'EOT/Deletion Notification URLs have been processed.';
178
  }
179
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
180
  {
181
  $msg = $sbj = '(s2Member / API Notification Email) - EOT/Deletion';
182
  $msg .= "\n\n"; // Spacing in the message body.
@@ -208,7 +208,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
208
  $msg .= 'cv8: %%cv8%%'."\n";
209
  $msg .= 'cv9: %%cv9%%';
210
 
211
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($eot_del_type), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
212
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
213
  if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
214
  if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
@@ -342,11 +342,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
342
  $user_reg_ip = ($user_id) ? get_user_option('s2member_registration_ip', $user_id) : ''; // Needed below.
343
  $user_reg_ip = $paypal['ip'] = ($user_reg_ip) ? $user_reg_ip : $paypal['ip']; // Now merge conditionally.
344
 
345
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['ref_rev_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
346
  {
347
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['ref_rev_notification_urls']) as $url)
348
 
349
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)) && ($url = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_id'])), $url)))
350
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
351
  if(($url = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_number'])), $url)) && ($url = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_name'])), $url)))
352
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
@@ -367,7 +367,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
367
  }
368
  $paypal['s2member_log'][] = 'Refund/Reversal Notification URLs have been processed.';
369
  }
370
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['ref_rev_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
371
  {
372
  $msg = $sbj = '(s2Member / API Notification Email) - Refund/Reversal';
373
  $msg .= "\n\n"; // Spacing in the message body.
@@ -404,7 +404,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
404
  $msg .= 'cv8: %%cv8%%'."\n";
405
  $msg .= 'cv9: %%cv9%%';
406
 
407
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)) && ($msg = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_id']), $msg)))
408
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
409
  if(($msg = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $msg)) && ($msg = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $msg)))
410
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
153
 
154
  $paypal['s2member_log'][] = 'Member Level/Capabilities demoted to: '.ucwords(preg_replace('/_/', ' ', $demotion_role)).'.';
155
 
156
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'])
157
  {
158
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications.
159
 
160
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($eot_del_type)), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
161
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
162
  if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
163
  if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
176
  }
177
  $paypal['s2member_log'][] = 'EOT/Deletion Notification URLs have been processed.';
178
  }
179
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'])
180
  {
181
  $msg = $sbj = '(s2Member / API Notification Email) - EOT/Deletion';
182
  $msg .= "\n\n"; // Spacing in the message body.
208
  $msg .= 'cv8: %%cv8%%'."\n";
209
  $msg .= 'cv9: %%cv9%%';
210
 
211
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($eot_del_type), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
212
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
213
  if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
214
  if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
342
  $user_reg_ip = ($user_id) ? get_user_option('s2member_registration_ip', $user_id) : ''; // Needed below.
343
  $user_reg_ip = $paypal['ip'] = ($user_reg_ip) ? $user_reg_ip : $paypal['ip']; // Now merge conditionally.
344
 
345
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['ref_rev_notification_urls'])
346
  {
347
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['ref_rev_notification_urls']) as $url)
348
 
349
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)) && ($url = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['parent_txn_id'])), $url)))
350
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
351
  if(($url = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_number'])), $url)) && ($url = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['item_name'])), $url)))
352
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
367
  }
368
  $paypal['s2member_log'][] = 'Refund/Reversal Notification URLs have been processed.';
369
  }
370
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['ref_rev_notification_recipients'])
371
  {
372
  $msg = $sbj = '(s2Member / API Notification Email) - Refund/Reversal';
373
  $msg .= "\n\n"; // Spacing in the message body.
404
  $msg .= 'cv8: %%cv8%%'."\n";
405
  $msg .= 'cv9: %%cv9%%';
406
 
407
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)) && ($msg = preg_replace('/%%parent_txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['parent_txn_id']), $msg)))
408
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
409
  if(($msg = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $msg)) && ($msg = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $msg)))
410
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
includes/classes/paypal-notify-in-subscr-or-rp-payment-failed-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -94,11 +94,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_
94
  $user_reg_ip = get_user_option('s2member_registration_ip', $user_id); // Original IP during Registration.
95
  $user_reg_ip = $paypal['ip'] = ($user_reg_ip) ? $user_reg_ip : $paypal['ip']; // Now merge conditionally.
96
 
97
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
98
  {
99
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls']) as $url)
100
 
101
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
102
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
103
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
104
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
@@ -125,7 +125,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_
125
  }
126
  $paypal['s2member_log'][] = 'Payment Notification URLs have been processed.';
127
  }
128
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
129
  {
130
  $msg = $sbj = '(s2Member / API Notification Email) - Payment';
131
  $msg .= "\n\n"; // Spacing in the message body.
@@ -167,7 +167,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_
167
  $msg .= 'cv8: %%cv8%%'."\n";
168
  $msg .= 'cv9: %%cv9%%';
169
 
170
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
171
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
172
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
173
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
@@ -230,4 +230,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_
230
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level', FALSE, get_defined_vars());
231
  }
232
  }
233
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
94
  $user_reg_ip = get_user_option('s2member_registration_ip', $user_id); // Original IP during Registration.
95
  $user_reg_ip = $paypal['ip'] = ($user_reg_ip) ? $user_reg_ip : $paypal['ip']; // Now merge conditionally.
96
 
97
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls'])
98
  {
99
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls']) as $url)
100
 
101
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
102
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
103
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
104
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
125
  }
126
  $paypal['s2member_log'][] = 'Payment Notification URLs have been processed.';
127
  }
128
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_recipients'])
129
  {
130
  $msg = $sbj = '(s2Member / API Notification Email) - Payment';
131
  $msg .= "\n\n"; // Spacing in the message body.
167
  $msg .= 'cv8: %%cv8%%'."\n";
168
  $msg .= 'cv9: %%cv9%%';
169
 
170
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
171
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
172
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
173
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
230
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level', FALSE, get_defined_vars());
231
  }
232
  }
233
+ }
includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -177,7 +177,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
177
  $msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_message']; // The same for standard and w/ Pro-Forms.
178
  $rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_recipients']; // The same for standard and w/ Pro-Forms.
179
 
180
- if(($rec = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
181
  if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
182
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
183
  if(($rec = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $rec)) && ($rec = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $rec)))
@@ -198,7 +198,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
198
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $rec)))
199
  if(($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)))
200
 
201
- if(($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) && ($sbj = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $sbj)))
202
  if(($sbj = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $sbj)) && ($sbj = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $sbj)))
203
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
204
  if(($sbj = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $sbj)) && ($sbj = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $sbj)))
@@ -219,7 +219,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
219
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $sbj)))
220
  if(($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)))
221
 
222
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
223
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
224
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
225
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)))
@@ -259,11 +259,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
259
  $paypal['s2member_log'][] = 'Modification Confirmation Email sent to: '.$rec.'.';
260
  }
261
  }
262
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
263
  {
264
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls']) as $url)
265
 
266
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
267
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
268
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
269
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
@@ -292,7 +292,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
292
  }
293
  $paypal['s2member_log'][] = 'Modification Notification URLs have been processed.';
294
  }
295
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
296
  {
297
  $msg = $sbj = '(s2Member / API Notification Email) - Modification';
298
  $msg .= "\n\n"; // Spacing in the message body.
@@ -341,7 +341,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
341
  $msg .= 'cv8: %%cv8%%'."\n";
342
  $msg .= 'cv9: %%cv9%%';
343
 
344
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
345
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
346
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
347
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)) && ($msg = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $msg)))
@@ -372,9 +372,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
372
  }
373
  $paypal['s2member_log'][] = 'Modification Notification Emails have been processed.';
374
  }
375
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
376
  {
377
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
378
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
379
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
380
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
@@ -428,7 +428,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
428
 
429
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept|subscr_signup` ) w/o update vars.';
430
 
431
- if(($registration_url = c_ws_plugin__s2member_register_access::register_link_gen($paypal['subscr_gateway'], $paypal['subscr_id'], $paypal['custom'], $paypal['item_number'])) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
432
  {
433
  $processing = $during = TRUE; // Yes, we ARE processing this.
434
 
@@ -436,7 +436,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
436
  $msg = preg_replace('/%%registration_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($registration_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'signup_email_message']);
437
  $rec = preg_replace('/%%registration_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($registration_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'signup_email_recipients']);
438
 
439
- if(($rec = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
440
  if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
441
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
442
  if(($rec = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $rec)) && ($rec = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $rec)))
@@ -450,7 +450,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
450
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $rec)))
451
  if(($rec = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $rec)))
452
 
453
- if(($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) && ($sbj = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $sbj)))
454
  if(($sbj = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $sbj)) && ($sbj = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $sbj)))
455
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
456
  if(($sbj = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $sbj)) && ($sbj = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $sbj)))
@@ -464,7 +464,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
464
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $sbj)))
465
  if(($sbj = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $sbj)))
466
 
467
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
468
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
469
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
470
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)))
@@ -490,11 +490,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
490
 
491
  $paypal['s2member_log'][] = 'Signup Confirmation Email sent to: '.$rec.'.';
492
  }
493
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
494
  {
495
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_notification_urls']) as $url)
496
 
497
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
498
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
499
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
500
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
@@ -511,7 +511,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
511
 
512
  $paypal['s2member_log'][] = 'Signup Notification URLs have been processed.';
513
  }
514
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
515
  {
516
  $msg = $sbj = '(s2Member / API Notification Email) - Signup';
517
  $msg .= "\n\n"; // Spacing in the message body.
@@ -549,7 +549,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
549
  $msg .= 'cv8: %%cv8%%'."\n";
550
  $msg .= 'cv9: %%cv9%%';
551
 
552
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
553
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
554
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
555
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)) && ($msg = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $msg)))
@@ -568,9 +568,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
568
 
569
  $paypal['s2member_log'][] = 'Signup Notification Emails have been processed.';
570
  }
571
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
572
  {
573
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
574
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
575
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
576
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
@@ -598,14 +598,14 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
598
  do_action('ws_plugin__s2member_during_paypal_notify_after_subscr_signup_wo_update_vars', get_defined_vars());
599
  unset($__refs, $__v);
600
  }
601
- if($processing && $_REQUEST['s2member_paypal_proxy'] && ($url = $_REQUEST['s2member_paypal_proxy_return_url']) && is_array($cv = preg_split('/\|/', $paypal['custom']))) // A Proxy is requesting a Return URL?
602
  {
603
  if((!empty($user_id) && !empty($user) && is_object($user) && $user->ID) || (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with($paypal['subscr_id'], $paypal['option_selection1'])) && is_object($user = new WP_User ($user_id)) && $user->ID))
604
  {
605
  $fields = get_user_option('s2member_custom_fields', $user_id); // These will be needed in the routines below.
606
  $user_reg_ip = get_user_option('s2member_registration_ip', $user_id); // Original IP during Registration.
607
 
608
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
609
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
610
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
611
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
@@ -663,11 +663,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
663
  update_user_option($user_id, 's2member_coupon_codes', $user_coupons);
664
  $processed_coupons = TRUE; // Flag for routines below.
665
  }
666
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
667
  {
668
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls']) as $url)
669
 
670
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
671
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
672
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
673
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
@@ -695,7 +695,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
695
  }
696
  $paypal['s2member_log'][] = 'Payment Notification URLs have been processed.';
697
  }
698
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
699
  {
700
  $msg = $sbj = '(s2Member / API Notification Email) - Payment';
701
  $msg .= "\n\n"; // Spacing in the message body.
@@ -741,7 +741,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
741
  $msg .= 'cv8: %%cv8%%'."\n";
742
  $msg .= 'cv9: %%cv9%%';
743
 
744
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
745
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
746
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
747
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
@@ -818,4 +818,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
818
  return apply_filters('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level', FALSE, get_defined_vars());
819
  }
820
  }
821
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
177
  $msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_message']; // The same for standard and w/ Pro-Forms.
178
  $rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_recipients']; // The same for standard and w/ Pro-Forms.
179
 
180
+ if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
181
  if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
182
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
183
  if(($rec = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $rec)) && ($rec = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $rec)))
198
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $rec)))
199
  if(($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)))
200
 
201
+ if(($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $paypal['custom'])) && ($sbj = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $sbj)))
202
  if(($sbj = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $sbj)) && ($sbj = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $sbj)))
203
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
204
  if(($sbj = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $sbj)) && ($sbj = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $sbj)))
219
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $sbj)))
220
  if(($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)))
221
 
222
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
223
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
224
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
225
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)))
259
  $paypal['s2member_log'][] = 'Modification Confirmation Email sent to: '.$rec.'.';
260
  }
261
  }
262
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls'])
263
  {
264
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_urls']) as $url)
265
 
266
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
267
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
268
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
269
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
292
  }
293
  $paypal['s2member_log'][] = 'Modification Notification URLs have been processed.';
294
  }
295
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_notification_recipients'])
296
  {
297
  $msg = $sbj = '(s2Member / API Notification Email) - Modification';
298
  $msg .= "\n\n"; // Spacing in the message body.
341
  $msg .= 'cv8: %%cv8%%'."\n";
342
  $msg .= 'cv9: %%cv9%%';
343
 
344
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
345
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
346
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
347
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)) && ($msg = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $msg)))
372
  }
373
  $paypal['s2member_log'][] = 'Modification Notification Emails have been processed.';
374
  }
375
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']))
376
  {
377
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
378
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
379
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
380
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
428
 
429
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept|subscr_signup` ) w/o update vars.';
430
 
431
+ if(($registration_url = c_ws_plugin__s2member_register_access::register_link_gen($paypal['subscr_gateway'], $paypal['subscr_id'], $paypal['custom'], $paypal['item_number'])))
432
  {
433
  $processing = $during = TRUE; // Yes, we ARE processing this.
434
 
436
  $msg = preg_replace('/%%registration_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($registration_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'signup_email_message']);
437
  $rec = preg_replace('/%%registration_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($registration_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'signup_email_recipients']);
438
 
439
+ if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
440
  if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
441
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
442
  if(($rec = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $rec)) && ($rec = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $rec)))
450
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $rec)))
451
  if(($rec = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $rec)))
452
 
453
+ if(($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $paypal['custom'])) && ($sbj = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $sbj)))
454
  if(($sbj = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $sbj)) && ($sbj = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $sbj)))
455
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
456
  if(($sbj = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $sbj)) && ($sbj = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $sbj)))
464
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $sbj)))
465
  if(($sbj = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $sbj)))
466
 
467
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
468
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
469
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
470
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)))
490
 
491
  $paypal['s2member_log'][] = 'Signup Confirmation Email sent to: '.$rec.'.';
492
  }
493
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_notification_urls'])
494
  {
495
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_notification_urls']) as $url)
496
 
497
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
498
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
499
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
500
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
511
 
512
  $paypal['s2member_log'][] = 'Signup Notification URLs have been processed.';
513
  }
514
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_notification_recipients'])
515
  {
516
  $msg = $sbj = '(s2Member / API Notification Email) - Signup';
517
  $msg .= "\n\n"; // Spacing in the message body.
549
  $msg .= 'cv8: %%cv8%%'."\n";
550
  $msg .= 'cv9: %%cv9%%';
551
 
552
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
553
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
554
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
555
  if(($msg = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $msg)) && ($msg = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $msg)) && ($msg = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $msg)))
568
 
569
  $paypal['s2member_log'][] = 'Signup Notification Emails have been processed.';
570
  }
571
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_tracking_codes']))
572
  {
573
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
574
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
575
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
576
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
598
  do_action('ws_plugin__s2member_during_paypal_notify_after_subscr_signup_wo_update_vars', get_defined_vars());
599
  unset($__refs, $__v);
600
  }
601
+ if($processing && $_REQUEST['s2member_paypal_proxy'] && ($url = $_REQUEST['s2member_paypal_proxy_return_url'])) // A Proxy is requesting a Return URL?
602
  {
603
  if((!empty($user_id) && !empty($user) && is_object($user) && $user->ID) || (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with($paypal['subscr_id'], $paypal['option_selection1'])) && is_object($user = new WP_User ($user_id)) && $user->ID))
604
  {
605
  $fields = get_user_option('s2member_custom_fields', $user_id); // These will be needed in the routines below.
606
  $user_reg_ip = get_user_option('s2member_registration_ip', $user_id); // Original IP during Registration.
607
 
608
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
609
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
610
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
611
  if(($url = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['initial'])), $url)) && ($url = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['regular'])), $url)) && ($url = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['recurring'])), $url)))
663
  update_user_option($user_id, 's2member_coupon_codes', $user_coupons);
664
  $processed_coupons = TRUE; // Flag for routines below.
665
  }
666
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls'])
667
  {
668
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls']) as $url)
669
 
670
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_id'])), $url)))
671
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_baid'])), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['subscr_cid'])), $url)))
672
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
673
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
695
  }
696
  $paypal['s2member_log'][] = 'Payment Notification URLs have been processed.';
697
  }
698
+ if($GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_recipients'])
699
  {
700
  $msg = $sbj = '(s2Member / API Notification Email) - Payment';
701
  $msg .= "\n\n"; // Spacing in the message body.
741
  $msg .= 'cv8: %%cv8%%'."\n";
742
  $msg .= 'cv9: %%cv9%%';
743
 
744
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $msg)))
745
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $msg)))
746
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
747
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
818
  return apply_filters('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level', FALSE, get_defined_vars());
819
  }
820
  }
821
+ }
includes/classes/paypal-notify-in-virtual-terminal.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -116,7 +116,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
116
  $msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_email_message']; // The same for standard and w/ Pro-Forms.
117
  $rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_email_recipients']; // The same for standard and w/ Pro-Forms.
118
 
119
- if(($rec = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)) && ($rec = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
120
  if(($rec = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $rec)) && ($rec = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $rec)))
121
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
122
  if(($rec = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $rec)) && ($rec = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
@@ -134,7 +134,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
134
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $rec)))
135
  if(($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)))
136
 
137
- if(($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) && ($sbj = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $sbj)))
138
  if(($sbj = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $sbj)) && ($sbj = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $sbj)))
139
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
140
  if(($sbj = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $sbj)) && ($sbj = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $sbj)))
@@ -152,7 +152,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
152
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $sbj)))
153
  if(($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)))
154
 
155
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
156
  if(($msg = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $msg)) && ($msg = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $msg)))
157
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
158
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
@@ -189,9 +189,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
189
  $paypal['s2member_log'][] = 'Capability Confirmation Email sent to: '.$rec.'.';
190
  }
191
  }
192
- if($processing && $_REQUEST['s2member_paypal_proxy'] && ($url = $_REQUEST['s2member_paypal_proxy_return_url']) && is_array($cv = preg_split('/\|/', $paypal['custom']))) // A Proxy is requesting a Return URL?
193
  {
194
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
195
  if(($url = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_baid'])), $url)) && ($url = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_cid'])), $url)))
196
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
197
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
@@ -220,11 +220,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
220
  }
221
  $paypal['s2member_log'][] = 'Capability Return, a Proxy Return URL is ready.';
222
  }
223
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
224
  {
225
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls']) as $url)
226
 
227
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
228
  if(($url = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_baid'])), $url)) && ($url = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_cid'])), $url)))
229
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
230
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
@@ -252,7 +252,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
252
  }
253
  $paypal['s2member_log'][] = 'Payment Notification URLs have been processed.';
254
  }
255
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
256
  {
257
  $msg = $sbj = '(s2Member / API Notification Email) - Payment';
258
  $msg .= "\n\n"; // Spacing in the message body.
@@ -297,7 +297,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
297
  $msg .= 'cv8: %%cv8%%'."\n";
298
  $msg .= 'cv9: %%cv9%%';
299
 
300
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
301
  if(($msg = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $msg)) && ($msg = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $msg)))
302
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
303
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
@@ -327,9 +327,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
327
  }
328
  $paypal['s2member_log'][] = 'Payment Notification Emails have been processed.';
329
  }
330
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
331
  {
332
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
333
  if(($code = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
334
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
335
  if(($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
@@ -384,4 +384,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
384
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level', FALSE, get_defined_vars());
385
  }
386
  }
387
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
116
  $msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_email_message']; // The same for standard and w/ Pro-Forms.
117
  $rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_email_recipients']; // The same for standard and w/ Pro-Forms.
118
 
119
+ if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
120
  if(($rec = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $rec)) && ($rec = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $rec)))
121
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
122
  if(($rec = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $rec)) && ($rec = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
134
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $rec)))
135
  if(($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)))
136
 
137
+ if(($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $paypal['custom'])) && ($sbj = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $sbj)))
138
  if(($sbj = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $sbj)) && ($sbj = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $sbj)))
139
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
140
  if(($sbj = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $sbj)) && ($sbj = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $sbj)))
152
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $sbj)))
153
  if(($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)))
154
 
155
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
156
  if(($msg = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $msg)) && ($msg = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $msg)))
157
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
158
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
189
  $paypal['s2member_log'][] = 'Capability Confirmation Email sent to: '.$rec.'.';
190
  }
191
  }
192
+ if($processing && $_REQUEST['s2member_paypal_proxy'] && ($url = $_REQUEST['s2member_paypal_proxy_return_url'])) // A Proxy is requesting a Return URL?
193
  {
194
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
195
  if(($url = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_baid'])), $url)) && ($url = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_cid'])), $url)))
196
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
197
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
220
  }
221
  $paypal['s2member_log'][] = 'Capability Return, a Proxy Return URL is ready.';
222
  }
223
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls'])
224
  {
225
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_urls']) as $url)
226
 
227
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
228
  if(($url = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_baid'])), $url)) && ($url = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_cid'])), $url)))
229
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
230
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
252
  }
253
  $paypal['s2member_log'][] = 'Payment Notification URLs have been processed.';
254
  }
255
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['payment_notification_recipients'])
256
  {
257
  $msg = $sbj = '(s2Member / API Notification Email) - Payment';
258
  $msg .= "\n\n"; // Spacing in the message body.
297
  $msg .= 'cv8: %%cv8%%'."\n";
298
  $msg .= 'cv9: %%cv9%%';
299
 
300
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
301
  if(($msg = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $msg)) && ($msg = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $msg)))
302
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
303
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
327
  }
328
  $paypal['s2member_log'][] = 'Payment Notification Emails have been processed.';
329
  }
330
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_tracking_codes']))
331
  {
332
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
333
  if(($code = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
334
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
335
  if(($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
384
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level', FALSE, get_defined_vars());
385
  }
386
  }
387
+ }
includes/classes/paypal-notify-in-web-accept-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -69,7 +69,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
69
  $coupon_class = new c_ws_plugin__s2member_pro_coupons();
70
  $coupon_class->update_uses($coupon['coupon_code']);
71
  }
72
- if(($sp_access_url = c_ws_plugin__s2member_sp_access::sp_access_link_gen($paypal['sp_ids'], $paypal['hours'])) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
73
  {
74
  $processing = $during = TRUE; // Yes, we ARE processing this.
75
 
@@ -98,7 +98,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
98
  $rec = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($sp_access_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'sp_email_recipients']);
99
  $rec = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours'))), $rec);
100
 
101
- if(($rec = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)) && ($rec = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
102
  if(($rec = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $rec))) // Full amount of the payment, before fee is subtracted.
103
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
104
  if(($rec = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $rec)) && ($rec = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $rec)))
@@ -109,7 +109,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
109
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $rec)))
110
  if(($rec = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $rec)))
111
 
112
- if(($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) && ($sbj = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $sbj)))
113
  if(($sbj = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $sbj))) // Full amount of the payment, before fee is subtracted.
114
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
115
  if(($sbj = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $sbj)) && ($sbj = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $sbj)))
@@ -120,7 +120,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
120
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $sbj)))
121
  if(($sbj = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $sbj)))
122
 
123
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
124
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg))) // Full amount of the payment, before fee is subtracted.
125
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
126
  if(($msg = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $msg)) && ($msg = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $msg)))
@@ -143,11 +143,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
143
 
144
  $paypal['s2member_log'][] = 'Specific Post/Page Confirmation Email sent to: '.$rec.'.';
145
  }
146
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_sale_notification_urls'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
147
  {
148
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_sale_notification_urls']) as $url)
149
 
150
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(rawurlencode($sp_access_url)), $url)))
151
  if(($url = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours')))), $url)))
152
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
153
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
@@ -164,7 +164,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
164
 
165
  $paypal['s2member_log'][] = 'Specific Post/Page ~ Sale Notification URLs have been processed.';
166
  }
167
- if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_sale_notification_recipients'] && is_array($cv = preg_split('/\|/', $paypal['custom'])))
168
  {
169
  $msg = $sbj = '(s2Member / API Notification Email) - Specific Post/Page ~ Sale';
170
  $msg .= "\n\n"; // Spacing in the message body.
@@ -201,7 +201,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
201
  $msg .= 'cv8: %%cv8%%'."\n";
202
  $msg .= 'cv9: %%cv9%%';
203
 
204
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($sp_access_url), $msg)))
205
  if(($msg = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours'))), $msg)))
206
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
207
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
@@ -220,9 +220,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
220
 
221
  $paypal['s2member_log'][] = 'Specific Post/Page ~ Sale Notification Emails have been processed.';
222
  }
223
- if($processing && $_REQUEST['s2member_paypal_proxy'] && ($url = $_REQUEST['s2member_paypal_proxy_return_url']) && is_array($cv = preg_split('/\|/', $paypal['custom']))) // A Proxy is requesting a Return URL?
224
  {
225
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(rawurlencode($sp_access_url)), $url)))
226
  if(($url = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours')))), $url)))
227
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
228
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
@@ -240,9 +240,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
240
 
241
  $paypal['s2member_log'][] = 'Specific Post/Page Return, a Proxy Return URL is ready.';
242
  }
243
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
244
  {
245
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
246
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
247
  if(($code = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
248
  if(($code = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $code)) && ($code = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $code)))
@@ -279,4 +279,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
279
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp', FALSE, get_defined_vars());
280
  }
281
  }
282
- }
3
  * s2Member's PayPal IPN handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
69
  $coupon_class = new c_ws_plugin__s2member_pro_coupons();
70
  $coupon_class->update_uses($coupon['coupon_code']);
71
  }
72
+ if(($sp_access_url = c_ws_plugin__s2member_sp_access::sp_access_link_gen($paypal['sp_ids'], $paypal['hours'])))
73
  {
74
  $processing = $during = TRUE; // Yes, we ARE processing this.
75
 
98
  $rec = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($sp_access_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'sp_email_recipients']);
99
  $rec = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours'))), $rec);
100
 
101
+ if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
102
  if(($rec = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $rec))) // Full amount of the payment, before fee is subtracted.
103
  if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
104
  if(($rec = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $rec)) && ($rec = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $rec)))
109
  if(($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $rec)))
110
  if(($rec = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $rec)) && ($rec = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $rec)))
111
 
112
+ if(($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $paypal['custom'])) && ($sbj = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $sbj)))
113
  if(($sbj = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $sbj))) // Full amount of the payment, before fee is subtracted.
114
  if(($sbj = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $sbj)) && ($sbj = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $sbj)))
115
  if(($sbj = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $sbj)) && ($sbj = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $sbj)))
120
  if(($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['ip']), $sbj)))
121
  if(($sbj = preg_replace('/%%full_coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['full_coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_code%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['coupon_code']), $sbj)) && ($sbj = preg_replace('/%%coupon_affiliate_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($coupon['affiliate_id']), $sbj)))
122
 
123
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
124
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg))) // Full amount of the payment, before fee is subtracted.
125
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
126
  if(($msg = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $msg)) && ($msg = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $msg)))
143
 
144
  $paypal['s2member_log'][] = 'Specific Post/Page Confirmation Email sent to: '.$rec.'.';
145
  }
146
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_sale_notification_urls'])
147
  {
148
  foreach(preg_split('/['."\r\n\t".']+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_sale_notification_urls']) as $url)
149
 
150
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(rawurlencode($sp_access_url)), $url)))
151
  if(($url = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours')))), $url)))
152
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
153
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
164
 
165
  $paypal['s2member_log'][] = 'Specific Post/Page ~ Sale Notification URLs have been processed.';
166
  }
167
+ if($processing && $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_sale_notification_recipients'])
168
  {
169
  $msg = $sbj = '(s2Member / API Notification Email) - Specific Post/Page ~ Sale';
170
  $msg .= "\n\n"; // Spacing in the message body.
201
  $msg .= 'cv8: %%cv8%%'."\n";
202
  $msg .= 'cv9: %%cv9%%';
203
 
204
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $paypal['custom'])) && ($msg = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($sp_access_url), $msg)))
205
  if(($msg = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours'))), $msg)))
206
  if(($msg = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $msg)) && ($msg = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $msg)))
207
  if(($msg = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $msg)) && ($msg = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $msg)))
220
 
221
  $paypal['s2member_log'][] = 'Specific Post/Page ~ Sale Notification Emails have been processed.';
222
  }
223
+ if($processing && $_REQUEST['s2member_paypal_proxy'] && ($url = $_REQUEST['s2member_paypal_proxy_return_url'])) // A Proxy is requesting a Return URL?
224
  {
225
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $paypal['custom'], true)) && ($url = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(rawurlencode($sp_access_url)), $url)))
226
  if(($url = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours')))), $url)))
227
  if(($url = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency'])), $url)) && ($url = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['currency_symbol'])), $url)))
228
  if(($url = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['mc_gross'])), $url)) && ($url = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($paypal['txn_id'])), $url)))
240
 
241
  $paypal['s2member_log'][] = 'Specific Post/Page Return, a Proxy Return URL is ready.';
242
  }
243
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_tracking_codes']))
244
  {
245
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
246
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
247
  if(($code = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
248
  if(($code = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $code)) && ($code = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $code)))
279
  else return apply_filters('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp', FALSE, get_defined_vars());
280
  }
281
  }
282
+ }
includes/classes/paypal-notify-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -185,37 +185,25 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in'))
185
  if(!empty($_REQUEST['s2member_paypal_proxy_verification']))
186
  $paypal['s2member_paypal_proxy_verification'] = esc_html(trim(stripslashes((string)$_REQUEST['s2member_paypal_proxy_verification'])));
187
  /*
188
- If debugging/logging is enabled; we need to append ``$paypal`` to the log file.
189
- Logging now supports Multisite Networking as well.
 
 
 
190
  */
191
- $logt = c_ws_plugin__s2member_utilities::time_details();
192
- $logv = c_ws_plugin__s2member_utilities::ver_details();
193
- $logm = c_ws_plugin__s2member_utilities::mem_details();
194
- $log4 = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."\n".'User-Agent: '.@$_SERVER['HTTP_USER_AGENT'];
195
- $log4 = (is_multisite() && !is_main_site()) ? ($_log4 = $current_blog->domain.$current_blog->path)."\n".$log4 : $log4;
196
- $log2 = (is_multisite() && !is_main_site()) ? 'gateway-core-ipn-4-'.trim(preg_replace('/[^a-z0-9]/i', '-', (!empty($_log4) ? $_log4 : '')), '-').'.log' : 'gateway-core-ipn.log';
197
-
198
- if($GLOBALS['WS_PLUGIN__']['s2member']['o']['gateway_debug_logs'])
199
- if(is_dir($logs_dir = $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir']))
200
- if(is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files())
201
- file_put_contents($logs_dir.'/'.$log2,
202
- 'LOG ENTRY: '.$logt."\n".$logv."\n".$logm."\n".$log4."\n".
203
- c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($paypal, TRUE))."\n\n",
204
- FILE_APPEND);
205
-
206
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
207
  do_action('ws_plugin__s2member_during_paypal_notify', get_defined_vars());
208
  unset($__refs, $__v);
209
-
210
- status_header(200); // Send a 200 OK status header.
211
- header('Content-Type: text/plain; charset=UTF-8'); // Content-Type text/plain with UTF-8.
212
- while(@ob_end_clean()) ; // Clean any existing output buffers.
213
-
214
- exit (((!empty($paypal['s2member_paypal_proxy_return_url'])) ? $paypal['s2member_paypal_proxy_return_url'] : ''));
215
  }
216
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
217
  do_action('ws_plugin__s2member_after_paypal_notify', get_defined_vars());
218
  unset($__refs, $__v);
219
  }
220
  }
221
- }
3
  * s2Member's PayPal IPN handler (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
185
  if(!empty($_REQUEST['s2member_paypal_proxy_verification']))
186
  $paypal['s2member_paypal_proxy_verification'] = esc_html(trim(stripslashes((string)$_REQUEST['s2member_paypal_proxy_verification'])));
187
  /*
188
+ Log this IPN post-processing event now.
189
+ */
190
+ c_ws_plugin__s2member_utils_logs::log_entry('gateway-core-ipn', $paypal);
191
+ /*
192
+ Hook during core IPN post-processing might be useful for developers.
193
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
195
  do_action('ws_plugin__s2member_during_paypal_notify', get_defined_vars());
196
  unset($__refs, $__v);
197
+ /*
198
+ Output response headers; and perhaps a proxy return URL upon request.
199
+ */
200
+ status_header(200);
201
+ header('Content-Type: text/plain; charset=UTF-8');
202
+ while(@ob_end_clean()); exit (!empty($paypal['s2member_paypal_proxy_return_url']) ? $paypal['s2member_paypal_proxy_return_url'] : '');
203
  }
204
  foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
205
  do_action('ws_plugin__s2member_after_paypal_notify', get_defined_vars());
206
  unset($__refs, $__v);
207
  }
208
  }
209
+ }
includes/classes/paypal-notify.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal IPN handler.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal IPN handler.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-return-in-no-tx-data.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-return-in-proxy-ty-email.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-return-in-proxy-x-preview.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-return-in-subscr-modify-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -145,9 +145,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level')
145
 
146
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `subscr_modify` ), a Subscription Modification.';
147
 
148
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
149
  {
150
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
151
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
152
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
153
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
@@ -237,4 +237,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level')
237
  else return apply_filters('c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level', FALSE, get_defined_vars());
238
  }
239
  }
240
- }
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
145
 
146
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `subscr_modify` ), a Subscription Modification.';
147
 
148
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']))
149
  {
150
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
151
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
152
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
153
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
237
  else return apply_filters('c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level', FALSE, get_defined_vars());
238
  }
239
  }
240
+ }
includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -199,9 +199,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level'))
199
 
200
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept|subscr_signup|subscr_payment` ) w/ update vars.';
201
 
202
- if($processing && $tracking_properties && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
203
  {
204
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
205
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
206
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
207
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
@@ -299,9 +299,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level'))
299
 
300
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept|subscr_signup|subscr_payment` ) w/o update vars.';
301
 
302
- if($processing && $tracking_properties && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
303
  {
304
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
305
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
306
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
307
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
199
 
200
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept|subscr_signup|subscr_payment` ) w/ update vars.';
201
 
202
+ if($processing && $tracking_properties && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_tracking_codes']))
203
  {
204
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
205
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
206
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
207
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
299
 
300
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept|subscr_signup|subscr_payment` ) w/o update vars.';
301
 
302
+ if($processing && $tracking_properties && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['signup_tracking_codes']))
303
  {
304
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $code)))
305
  if(($code = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $code)) && ($code = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $code)))
306
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
307
  if(($code = preg_replace('/%%initial%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['initial']), $code)) && ($code = preg_replace('/%%regular%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['regular']), $code)) && ($code = preg_replace('/%%recurring%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['recurring']), $code)))
includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -102,9 +102,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_wa_ccaps_wo_level'))
102
 
103
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept` ) w/ update vars for Capabilities w/o Level.';
104
 
105
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
106
  {
107
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
108
  if(($code = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
109
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
110
  if(($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
@@ -204,4 +204,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_wa_ccaps_wo_level'))
204
  else return apply_filters('c_ws_plugin__s2member_paypal_return_in_wa_ccaps_wo_level', FALSE, get_defined_vars());
205
  }
206
  }
207
- }
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
102
 
103
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept` ) w/ update vars for Capabilities w/o Level.';
104
 
105
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_tracking_codes']))
106
  {
107
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
108
  if(($code = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
109
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
110
  if(($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
204
  else return apply_filters('c_ws_plugin__s2member_paypal_return_in_wa_ccaps_wo_level', FALSE, get_defined_vars());
205
  }
206
  }
207
+ }
includes/classes/paypal-return-in-web-accept-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -73,9 +73,9 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_web_accept_sp'))
73
 
74
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept` ) for Specific Post/Page Access.';
75
 
76
- if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_tracking_codes']) && is_array($cv = preg_split('/\|/', $paypal['custom'])))
77
  {
78
- if(($code = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $code)) && ($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
79
  if(($code = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
80
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
81
  if(($code = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $code)) && ($code = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $code)))
@@ -145,4 +145,4 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_web_accept_sp'))
145
  else return apply_filters('c_ws_plugin__s2member_paypal_return_in_web_accept_sp', FALSE, get_defined_vars());
146
  }
147
  }
148
- }
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routine).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
73
 
74
  $paypal['s2member_log'][] = 'Transient Tracking Cookie set on ( `web_accept` ) for Specific Post/Page Access.';
75
 
76
+ if($processing && ($code = $GLOBALS['WS_PLUGIN__']['s2member']['o']['sp_tracking_codes']))
77
  {
78
+ if(($code = c_ws_plugin__s2member_utils_strings::fill_cvs($code, $paypal['custom'])) && ($code = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $code)) && ($code = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $code)))
79
  if(($code = preg_replace('/%%txn_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $code)) && ($code = preg_replace('/%%txn_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $code)))
80
  if(($code = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $code)) && ($code = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $code)))
81
  if(($code = preg_replace('/%%item_number%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_number']), $code)) && ($code = preg_replace('/%%item_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['item_name']), $code)))
145
  else return apply_filters('c_ws_plugin__s2member_paypal_return_in_web_accept_sp', FALSE, get_defined_vars());
146
  }
147
  }
148
+ }
includes/classes/paypal-return-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -162,33 +162,21 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
162
  if (!empty($_GET["s2member_paypal_return_tra"]))
163
  $paypal["s2member_paypal_return_tra"] = esc_html(trim(stripslashes((string)$_GET["s2member_paypal_return_tra"])));
164
  /*
165
- If debugging/logging is enabled; we need to append $paypal to the log file.
166
- Logging now supports Multisite Networking as well.
 
 
 
167
  */
168
- $logt = c_ws_plugin__s2member_utilities::time_details ();
169
- $logv = c_ws_plugin__s2member_utilities::ver_details ();
170
- $logm = c_ws_plugin__s2member_utilities::mem_details ();
171
- $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . @$_SERVER["HTTP_USER_AGENT"];
172
- $log4 = (is_multisite () && !is_main_site ()) ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4;
173
- $log2 = (is_multisite () && !is_main_site ()) ? "gateway-core-rtn-4-" . trim (preg_replace ("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "gateway-core-rtn.log";
174
-
175
- if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
176
- if (is_dir ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
177
- if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
178
- file_put_contents ($logs_dir . "/" . $log2,
179
- "LOG ENTRY: ".$logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" .
180
- c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export ($paypal, true)) . "\n\n",
181
- FILE_APPEND);
182
-
183
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
184
  do_action("ws_plugin__s2member_during_paypal_return", get_defined_vars ());
185
  unset($__refs, $__v);
186
 
187
- exit /* Clean exit. */ ();
188
  }
189
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
190
  do_action("ws_plugin__s2member_after_paypal_return", get_defined_vars ());
191
  unset($__refs, $__v);
192
  }
193
  }
194
- }
3
  * s2Member's PayPal Auto-Return/PDT handler (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
162
  if (!empty($_GET["s2member_paypal_return_tra"]))
163
  $paypal["s2member_paypal_return_tra"] = esc_html(trim(stripslashes((string)$_GET["s2member_paypal_return_tra"])));
164
  /*
165
+ Log this IPN post-processing event now.
166
+ */
167
+ c_ws_plugin__s2member_utils_logs::log_entry('gateway-core-rtn', $paypal);
168
+ /*
169
+ Hook during core RTN post-processing might be useful for developers.
170
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
172
  do_action("ws_plugin__s2member_during_paypal_return", get_defined_vars ());
173
  unset($__refs, $__v);
174
 
175
+ exit(); // Clean exit now.
176
  }
177
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
178
  do_action("ws_plugin__s2member_after_paypal_return", get_defined_vars ());
179
  unset($__refs, $__v);
180
  }
181
  }
182
+ }
includes/classes/paypal-return.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's PayPal Auto-Return/PDT handler.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's PayPal Auto-Return/PDT handler.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/paypal-utilities.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * PayPal utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * PayPal utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/posts-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Post protection routines *(for specific Posts)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Post protection routines *(for specific Posts)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/posts.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Post protection routines *(for current Post)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Post protection routines *(for current Post)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/profile-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member Stand-Alone Profile page (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member Stand-Alone Profile page (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/profile-mods-4bp-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Profile modifications for BuddyPress (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Profile modifications for BuddyPress (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/profile-mods-4bp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Profile modifications for BuddyPress.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Profile modifications for BuddyPress.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/profile-mods-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member Profile modifications (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member Profile modifications (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/profile-mods.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member Profile modifications.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member Profile modifications.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/profile.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member Stand-Alone Profile page.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member Stand-Alone Profile page.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/ptags-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Tag protection routines *(for specific Tags)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Tag protection routines *(for specific Tags)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/ptags.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Tag protection routines *(for current page)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Tag protection routines *(for current page)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/querys.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Query protection routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Query protection routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/readmes.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Readme file parsing.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Readme file parsing.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/register-access.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Registration Access Links.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Registration Access Links.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/register-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Registration Links (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Registration Links (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/register.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Registration Links.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Registration Links.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/registration-times.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Registration Times.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Registration Times.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/registrations.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Registration handlers.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -643,7 +643,6 @@ if(!class_exists('c_ws_plugin__s2member_registrations'))
643
  $ip = (!$ip) ? $_SERVER['REMOTE_ADDR'] : $ip; // Else use environment variable.
644
  $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
645
  $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
646
- $cv = preg_split('/\|/', $custom);
647
 
648
  if(!($auto_eot_time = '') && $eotper) // If a specific EOT Period is included.
649
  $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time('', '', '', $eotper);
@@ -820,7 +819,6 @@ if(!class_exists('c_ws_plugin__s2member_registrations'))
820
  $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
821
  $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
822
  $subscr_gateway = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'];
823
- $cv = preg_split('/\|/', (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom']);
824
 
825
  $auto_eot_time = ($eot = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : '';
826
  $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
@@ -970,7 +968,6 @@ if(!class_exists('c_ws_plugin__s2member_registrations'))
970
  $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
971
  $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
972
  $subscr_gateway = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'];
973
- $cv = preg_split('/\|/', (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom']);
974
 
975
  $auto_eot_time = ($eot = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : '';
976
  $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
@@ -1100,7 +1097,7 @@ if(!class_exists('c_ws_plugin__s2member_registrations'))
1100
 
1101
  foreach(preg_split('/['."\r\n\t".']+/', $urls) as $url) // Notify each of the URLs.
1102
 
1103
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)))
1104
  if(($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)))
1105
  if(($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)))
1106
  if(($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)))
@@ -1158,7 +1155,7 @@ if(!class_exists('c_ws_plugin__s2member_registrations'))
1158
  $msg .= 'cv8: %%cv8%%'."\n";
1159
  $msg .= 'cv9: %%cv9%%';
1160
 
1161
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)))
1162
  if(($msg = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)))
1163
  if(($msg = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)))
1164
  if(($msg = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)))
@@ -1189,7 +1186,7 @@ if(!class_exists('c_ws_plugin__s2member_registrations'))
1189
 
1190
  if(!empty($GLOBALS['ws_plugin__s2member_registration_return_url']) && ($url = $GLOBALS['ws_plugin__s2member_registration_return_url']))
1191
 
1192
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)))
1193
  if(($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)))
1194
  if(($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)))
1195
  if(($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)))
3
  * Registration handlers.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
643
  $ip = (!$ip) ? $_SERVER['REMOTE_ADDR'] : $ip; // Else use environment variable.
644
  $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
645
  $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
 
646
 
647
  if(!($auto_eot_time = '') && $eotper) // If a specific EOT Period is included.
648
  $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time('', '', '', $eotper);
819
  $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
820
  $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
821
  $subscr_gateway = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'];
 
822
 
823
  $auto_eot_time = ($eot = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : '';
824
  $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
968
  $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
969
  $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
970
  $subscr_gateway = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'];
 
971
 
972
  $auto_eot_time = ($eot = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : '';
973
  $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
1097
 
1098
  foreach(preg_split('/['."\r\n\t".']+/', $urls) as $url) // Notify each of the URLs.
1099
 
1100
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $custom, true)))
1101
  if(($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)))
1102
  if(($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)))
1103
  if(($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)))
1155
  $msg .= 'cv8: %%cv8%%'."\n";
1156
  $msg .= 'cv9: %%cv9%%';
1157
 
1158
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)))
1159
  if(($msg = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)))
1160
  if(($msg = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)))
1161
  if(($msg = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)))
1186
 
1187
  if(!empty($GLOBALS['ws_plugin__s2member_registration_return_url']) && ($url = $GLOBALS['ws_plugin__s2member_registration_return_url']))
1188
 
1189
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $custom, true)))
1190
  if(($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)))
1191
  if(($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)))
1192
  if(($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)))
includes/classes/return-templates.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Return Page template handler.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Return Page template handler.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/roles-caps.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Roles/Capabilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Roles/Capabilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/ruris-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's URI protection routines *(for specific URIs)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's URI protection routines *(for specific URIs)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/ruris.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's URI protection routines *(for current URI)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's URI protection routines *(for current URI)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/s-badge-status-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Security Badge Status API (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Security Badge Status API (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/s-badge-status.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Security Badge Status API.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Security Badge Status API.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-eots-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Eot /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Eot /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-eots.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Eot /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Eot /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-files-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2File /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2File /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-files.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2File /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2File /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-gets-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Get /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Get /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-gets.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Get /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Get /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-if-conds-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2If /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2If /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-if-conds.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2If /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2If /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-keys-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Key /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Key /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-keys.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Key /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Key /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-paypal-button-e.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Member-PayPal-Button]` (encryption sub-routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Member-PayPal-Button]` (encryption sub-routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-paypal-button-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Member-PayPal-Button]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -50,7 +50,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
50
 
51
  $attr = /* Force array. Trim quote entities. */ c_ws_plugin__s2member_utils_strings::trim_qts_deep ((array)$attr);
52
 
53
- $attr = shortcode_atts (apply_filters("ws_plugin__s2member_sc_paypal_button_default_attrs", array("ids" => "0", "exp" => "72", "level" => "1", "ccaps" => "", "desc" => "", "ps" => "paypal", "lc" => "", "lang" => "", "cc" => "USD", "dg" => "0", "ns" => "1", "custom" => $_SERVER["HTTP_HOST"], "ta" => "0", "tp" => "0", "tt" => "D", "ra" => "0.01", "rp" => "1", "rt" => "M", "rr" => "1", "rrt" => "", "rra" => "1", "modify" => "0", "cancel" => "0", "sp" => "0", "image" => "default", "output" => "button"), get_defined_vars ()), $attr);
54
 
55
  $attr["modify"] = ($attr["modify"] === "1" && (!is_user_logged_in () || !get_user_option ("s2member_subscr_id")) && $attr["tp"]) ? "0" : $attr["modify"];
56
 
3
  * Shortcode `[s2Member-PayPal-Button]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
50
 
51
  $attr = /* Force array. Trim quote entities. */ c_ws_plugin__s2member_utils_strings::trim_qts_deep ((array)$attr);
52
 
53
+ $attr = shortcode_atts (apply_filters("ws_plugin__s2member_sc_paypal_button_default_attrs", array("ids" => "0", "exp" => "72", "level" => "1", "ccaps" => "", "desc" => "", "ps" => "paypal", "lc" => "", "lang" => "", "cc" => "USD", "dg" => "0", "ns" => "0", "custom" => $_SERVER["HTTP_HOST"], "ta" => "0", "tp" => "0", "tt" => "D", "ra" => "0.01", "rp" => "1", "rt" => "M", "rr" => "1", "rrt" => "", "rra" => "1", "modify" => "0", "cancel" => "0", "sp" => "0", "image" => "default", "output" => "button"), get_defined_vars ()), $attr);
54
 
55
  $attr["modify"] = ($attr["modify"] === "1" && (!is_user_logged_in () || !get_user_option ("s2member_subscr_id")) && $attr["tp"]) ? "0" : $attr["modify"];
56
 
includes/classes/sc-paypal-button.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode `[s2Member-PayPal-Button]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode `[s2Member-PayPal-Button]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-profile-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode for `[s2Member-Profile /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode for `[s2Member-Profile /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-profile.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode for `[s2Member-Profile /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode for `[s2Member-Profile /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-s-badge-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode for `[s2Member-Security-Badge /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode for `[s2Member-Security-Badge /]` (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sc-s-badge.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcode for `[s2Member-Security-Badge /]`.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcode for `[s2Member-Security-Badge /]`.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/security.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member's Security Gate.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member's Security Gate.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/sp-access.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Specific Post/Page Access routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Specific Post/Page Access routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/ssl-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * SSL routines (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * SSL routines (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/ssl.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * SSL routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * SSL routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/systematics-sp.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Systematics *(for a specific page)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Systematics *(for a specific page)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/systematics.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Systematics *(for current page)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Systematics *(for current page)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/tracking-codes.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Tracking Codes.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Tracking Codes.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/tracking-cookies-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Tracking Cookies (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Tracking Cookies (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/tracking-cookies.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Tracking Cookies.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Tracking Cookies.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/translations.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member translations.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * s2Member translations.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/user-access.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * User access routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * User access routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/user-deletions.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * User deletion routines.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -121,6 +121,7 @@ if(!class_exists('c_ws_plugin__s2member_user_deletions'))
121
  delete_user_option($user_id, 's2member_sp_references');
122
 
123
  delete_user_option($user_id, 's2member_last_status_scan');
 
124
  delete_user_option($user_id, 's2member_first_payment_txn_id');
125
  delete_user_option($user_id, 's2member_last_payment_time');
126
  delete_user_option($user_id, 's2member_auto_eot_time');
@@ -132,11 +133,11 @@ if(!class_exists('c_ws_plugin__s2member_user_deletions'))
132
  delete_user_option($user_id, 's2member_login_counter');
133
  delete_user_option($user_id, 's2member_notes');
134
 
135
- if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'] && is_array($cv = preg_split('/\|/', $custom)))
136
  {
137
  foreach(preg_split("/[\r\n\t]+/", $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications on user deletion.
138
 
139
- if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($eot_del_type)), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_id)), $url)))
140
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_baid)), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_cid)), $url)))
141
  if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
142
  if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
@@ -154,7 +155,7 @@ if(!class_exists('c_ws_plugin__s2member_user_deletions'))
154
  c_ws_plugin__s2member_utils_urls::remote($url);
155
  }
156
  }
157
- if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'] && is_array($cv = preg_split('/\|/', $custom)))
158
  {
159
  $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
160
  c_ws_plugin__s2member_email_configs::email_config_release();
@@ -189,7 +190,7 @@ if(!class_exists('c_ws_plugin__s2member_user_deletions'))
189
  $msg .= 'cv8: %%cv8%%'."\n";
190
  $msg .= 'cv9: %%cv9%%';
191
 
192
- if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($eot_del_type), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_id), $msg)))
193
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_baid), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_cid), $msg)))
194
  if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
195
  if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
3
  * User deletion routines.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
121
  delete_user_option($user_id, 's2member_sp_references');
122
 
123
  delete_user_option($user_id, 's2member_last_status_scan');
124
+ delete_user_option($user_id, 's2member_last_reminder_scan');
125
  delete_user_option($user_id, 's2member_first_payment_txn_id');
126
  delete_user_option($user_id, 's2member_last_payment_time');
127
  delete_user_option($user_id, 's2member_auto_eot_time');
133
  delete_user_option($user_id, 's2member_login_counter');
134
  delete_user_option($user_id, 's2member_notes');
135
 
136
+ if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'])
137
  {
138
  foreach(preg_split("/[\r\n\t]+/", $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications on user deletion.
139
 
140
+ if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $custom, true)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($eot_del_type)), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_id)), $url)))
141
  if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_baid)), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_cid)), $url)))
142
  if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
143
  if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
155
  c_ws_plugin__s2member_utils_urls::remote($url);
156
  }
157
  }
158
+ if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'])
159
  {
160
  $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
161
  c_ws_plugin__s2member_email_configs::email_config_release();
190
  $msg .= 'cv8: %%cv8%%'."\n";
191
  $msg .= 'cv9: %%cv9%%';
192
 
193
+ if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($eot_del_type), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_id), $msg)))
194
  if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_baid), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_cid), $msg)))
195
  if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
196
  if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
includes/classes/user-new-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * New User handlers (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * New User handlers (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/user-new.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * New User handlers.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * New User handlers.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/user-notes.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Administrative notes.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Administrative notes.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/user-securities.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * User securities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * User securities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/users-list-in.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Users list (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Users list (inner processing routines).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/users-list.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Users list.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Users list.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utilities.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * General utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * General utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-arrays.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Array utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Array utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-captchas.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Captcha utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Captcha utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-conds.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Conditional utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Conditional utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-css.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * CSS utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * CSS utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-cur.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Currency utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Currency utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-dirs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Directory utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Directory utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-encryption.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Encryption utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Encryption utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-forms.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Form utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Form utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-gets.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Get utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Get utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-html.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * HTML utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * HTML utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-logs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Log utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -63,16 +63,18 @@ if(!class_exists('c_ws_plugin__s2member_utils_logs'))
63
  $log4 .= @$_SERVER['HTTP_HOST'].@$_SERVER['REQUEST_URI']."\n";
64
  $log4 .= 'User-Agent: '.@$_SERVER['HTTP_USER_AGENT'];
65
 
66
- $log2 = $slug.'-api.log'; // Initialize.
67
  if(is_multisite() && !is_main_site()) // Child blog in a multisite network?
68
- $log2 = $slug.'-api-4-'.trim(preg_replace('/[^a-z0-9]/i', '-', $GLOBALS['current_blog']->domain.$GLOBALS['current_blog']->path), '-').'.log';
69
 
70
  c_ws_plugin__s2member_utils_logs::archive_oversize_log_files();
71
 
72
- file_put_contents($logs_dir.'/'.$log2,
73
- 'LOG ENTRY: '.$logt."\n".$logv."\n".$logm."\n".$log4."\n".
74
- c_ws_plugin__s2member_utils_logs::conceal_private_info(print_r($data, TRUE))."\n\n",
75
- FILE_APPEND); // Append to an existing log file; if exists.
 
 
76
  }
77
 
78
  /**
@@ -186,8 +188,7 @@ if(!class_exists('c_ws_plugin__s2member_utils_logs'))
186
  */
187
  public static function cleanup_expired_s2m_transients($stagger = TRUE)
188
  {
189
- global $wpdb;
190
- /** @var wpdb $wpdb */
191
 
192
  if($stagger && !is_float($stagger = time() / 2))
193
  return TRUE; // Bypass this time.
@@ -245,6 +246,9 @@ if(!class_exists('c_ws_plugin__s2member_utils_logs'))
245
 
246
  '/s2\-http\-api\-debug/' => array('short' => 'All outgoing HTTP connections related to s2Member.', 'long' => 'This log file records all outgoing WP_Http connections that are specifically related to s2Member. This log file can be extremely helpful. It includes technical details about remote HTTP connections that are not available in other log files.'),
247
  '/wp\-http\-api\-debug/' => array('short' => 'All outgoing WordPress HTTP connections.', 'long' => 'This log file records all outgoing HTTP connections processed by the WP_Http class. This includes everything processed by WordPress; even things unrelated to s2Member. This log file can be extremely helpful. It includes technical details about remote HTTP connections that are not available in other log files.'),
 
 
 
248
  );
249
  }
250
- }
3
  * Log utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
63
  $log4 .= @$_SERVER['HTTP_HOST'].@$_SERVER['REQUEST_URI']."\n";
64
  $log4 .= 'User-Agent: '.@$_SERVER['HTTP_USER_AGENT'];
65
 
66
+ $log2 = $slug.'.log'; // Initialize.
67
  if(is_multisite() && !is_main_site()) // Child blog in a multisite network?
68
+ $log2 = $slug.'-4-'.trim(preg_replace('/[^a-z0-9]/i', '-', $GLOBALS['current_blog']->domain.$GLOBALS['current_blog']->path), '-').'.log';
69
 
70
  c_ws_plugin__s2member_utils_logs::archive_oversize_log_files();
71
 
72
+ file_put_contents(
73
+ $logs_dir.'/'.$log2,
74
+ 'LOG ENTRY: '.$logt."\n".$logv."\n".$logm."\n".$log4."\n".
75
+ c_ws_plugin__s2member_utils_logs::conceal_private_info(print_r($data, TRUE))."\n\n",
76
+ FILE_APPEND // Append to an existing log file; if exists.
77
+ );
78
  }
79
 
80
  /**
188
  */
189
  public static function cleanup_expired_s2m_transients($stagger = TRUE)
190
  {
191
+ global $wpdb; /** @var wpdb $wpdb */
 
192
 
193
  if($stagger && !is_float($stagger = time() / 2))
194
  return TRUE; // Bypass this time.
246
 
247
  '/s2\-http\-api\-debug/' => array('short' => 'All outgoing HTTP connections related to s2Member.', 'long' => 'This log file records all outgoing WP_Http connections that are specifically related to s2Member. This log file can be extremely helpful. It includes technical details about remote HTTP connections that are not available in other log files.'),
248
  '/wp\-http\-api\-debug/' => array('short' => 'All outgoing WordPress HTTP connections.', 'long' => 'This log file records all outgoing HTTP connections processed by the WP_Http class. This includes everything processed by WordPress; even things unrelated to s2Member. This log file can be extremely helpful. It includes technical details about remote HTTP connections that are not available in other log files.'),
249
+
250
+ '/auto\-eot\-system/' => array('short' => 'EOTs processed via CRON job.', 'long' => 'This log file records all EOTs processed by the WP_Cron job that powers the s2Member Auto-EOT System. Once a customer has an EOT Time, the CRON job comes in and actually handles a demotion or deletion (based on your configuration). That is what this log file shows; i.e., the actual demotion or deletion taking place.'),
251
+ '/eot\-reminders/' => array('short' => 'EOT reminder emails processed via CRON job.', 'long' => 'This log file records all EOT reminder emails processed by the WP_Cron job that powers the s2Member Auto-EOT System. EOT Renewal/Reminder Email notifications are available only in the pro version of s2Member.'),
252
  );
253
  }
254
+ }
includes/classes/utils-s2o.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * s2Member-only utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -40,7 +40,7 @@ if(!class_exists('c_ws_plugin__s2member_utils_s2o'))
40
  if(!empty($_SERVER['WP_DIR']))
41
  return (string)$_SERVER['WP_DIR'];
42
 
43
- foreach(array($starting_dir, $alt_starting_dir) as $_directory)
44
  if($_directory && is_string($_directory) && is_dir($_directory))
45
  for($_i = 0, $_dir = $_directory; $_i <= 20; $_i++, $_dir = dirname($_dir))
46
  if(file_exists($_dir.'/wp-settings.php'))
@@ -48,6 +48,7 @@ if(!class_exists('c_ws_plugin__s2member_utils_s2o'))
48
 
49
  header('HTTP/1.0 500 Error');
50
  header('Content-Type: text/plain; charset=UTF-8');
 
51
  while(@ob_end_clean()) ; // Clean any existing output buffers.
52
  exit ('ERROR: s2Member unable to locate WordPress directory.');
53
  }
@@ -139,4 +140,4 @@ if(!class_exists('c_ws_plugin__s2member_utils_s2o'))
139
  return ob_get_clean();
140
  }
141
  }
142
- }
3
  * s2Member-only utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
40
  if(!empty($_SERVER['WP_DIR']))
41
  return (string)$_SERVER['WP_DIR'];
42
 
43
+ foreach(array($starting_dir, $alt_starting_dir, $_SERVER['DOCUMENT_ROOT']) as $_directory)
44
  if($_directory && is_string($_directory) && is_dir($_directory))
45
  for($_i = 0, $_dir = $_directory; $_i <= 20; $_i++, $_dir = dirname($_dir))
46
  if(file_exists($_dir.'/wp-settings.php'))
48
 
49
  header('HTTP/1.0 500 Error');
50
  header('Content-Type: text/plain; charset=UTF-8');
51
+
52
  while(@ob_end_clean()) ; // Clean any existing output buffers.
53
  exit ('ERROR: s2Member unable to locate WordPress directory.');
54
  }
140
  return ob_get_clean();
141
  }
142
  }
143
+ }
includes/classes/utils-strings.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * String utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -660,5 +660,17 @@ if(!class_exists('c_ws_plugin__s2member_utils_strings'))
660
 
661
  return like_escape($string); // Deprecated in WP v4.0.
662
  }
 
 
 
 
 
 
 
 
 
 
 
 
663
  }
664
- }
3
  * String utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
660
 
661
  return like_escape($string); // Deprecated in WP v4.0.
662
  }
663
+
664
+ public static function fill_cvs($string, $custom, $urlencode = false)
665
+ {
666
+ $string = (string)$string;
667
+ $custom = (string)$custom;
668
+
669
+ foreach (preg_split('/\|/', $custom) as $_key => $_value) {
670
+ $string = str_ireplace('%%cv'.$_key.'%%', $urlencode ? urlencode(trim($_value)) : trim($_value), $string);
671
+ } // unset($_key, $_value); // Housekeeping.
672
+
673
+ return $string;
674
+ }
675
  }
676
+ }
includes/classes/utils-time.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Time utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -32,69 +32,100 @@ if(!class_exists('c_ws_plugin__s2member_utils_time'))
32
  *
33
  * Returns the difference in a human readable format.
34
  * Supports: minutes, hours, days, weeks, months, and years. This is an improvement on WordPress ``human_time_diff()``.
35
- * This returns an "approximate" time difference. Rounded to the nearest minute, hour, day, week, month, year.
36
  *
37
  * @package s2Member\Utilities
38
  * @since 3.5
39
  *
40
  * @param int $from Beginning timestamp to start from.
41
  * @param int $to Ending timestamp to stop at.
 
42
  *
43
  * @return string Human readable difference between ``$from`` and ``$to``.
44
  */
45
- public static function approx_time_difference($from = 0, $to = 0)
46
  {
47
- $from = (!$from) ? strtotime('now') : (int)$from;
48
- $to = (!$to) ? strtotime('now') : (int)$to;
49
  $since = ''; // Initialize.
50
 
51
  if(($difference = abs($to - $from)) < 3600)
52
  {
53
- $m = (int)round($difference / 60);
54
-
 
 
 
 
 
55
  $since = ($m < 1) ? _x('less than a minute', 's2member-front', 's2member') : $since;
56
- $since = ($m === 1) ? _x('1 minute', 's2member-front', 's2member') : $since;
57
- $since = ($m > 1) ? sprintf(_nx('%s minute', '%s minutes', $m, 's2member-front', 's2member'), $m) : $since;
58
  $since = ($m >= 60) ? _x('about 1 hour', 's2member-front', 's2member') : $since;
59
  }
60
  else if($difference >= 3600 && $difference < 86400)
61
  {
62
- $h = (int)round($difference / 3600);
63
-
64
- $since = ($h === 1) ? _x('1 hour', 's2member-front', 's2member') : $since;
65
- $since = ($h > 1) ? sprintf(_nx('%s hour', '%s hours', $h, 's2member-front', 's2member'), $h) : $since;
 
 
 
 
 
66
  $since = ($h >= 24) ? _x('about 1 day', 's2member-front', 's2member') : $since;
67
  }
68
  else if($difference >= 86400 && $difference < 604800)
69
  {
70
- $d = (int)round($difference / 86400);
71
-
72
- $since = ($d === 1) ? _x('1 day', 's2member-front', 's2member') : $since;
73
- $since = ($d > 1) ? sprintf(_nx('%s day', '%s days', $d, 's2member-front', 's2member'), $d) : $since;
 
 
 
 
 
74
  $since = ($d >= 7) ? _x('about 1 week', 's2member-front', 's2member') : $since;
75
  }
76
  else if($difference >= 604800 && $difference < 2592000)
77
  {
78
- $w = (int)round($difference / 604800);
79
-
80
- $since = ($w === 1) ? _x('1 week', 's2member-front', 's2member') : $since;
81
- $since = ($w > 1) ? sprintf(_nx('%s week', '%s weeks', $w, 's2member-front', 's2member'), $w) : $since;
 
 
 
 
 
82
  $since = ($w >= 4) ? _x('about 1 month', 's2member-front', 's2member') : $since;
83
  }
84
  else if($difference >= 2592000 && $difference < 31556926)
85
  {
86
- $m = (int)round($difference / 2592000);
87
-
88
- $since = ($m === 1) ? _x('1 month', 's2member-front', 's2member') : $since;
89
- $since = ($m > 1) ? sprintf(_nx('%s month', '%s months', $m, 's2member-front', 's2member'), $m) : $since;
 
 
 
 
 
90
  $since = ($m >= 12) ? _x('about 1 year', 's2member-front', 's2member') : $since;
91
  }
92
  else if($difference >= 31556926) // Years.
93
  {
94
- $y = (int)round($difference / 31556926);
95
-
96
- $since = ($y === 1) ? _x('1 year', 's2member-front', 's2member') : $since;
97
- $since = ($y > 1) ? sprintf(_nx('%s year', '%s years', $y, 's2member-front', 's2member'), $y) : $since;
 
 
 
 
 
98
  }
99
  return $since;
100
  }
3
  * Time utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
32
  *
33
  * Returns the difference in a human readable format.
34
  * Supports: minutes, hours, days, weeks, months, and years. This is an improvement on WordPress ``human_time_diff()``.
35
+ * This returns an "approximate" time difference. Rounded to nearest minute, hour, day, week, month, year.
36
  *
37
  * @package s2Member\Utilities
38
  * @since 3.5
39
  *
40
  * @param int $from Beginning timestamp to start from.
41
  * @param int $to Ending timestamp to stop at.
42
+ * @param string $round_via Rounding type.
43
  *
44
  * @return string Human readable difference between ``$from`` and ``$to``.
45
  */
46
+ public static function approx_time_difference($from = 0, $to = 0, $round_via = 'round')
47
  {
48
+ $from = !$from ? time() : (int)$from;
49
+ $to = !$to ? time() : (int)$to;
50
  $since = ''; // Initialize.
51
 
52
  if(($difference = abs($to - $from)) < 3600)
53
  {
54
+ if($round_via === 'floor') {
55
+ $m = (int)floor($difference / 60);
56
+ } elseif ($round_via === 'ceil') {
57
+ $m = (int)ceil($difference / 60);
58
+ } else {
59
+ $m = (int)round($difference / 60);
60
+ }
61
  $since = ($m < 1) ? _x('less than a minute', 's2member-front', 's2member') : $since;
62
+ $since = ($m === 1) ? _x('about 1 minute', 's2member-front', 's2member') : $since;
63
+ $since = ($m > 1) ? sprintf(_nx('about %s minute', 'about %s minutes', $m, 's2member-front', 's2member'), $m) : $since;
64
  $since = ($m >= 60) ? _x('about 1 hour', 's2member-front', 's2member') : $since;
65
  }
66
  else if($difference >= 3600 && $difference < 86400)
67
  {
68
+ if($round_via === 'floor') {
69
+ $h = (int)floor($difference / 3600);
70
+ } elseif ($round_via === 'ceil') {
71
+ $h = (int)ceil($difference / 3600);
72
+ } else {
73
+ $h = (int)round($difference / 3600);
74
+ }
75
+ $since = ($h === 1) ? _x('about 1 hour', 's2member-front', 's2member') : $since;
76
+ $since = ($h > 1) ? sprintf(_nx('about %s hour', 'about %s hours', $h, 's2member-front', 's2member'), $h) : $since;
77
  $since = ($h >= 24) ? _x('about 1 day', 's2member-front', 's2member') : $since;
78
  }
79
  else if($difference >= 86400 && $difference < 604800)
80
  {
81
+ if($round_via === 'floor') {
82
+ $d = (int)floor($difference / 86400);
83
+ } elseif ($round_via === 'ceil') {
84
+ $d = (int)ceil($difference / 86400);
85
+ } else {
86
+ $d = (int)round($difference / 86400);
87
+ }
88
+ $since = ($d === 1) ? _x('about 1 day', 's2member-front', 's2member') : $since;
89
+ $since = ($d > 1) ? sprintf(_nx('about %s day', 'about %s days', $d, 's2member-front', 's2member'), $d) : $since;
90
  $since = ($d >= 7) ? _x('about 1 week', 's2member-front', 's2member') : $since;
91
  }
92
  else if($difference >= 604800 && $difference < 2592000)
93
  {
94
+ if($round_via === 'floor') {
95
+ $w = (int)floor($difference / 604800);
96
+ } elseif ($round_via === 'ceil') {
97
+ $w = (int)ceil($difference / 604800);
98
+ } else {
99
+ $w = (int)round($difference / 604800);
100
+ }
101
+ $since = ($w === 1) ? _x('about 1 week', 's2member-front', 's2member') : $since;
102
+ $since = ($w > 1) ? sprintf(_nx('about %s week', 'about %s weeks', $w, 's2member-front', 's2member'), $w) : $since;
103
  $since = ($w >= 4) ? _x('about 1 month', 's2member-front', 's2member') : $since;
104
  }
105
  else if($difference >= 2592000 && $difference < 31556926)
106
  {
107
+ if($round_via === 'floor') {
108
+ $m = (int)floor($difference / 2592000);
109
+ } elseif ($round_via === 'ceil') {
110
+ $m = (int)ceil($difference / 2592000);
111
+ } else {
112
+ $m = (int)round($difference / 2592000);
113
+ }
114
+ $since = ($m === 1) ? _x('about 1 month', 's2member-front', 's2member') : $since;
115
+ $since = ($m > 1) ? sprintf(_nx('about %s month', 'about %s months', $m, 's2member-front', 's2member'), $m) : $since;
116
  $since = ($m >= 12) ? _x('about 1 year', 's2member-front', 's2member') : $since;
117
  }
118
  else if($difference >= 31556926) // Years.
119
  {
120
+ if($round_via === 'floor') {
121
+ $y = (int)floor($difference / 31556926);
122
+ } elseif ($round_via === 'ceil') {
123
+ $y = (int)ceil($difference / 31556926);
124
+ } else {
125
+ $y = (int)round($difference / 31556926);
126
+ }
127
+ $since = ($y === 1) ? _x('about 1 year', 's2member-front', 's2member') : $since;
128
+ $since = ($y > 1) ? sprintf(_nx('about %s year', 'about %s years', $y, 's2member-front', 's2member'), $y) : $since;
129
  }
130
  return $since;
131
  }
includes/classes/utils-urls.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * URL utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * URL utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/utils-users.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * User utilities.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * User utilities.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/classes/wp-footer.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * WordPress footer code.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * WordPress footer code.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/codes.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shortcodes for the s2Member plugin.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Shortcodes for the s2Member plugin.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/externals/mailchimp/Mailchimp-o.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * Copyright {@link http://www.mailchimp.com/ MailChimp}.
6
  *
7
- * Modified by {@link http://www.websharks-inc.com/ WebSharks, Inc.}.
8
  * Uses a custom class name to avoid conflicts with other instances.
9
  *
10
  * This version has also been modified to use:
4
  *
5
  * Copyright {@link http://www.mailchimp.com/ MailChimp}.
6
  *
7
+ * Modified by {@link http://websharks-inc.com/ WebSharks, Inc.}.
8
  * Uses a custom class name to avoid conflicts with other instances.
9
  *
10
  * This version has also been modified to use:
includes/externals/markdown/nc-markdown.inc.php CHANGED
@@ -5,7 +5,7 @@
5
  * Copyright {@link http://www.michelf.com/projects/php-markdown/ Michel Fortin}.
6
  * Original Markdown. Copyright {@link http://daringfireball.net/projects/markdown/ John Gruber}.
7
  *
8
- * Modified by {@link http://www.websharks-inc.com/ WebSharks, Inc.}.
9
  * Excludes WordPress and all other interfaces.
10
  * Uses a custom class name and interface.
11
  *
@@ -64,7 +64,7 @@ class NC_Markdown_Parser {
64
  var $predef_titles = array();
65
 
66
 
67
- function NC_Markdown_Parser() {
68
  #
69
  # Constructor function. Initialize appropriate member variables.
70
  #
5
  * Copyright {@link http://www.michelf.com/projects/php-markdown/ Michel Fortin}.
6
  * Original Markdown. Copyright {@link http://daringfireball.net/projects/markdown/ John Gruber}.
7
  *
8
+ * Modified by {@link http://websharks-inc.com/ WebSharks, Inc.}.
9
  * Excludes WordPress and all other interfaces.
10
  * Uses a custom class name and interface.
11
  *
64
  var $predef_titles = array();
65
 
66
 
67
+ function __construct() {
68
  #
69
  # Constructor function. Initialize appropriate member variables.
70
  #
includes/funcs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Loads functions created by the s2Member plugin.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Loads functions created by the s2Member plugin.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/functions/api-functions.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Core API Functions *(for site owners)*.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Core API Functions *(for site owners)*.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/functions/class-autoloader.inc.php CHANGED
@@ -7,7 +7,7 @@
7
  * See: {@link http://www.php.net/manual/en/function.spl-autoload-register.php}
8
  *
9
  * Copyright: © 2009-2011
10
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
11
  * (coded in the USA)
12
  *
13
  * Released under the terms of the GNU General Public License.
7
  * See: {@link http://www.php.net/manual/en/function.spl-autoload-register.php}
8
  *
9
  * Copyright: © 2009-2011
10
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
11
  * (coded in the USA)
12
  *
13
  * Released under the terms of the GNU General Public License.
includes/functions/deprecated.inc.php CHANGED
@@ -5,7 +5,7 @@
5
  * See: {@link https://en.wikipedia.org/wiki/Deprecation}
6
  *
7
  * Copyright: © 2009-2011
8
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
9
  * (coded in the USA)
10
  *
11
  * Released under the terms of the GNU General Public License.
5
  * See: {@link https://en.wikipedia.org/wiki/Deprecation}
6
  *
7
  * Copyright: © 2009-2011
8
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
9
  * (coded in the USA)
10
  *
11
  * Released under the terms of the GNU General Public License.
includes/functions/pluggables.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Pluggable functions within WordPress.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Pluggable functions within WordPress.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/hooks.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Primary Hooks/Filters used by the s2Member plugin.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -98,6 +98,7 @@ add_filter('random_password', 'c_ws_plugin__s2member_registrations::generate_pas
98
  add_action('user_register', 'c_ws_plugin__s2member_registrations::configure_user_registration');
99
  add_action('register_form', 'c_ws_plugin__s2member_custom_reg_fields::custom_registration_fields');
100
  add_filter('registration_errors', 'c_ws_plugin__s2member_registrations::custom_registration_field_errors', 10, 3);
 
101
 
102
  add_filter('add_signup_meta', 'c_ws_plugin__s2member_registrations::ms_process_signup_meta');
103
  add_filter('bp_signup_usermeta', 'c_ws_plugin__s2member_registrations::ms_process_signup_meta');
3
  * Primary Hooks/Filters used by the s2Member plugin.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
98
  add_action('user_register', 'c_ws_plugin__s2member_registrations::configure_user_registration');
99
  add_action('register_form', 'c_ws_plugin__s2member_custom_reg_fields::custom_registration_fields');
100
  add_filter('registration_errors', 'c_ws_plugin__s2member_registrations::custom_registration_field_errors', 10, 3);
101
+ add_filter('send_password_change_email', '__return_false'); // Turn this off in favor of s2Member.
102
 
103
  add_filter('add_signup_meta', 'c_ws_plugin__s2member_registrations::ms_process_signup_meta');
104
  add_filter('bp_signup_usermeta', 'c_ws_plugin__s2member_registrations::ms_process_signup_meta');
includes/jquery/jquery.json-ps/jquery.json-ps.js CHANGED
@@ -15,7 +15,7 @@
15
  * Distributed with WordPress themes/plugins by WebSharks, Inc.
16
  *
17
  * Copyright: © 2009-2011
18
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
19
  * (coded in the USA)
20
  *
21
  * Released under the terms of the GNU General Public License.
15
  * Distributed with WordPress themes/plugins by WebSharks, Inc.
16
  *
17
  * Copyright: © 2009-2011
18
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
19
  * (coded in the USA)
20
  *
21
  * Released under the terms of the GNU General Public License.
includes/jquery/jquery.sprintf/jquery.sprintf.js CHANGED
@@ -10,7 +10,7 @@
10
  * Distributed with WordPress themes/plugins by WebSharks, Inc.
11
  *
12
  * Copyright: © 2009-2011
13
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
14
  * (coded in the USA)
15
  *
16
  * Released under the terms of the GNU General Public License.
10
  * Distributed with WordPress themes/plugins by WebSharks, Inc.
11
  *
12
  * Copyright: © 2009-2011
13
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
14
  * (coded in the USA)
15
  *
16
  * Released under the terms of the GNU General Public License.
includes/jquery/jquery.ui-effects/jquery.ui-effects.js CHANGED
@@ -4,7 +4,7 @@
4
  * Distributed with WordPress themes/plugins by WebSharks, Inc.
5
  *
6
  * Copyright: © 2009-2011
7
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
8
  * (coded in the USA)
9
  *
10
  * Released under the terms of the GNU General Public License.
4
  * Distributed with WordPress themes/plugins by WebSharks, Inc.
5
  *
6
  * Copyright: © 2009-2011
7
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
8
  * (coded in the USA)
9
  *
10
  * Released under the terms of the GNU General Public License.
includes/menu-pages/api-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (API Notifications page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (API Notifications page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/down-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (File Download Options page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (File Download Options page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/els-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (List Server Options page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (List Server Options page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/gen-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (General Options page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -354,6 +354,8 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_gen_ops"))
354
 
355
  echo '<h3 style="margin:0;">New User Email Message (<a href="#" onclick="jQuery(\'div#ws-plugin--s2member-new-user-email-details\').toggle(); return false;" class="ws-dotted-link">click to customize</a>)</h3>'."\n";
356
  echo '<p style="margin:0;">This email is sent to new Users/Members who did <em>not</em> set a Custom Password during registration.</p>'."\n";
 
 
357
  do_action("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_email", get_defined_vars());
358
 
359
  echo '<div id="ws-plugin--s2member-new-user-email-details" style="display:none;">'."\n";
3
  * Menu page for the s2Member plugin (General Options page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
354
 
355
  echo '<h3 style="margin:0;">New User Email Message (<a href="#" onclick="jQuery(\'div#ws-plugin--s2member-new-user-email-details\').toggle(); return false;" class="ws-dotted-link">click to customize</a>)</h3>'."\n";
356
  echo '<p style="margin:0;">This email is sent to new Users/Members who did <em>not</em> set a Custom Password during registration.</p>'."\n";
357
+ if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"])
358
+ echo '<p class="info" style="font-size:80%; margin:.5em 0 0 0;"><strong>↑ NOTE:</strong> You currently have Custom Passwords enabled in your s2Member Registration/Profile Field options. Therefore, this email is not going to be sent; i.e., it is only sent to users who need it for the purpose of obtaining their password.</p>'."\n";
359
  do_action("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_email", get_defined_vars());
360
 
361
  echo '<div id="ws-plugin--s2member-new-user-email-details" style="display:none;">'."\n";
includes/menu-pages/integrations.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (Integrations page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (Integrations page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/logs.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (Logs page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -52,7 +52,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_logs"))
52
 
53
  echo '<div class="ws-menu-page-section ws-plugin--s2member-help">'."\n";
54
  echo '<h3>Getting Help w/ s2Member (Troubleshooting)</h3>'."\n";
55
- echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://www.s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://www.s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://www.s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://www.s2member.com/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>'."\n";
56
  echo '<p><strong>See also:</strong> <a href="http://www.s2member.com/kb/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
57
 
58
  echo '<div class="ws-menu-page-hr"></div>'."\n";
@@ -67,9 +67,9 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_logs"))
67
 
68
  echo '<div class="ws-menu-page-hr"></div>'."\n";
69
 
70
- echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles, Forums, Codex and more<em>!</em></h3>'."\n";
71
- echo '<form method="get" action="http://www.s2member.com/quick-s.php" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
72
- echo '<p><input type="text" name="q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
73
  echo '</form>'."\n";
74
 
75
  do_action("ws_plugin__s2member_during_logs_page_during_left_sections_during_help", get_defined_vars());
@@ -345,4 +345,4 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_logs"))
345
  }
346
  }
347
 
348
- new c_ws_plugin__s2member_menu_page_logs();
3
  * Menu page for the s2Member plugin (Logs page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
52
 
53
  echo '<div class="ws-menu-page-section ws-plugin--s2member-help">'."\n";
54
  echo '<h3>Getting Help w/ s2Member (Troubleshooting)</h3>'."\n";
55
+ echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://www.s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://www.s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://www.s2member.com/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>'."\n";
56
  echo '<p><strong>See also:</strong> <a href="http://www.s2member.com/kb/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
57
 
58
  echo '<div class="ws-menu-page-hr"></div>'."\n";
67
 
68
  echo '<div class="ws-menu-page-hr"></div>'."\n";
69
 
70
+ echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles<em>!</em></h3>'."\n";
71
+ echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
72
+ echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
73
  echo '</form>'."\n";
74
 
75
  do_action("ws_plugin__s2member_during_logs_page_during_left_sections_during_help", get_defined_vars());
345
  }
346
  }
347
 
348
+ new c_ws_plugin__s2member_menu_page_logs();
includes/menu-pages/menu-pages-s-min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function($){var esc_attr=esc_html=function(string){if(/[&\<\>"']/.test(string=String(string))){string=string.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),string=string.replace(/"/g,"&quot;").replace(/'/g,"&#039;")}return string};ws_plugin__s2member_generateSecurityKey=function(obj){if(!obj){obj="#ws-plugin--s2member-sec-encryption-key"}var mt_rand=function(min,max){min=(arguments.length<1)?0:min;max=(arguments.length<2)?2147483647:max;return Math.floor(Math.random()*(max-min+1))+min};var chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#%^&*()";for(var i=0,key="";i<64;i++){key+=chars.substr(mt_rand(0,chars.length-1),1)}$(obj).val(key);return false};if(location.href.match(/page\=ws-plugin--s2member/)){$("input.ws-plugin--s2member-update-roles-button, input.ws-plugin--s2member-reset-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");var levels='<?php echo (int)$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; ?>';var resetUpdate=($this.hasClass("ws-plugin--s2member-reset-roles-button"))?"Reset":"Update";$.post(ajaxurl,{action:"ws_plugin__s2member_update_roles_via_ajax",ws_plugin__s2member_update_roles_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="1"){alert("s2Member's Roles/Capabilities "+((resetUpdate.toLowerCase()==="reset")?"have been successfully reset":"updated successfully")+".\nYour installation of s2Member has Membership Levels 0-"+levels+"."),$this.val(resetUpdate+" Roles/Capabilities")}else{if(response==="l"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val(resetUpdate+" Roles/Capabilities")}else{alert("Sorry, your request failed.\nAccess denied. Do you have the ability to `create_users`?"),$this.val(resetUpdate+" Roles/Capabilities")}}});return false})}if(location.href.match(/page\=ws-plugin--s2member-logs/)){$("input#ws-plugin--s2member-gateway-debug-logs-extensive-1").click(function(){var $this=$(this),thisChecked=(this.checked)?true:false;if(thisChecked){$("input#ws-plugin--s2member-gateway-debug-logs-1").attr("checked","checked")}});var $toggles=$("a.ws-plugin--s2member-log-file-viewport-toggle");$toggles.click(function(){$("textarea#ws-plugin--s2member-log-file-viewer").each(function(){var $viewer=$(this);if($viewer.attr("data-state")!=="expanded"){$viewer.css({height:($viewer.prop("scrollHeight")+50)+"px","overflow-y":"auto"});$toggles.html("&#8657; normalize viewport &#10073;");$viewer.attr("data-state","expanded")}else{$viewer.css({height:"auto","overflow-y":"scroll"});$toggles.html("&#8659; expand viewport &#8659;");$viewer.attr("data-state","scrolling")}});return false})}if(location.href.match(/page\=ws-plugin--s2member-mms-ops/)){$("select#ws-plugin--s2member-mms-registration-file").change(function(){if($(this).val()==="wp-signup"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((gv==="all")?"show":"hide")]();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((gv==="all")?((l0v>0)?l0v:"1"):"0"))}else{if($(this).val()==="wp-login"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0").hide();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val("0")}}}).trigger("change");$("select#ws-plugin--s2member-mms-registration-grants").change(function(){$("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_enableSecurityKey=function(){if(confirm("Edit Key? Are you sure?\nThis could break your installation!\n\n*Note* If you've been testing s2Member, feel free to change this Key before you go live. Just don't go live, and then change it. You'll have unhappy Customers. Data corruption WILL occur! For your safety, s2Member keeps a history of the last 10 Keys that you've used. If you get yourself into a real situation, s2Member will let you revert back to a previous Key.")){$("input#ws-plugin--s2member-sec-encryption-key").removeAttr("disabled")}return false};ws_plugin__s2member_securityKeyHistory=function(){$("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};$("select#ws-plugin--s2member-new-user-emails-enabled").change(function(){var $pluggable=$("input#ws-plugin--s2member-pluggables-wp-new-user-notification"),$this=$(this),$newUserEmails=$("div#ws-plugin--s2member-new-user-emails");if($pluggable.val()==="0"||$this.val()==="0"){($pluggable.val()==="0")?$this.attr("disabled","disabled"):$this.removeAttr("disabled");$(":input",$newUserEmails).attr("disabled","disabled"),$newUserEmails.css("opacity","0.5")}else{$this.removeAttr("disabled"),$(":input",$newUserEmails).removeAttr("disabled"),$newUserEmails.css("opacity","")}}).trigger("change");$("select#ws-plugin--s2member-login-reg-design-enabled").change(function(){var $this=$(this),$loginRegDesign=$("div#ws-plugin--s2member-login-reg-design");if($this.val()==="0"){$(":input",$loginRegDesign).attr("disabled","disabled"),$loginRegDesign.css("opacity","0.5"),$loginRegDesign.hide()}else{$(":input",$loginRegDesign).removeAttr("disabled"),$loginRegDesign.css("opacity",""),$loginRegDesign.show()}}).trigger("change");if($("input#ws-plugin--s2member-custom-reg-fields").length&&$("div#ws-plugin--s2member-custom-reg-field-configuration").length){(function(){var i,fieldDefaults,tools,table,$tools,$table;var $fields=$("input#ws-plugin--s2member-custom-reg-fields");var $configuration=$("div#ws-plugin--s2member-custom-reg-field-configuration");var fields=($fields.val())?$.JSON.parse($fields.val()):[];fields=(fields instanceof Array)?fields:[];fieldDefaults={section:"no",sectitle:"",id:"",label:"",type:"text",deflt:"",options:"",expected:"",required:"yes",levels:"all",editable:"yes",classes:"",styles:"",attrs:""};for(i=0;i<fields.length;i++){fields[i]=$.extend(true,{},fieldDefaults,fields[i])}tools='<div id="ws-plugin--s2member-custom-reg-field-configuration-tools"></div>',table='<table id="ws-plugin--s2member-custom-reg-field-configuration-table"></table>';$configuration.html(tools+table);$tools=$("div#ws-plugin--s2member-custom-reg-field-configuration-tools"),$table=$("table#ws-plugin--s2member-custom-reg-field-configuration-table");ws_plugin__s2member_customRegFieldSectionChange=function(select){var section=$(select).val();var sectitle_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle";(section==="yes")?$(sectitle_trs).css("display",""):$(sectitle_trs).css("display","none")};ws_plugin__s2member_customRegFieldTypeChange=function(select){var type=$(select).val();var deflt_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt",options_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-options",expected_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected";(type.match(/^(text|textarea)$/))?$(deflt_trs).css("display",""):$(deflt_trs).css("display","none");(type.match(/^(select|selects|checkboxes|radios)$/))?$(options_trs).css("display",""):$(options_trs).css("display","none");(type.match(/^(text|textarea)$/))?$(expected_trs).css("display",""):$(expected_trs).css("display","none")};ws_plugin__s2member_customRegFieldDelete=function(index){var newFields=new Array();for(var i=0;i<fields.length;i++){if(i!==index){newFields.push(fields[i])}}fields=newFields,updateFields(),buildTable()};ws_plugin__s2member_customRegFieldMoveUp=function(index){if(typeof fields[index]==="object"&&typeof fields[index-1]==="object"){var prevFieldObj=fields[index-1],thisFieldObj=fields[index];fields[index-1]=thisFieldObj,fields[index]=prevFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldMoveDown=function(index){if(typeof fields[index]==="object"&&typeof fields[index+1]==="object"){var nextFieldObj=fields[index+1],thisFieldObj=fields[index];fields[index+1]=thisFieldObj,fields[index]=nextFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldCreate=function(){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field))){fields.push(field),updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+(fields.length-1);alert('Field created successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldUpdate=function(index){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field,index))){fields[index]=field,updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+index;alert('Field updated successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldAdd=function(){buildTools(true)};ws_plugin__s2member_customRegFieldEdit=function(index){buildTools(false,index),scrollReset()};ws_plugin__s2member_customRegFieldCancel=function(){buildTools(),scrollReset()};var validateField=function(field,index){var editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,errors=[],options,i;if(typeof field!=="object"||typeof(field=$.extend(true,{},fieldDefaults,field))!=="object"){alert("Invalid field object. Please try again.");return false}field.sectitle=(field.section==="yes")?field.sectitle:"";field.deflt=(field.type.match(/^(text|textarea)$/))?field.deflt:"";field.deflt=(field.type.match(/^(text)$/))?field.deflt.replace(/[\r\n\t ]+/g," "):field.deflt;field.options=(field.type.match(/^(select|selects|checkboxes|radios)$/))?field.options:"";field.expected=(field.type.match(/^(text|textarea)$/))?field.expected:"";if(!field.id){errors.push("Unique Field ID:\nThis is required. Please try again.")}else{if(fieldIdExists(field.id)&&(!editing||field.id!==fields[index].id)){errors.push("Unique Field ID:\nThat Field ID already exists. Please try again.")}}if(!field.label){errors.push("Field Label/Description:\nThis is required. Please try again.")}if(field.type.match(/^(select|selects|checkboxes|radios)$/)&&!field.options){errors.push("Option Configuration File:\nThis is required. Please try again.")}else{if(field.type.match(/^(select|selects|checkboxes|radios)$/)){for(i=0;i<(options=field.options.split(/[\r\n]+/)).length;i++){if(!(options[i]=$.trim(options[i])).match(/^([^\|]*)(\|)([^\|]*)(\|default)?$/)){errors.push("Option Configuration File:\nInvalid configuration at line #"+(i+1)+".");break}}field.options=$.trim(options.join("\n"))}}if(!(field.levels=field.levels.replace(/ /g,""))){errors.push("Applicable Levels:\nThis is required. Please try again.")}else{if(!field.levels.match(/^(all|[0-9,]+)$/)){errors.push("Applicable Levels:\nShould be comma-delimited Levels, or just type: all.\n(examples: 0,1,2,3,4 or type the word: all)")}}if(field.classes&&field.classes.match(/[^a-z 0-9 _ \-]/i)){errors.push("CSS Classes:\nContains invalid characters. Please try again.\n(only: alphanumerics, underscores, hyphens, spaces)")}if(field.styles&&field.styles.match(/["\=\>\<]/)){errors.push('CSS Styles:\nContains invalid characters. Please try again.\n(do NOT use these characters: = " < >)')}if(field.attrs&&field.attrs.match(/[\>\<]/)){errors.push("Other Attributes:\nContains invalid characters. Please try again.\n(do NOT use these characters: < >)")}if(errors.length>0){alert(errors.join("\n\n"));return false}else{return field}};var updateFields=function(){$fields.val(((fields.length>0)?$.JSON.stringify(fields):""))};var fieldId2Var=function(fieldId){return(typeof fieldId==="string")?$.trim(fieldId).toLowerCase().replace(/[^a-z0-9]/g,"_"):""};var fieldTypeDesc=function(type){var types={text:"Text (single line)",textarea:"Textarea (multi-line)",select:"Select Menu (drop-down)",selects:"Select Menu (multi-option)",checkbox:"Checkbox (single)",pre_checkbox:"Checkbox (pre-checked)",checkboxes:"Checkboxes (multi-option)",radios:"Radio Buttons (multi-option)"};if(typeof types[type]==="string"){return types[type]}return""};var fieldIdExists=function(fieldId){for(var i=0;i<fields.length;i++){if(fields[i].id===fieldId){return true}}};var scrollReset=function(){scrollTo(0,$("div.ws-plugin--s2member-custom-reg-fields-section").offset()["top"]-100)};var buildTools=function(adding,index){var i=0,html="",form="",w=0,h=0,editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,displayForm=(adding||editing)?true:false,field=(editing)?$.extend(true,{},fieldDefaults,fields[index]):fieldDefaults;html+='<a href="#" onclick="ws_plugin__s2member_customRegFieldAdd(); return false;">Add New Field</a>';tb_remove(),$("div#ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form").remove();if(displayForm){form+='<div id="ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form">';form+='<table id="ws-plugin--s2member-custom-reg-field-configuration-tools-form">';form+="<tbody>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">Starts A New Section?</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<select property="section" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);">';form+='<option value="no"'+((field.section==="no")?' selected="selected"':"")+'">No (this Field flows normally)</option>';form+='<option value="yes"'+((field.section==="yes")?' selected="selected"':"")+'">Yes (this Field begins a new section)</option>';form+="</select><br />";form+="<small>Optional. Allows Fields to be grouped into sections.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+'><td colspan="2"><hr /></td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+">";form+='<td colspan="2">';form+="Title for this new section? (optional)<br />";form+='<input type="text" property="sectitle" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle" value="'+esc_attr(field.sectitle)+'" /><br />';form+="<small>If empty, a simple divider will be used by default.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-type"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">Form Field Type: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<select property="type" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);">';form+='<option value="text"'+((field.type==="text")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("text"))+"</option>";form+='<option value="textarea"'+((field.type==="textarea")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("textarea"))+"</option>";form+='<option value="select"'+((field.type==="select")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("select"))+"</option>";form+='<option value="selects"'+((field.type==="selects")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("selects"))+"</option>";form+='<option value="checkbox"'+((field.type==="checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkbox"))+"</option>";form+='<option value="pre_checkbox"'+((field.type==="pre_checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("pre_checkbox"))+"</option>";form+='<option value="checkboxes"'+((field.type==="checkboxes")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkboxes"))+"</option>";form+='<option value="radios"'+((field.type==="radios")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("radios"))+"</option>";form+="</select><br />";form+="<small>The options below may change, based on the Field Type you choose here.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-label"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">Field Label/Desc: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<input type="text" property="label" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label" value="'+esc_attr(field.label)+'" /><br />';form+="<small>Examples: <code>Choose Country</code>, <code>Street Address</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-id"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">Unique Field ID: *</label></label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<input type="text" property="id" maxlength="25" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id" value="'+esc_attr(field.id)+'" /><br />';form+="<small>Examples: <code>country_code</code>, <code>street_address</code></small><br />";form+='<small>e.g., <code>[s2Get user_field="country_code" /]</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-required"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">Field Required: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<select property="required" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<option value="yes"'+((field.required==="yes")?' selected="selected"':"")+'">Yes (required)</option>';form+='<option value="no"'+((field.required==="no")?' selected="selected"':"")+'">No (optional)</option>';form+="</select><br />";form+='<small>If <code>yes</code>, only Users/Members will be "required" to enter this field.</small><br />';form+="<small>* Administrators are exempt from this requirement.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt">Default Text Value: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="deflt" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt" rows="1">'+esc_html(field.deflt)+"</textarea><br />";form+="<small>Default value before user input is received.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+'><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">Option Configuration File: * (one option per line)</label><br />';form+="<small>Use a pipe <code>|</code> delimited format: <code>option value|option label</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="options" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options" rows="3">'+esc_html(field.options)+"</textarea><br />";form+="Here is a quick example:<br />";form+="<small>You can also specify a <em>default</em> option:</small><br />";form+="<code>US|United States|default</code><br />";form+="<code>CA|Canada</code><br />";form+="<code>VI|Virgin Islands (U.S.)</code>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">Expected Format: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<select property="expected" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">';form+='<option value=""'+((field.expected==="")?' selected="selected"':"")+'">Anything Goes</option>';form+='<option disabled="disabled"></option>';form+='<optgroup label="Specific Input Types">';form+='<option value="numeric-wp-commas"'+((field.expected==="numeric-wp-commas")?' selected="selected"':"")+'">Numeric (with or without decimals, commas allowed)</option>';form+='<option value="numeric"'+((field.expected==="numeric")?' selected="selected"':"")+'">Numeric (with or without decimals, no commas)</option>';form+='<option value="integer"'+((field.expected==="integer")?' selected="selected"':"")+'">Integer (whole number, without any decimals)</option>';form+='<option value="integer-gt-0"'+((field.expected==="integer-gt-0")?' selected="selected"':"")+'">Integer > 0 (whole number, no decimals, greater than 0)</option>';form+='<option value="float"'+((field.expected==="float")?' selected="selected"':"")+'">Float (floating point number, decimals required)</option>';form+='<option value="float-gt-0"'+((field.expected==="float-gt-0")?' selected="selected"':"")+'">Float > 0 (floating point number, decimals required, greater than 0)</option>';form+='<option value="date"'+((field.expected==="date")?' selected="selected"':"")+'">Date (required date format: dd/mm/yyyy)</option>';form+='<option value="email"'+((field.expected==="email")?' selected="selected"':"")+'">Email (require valid email)</option>';form+='<option value="url"'+((field.expected==="url")?' selected="selected"':"")+'">Full URL (starting with http or https)</option>';form+='<option value="domain"'+((field.expected==="domain")?' selected="selected"':"")+'">Domain Name (domain name only, without http)</option>';form+='<option value="phone"'+((field.expected==="phone")?' selected="selected"':"")+'">Phone # (10 digits w/possible hyphens,spaces,brackets)</option>';form+='<option value="uszip"'+((field.expected==="uszip")?' selected="selected"':"")+'">US Zipcode (5-9 digits w/possible hyphen)</option>';form+='<option value="cazip"'+((field.expected==="cazip")?' selected="selected"':"")+'">Canadian Zipcode (6 alpha-numerics w/possible space)</option>';form+='<option value="uczip"'+((field.expected==="uczip")?' selected="selected"':"")+'">US/Canadian Zipcode (either a US or Canadian zipcode)</option>';form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Any Character Combination">';for(i=1;i<=25;i++){form+='<option value="any-'+i+'"'+((field.expected==="any-"+i)?' selected="selected"':"")+'">Any Character Combination ('+i+" character minimum)</option>";form+='<option value="any-'+i+'-e"'+((field.expected==="any-"+i+"-e")?' selected="selected"':"")+'">Any Character Combination (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics, Spaces &amp; Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-punctuation-'+i+'"'+((field.expected==="alphanumerics-spaces-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics, Spaces &amp; Punctuation ('+i+" character minimum)</option>";form+='<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-spaces-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics, Spaces &amp; Punctuation (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics &amp; Spaces Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-'+i+'"'+((field.expected==="alphanumerics-spaces-"+i)?' selected="selected"':"")+'">Alphanumerics &amp; Spaces ('+i+" character minimum)</option>";form+='<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected==="alphanumerics-spaces-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics &amp; Spaces (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics &amp; Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-punctuation-'+i+'"'+((field.expected==="alphanumerics-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics &amp; Punctuation ('+i+" character minimum)</option>";form+='<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics &amp; Punctuation (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-'+i+'"'+((field.expected==="alphanumerics-"+i)?' selected="selected"':"")+'">Alphanumerics ('+i+" character minimum)</option>";form+='<option value="alphanumerics-'+i+'-e"'+((field.expected==="alphanumerics-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphabetics Only">';for(i=1;i<=25;i++){form+='<option value="alphabetics-'+i+'"'+((field.expected==="alphabetics-"+i)?' selected="selected"':"")+'">Alphabetics ('+i+" character minimum)</option>";form+='<option value="alphabetics-'+i+'-e"'+((field.expected==="alphabetics-"+i+"-e")?' selected="selected"':"")+'">Alphabetics (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Numeric Digits Only">';for(i=1;i<=25;i++){form+='<option value="numerics-'+i+'"'+((field.expected==="numerics-"+i)?' selected="selected"':"")+'">Numeric Digits ('+i+" digit minimum)</option>";form+='<option value="numerics-'+i+'-e"'+((field.expected==="numerics-"+i+"-e")?' selected="selected"':"")+'">Numeric Digits (exactly '+i+" digit"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+="</select><br />";form+="<small>Only Users/Members will be required to meet this criteria.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">Applicable Membership Levels: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<input type="text" property="levels" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels" value="'+esc_attr(field.levels)+'" /><br />';form+="<small>Please use comma-delimited Level #'s: <code>0,1,2,3,4</code> or type: <code>all</code>.</small><br />";form+="<small>This allows you to enable this field - only at specific Membership Levels.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">Allow Profile Edits: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<select property="editable" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<option value="yes"'+((field.editable==="yes")?' selected="selected"':"")+'">Yes (editable)</option>';form+='<option value="no"'+((field.editable==="no")?' selected="selected"':"")+'">No (uneditable after registration)</option>';form+='<option value="no-invisible"'+((field.editable==="no-invisible")?' selected="selected"':"")+'">No (uneditable &amp; totally invisible after registration)</option>';form+='<option value="no-always-invisible"'+((field.editable==="no-always-invisible")?' selected="selected"':"")+'">No (uneditable &amp; totally invisible, both during &amp; after registration)</option>';form+='<option value="yes-invisible"'+((field.editable==="yes-invisible")?' selected="selected"':"")+'">Yes (editable after registration / invisible during registration)</option>';form+="</select><br />";form+="<small>If <code>No</code>, this field will be un-editable after registration.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">CSS Classes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<input type="text" property="classes" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes" value="'+esc_attr(field.classes)+'" /><br />';form+="<small>Example: <code>my-style-1 my-style-2</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">CSS Styles: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<input type="text" property="styles" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles" value="'+esc_attr(field.styles)+'" /><br />';form+="<small>Example: <code>color:#000000; background:#FFFFFF;</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">Other Attributes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<input type="text" property="attrs" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs" value="'+esc_attr(field.attrs)+'" /><br />';form+='<small>Example: <code>onkeyup="" onblur=""</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons">';form+='<td align="left">';form+='<input type="button" value="Cancel" onclick="ws_plugin__s2member_customRegFieldCancel();" />';form+="</td>";form+='<td align="right">';form+='<input type="button" value="'+((editing)?"Update This Field":"Create Registration Field")+'" onclick="'+((editing)?"ws_plugin__s2member_customRegFieldUpdate("+index+");":"ws_plugin__s2member_customRegFieldCreate();")+'" />';form+="</td>";form+="</tr>";form+="</tbody>";form+="</table>";form+="<div>";$("body").append(form);tb_show(((editing)?"Editing Registration/Profile Field":"New Custom Registration/Profile Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var buildTable=function(){var l=fields.length,i=0,html="",eo="o";html+="<tbody>";html+="<tr>";html+="<th>Order</th>";html+="<th>Field Type</th>";html+="<th>Unique ID</th>";html+="<th>Required</th>";html+="<th>Levels</th>";html+="<th>- Tools -</th>";html+="</tr>";if(fields.length>0){for(i=0;i<fields.length;i++){html+='<tr class="'+esc_attr((eo=(eo==="o")?"e":"o"))+((fields[i].section==="yes")?" s":"")+" ws-plugin--s2member-custom-reg-field-configuration-table-row-"+i+'">';html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-move-up" href="#" onclick="ws_plugin__s2member_customRegFieldMoveUp('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-move-down" href="#" onclick="ws_plugin__s2member_customRegFieldMoveDown('+i+'); return false;"></a></td>';html+='<td nowrap="nowrap">'+esc_html(fieldTypeDesc(fields[i].type))+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].id)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].required)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].levels)+"</td>";html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-edit" href="#" onclick="ws_plugin__s2member_customRegFieldEdit('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-delete" href="#" onclick="ws_plugin__s2member_customRegFieldDelete('+i+'); return false;"></a></td>';html+="</tr>"}}else{html+="<tr>";html+='<td colspan="6">No Custom Fields are configured.</td>';html+="</tr>"}html+="</tbody>";$table.html(html)};buildTools(),buildTable()})()}}if(location.href.match(/page\=ws-plugin--s2member-res-ops/)){$("input#ws-plugin--s2member-brute-force-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's Brute Force Restriction Logs have all been reset."),$this.val("Reset Brute Force Logs")});return false});$("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's IP Restriction Logs have all been reset."),$this.val("Reset IP Restriction Logs")});return false});$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').change(function(){var thisChange=$(this).val();$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="all"&&this.checked){$this.nextAll(checkboxes).attr({checked:"checked",disabled:"disabled"})}else{if(val==="all"&&!this.checked){$this.nextAll(checkboxes).removeAttr("disabled");(thisChange==="all")?$this.nextAll(checkboxes).removeAttr("checked"):null}}})}).last().trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-down-ops/)){var updateCloudFrontPrivateKey=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyEntry=$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry");var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyEntryValue=$.trim($visiblePrivateKeyEntry.val());if((hiddenPrivateKeyValue&&!visiblePrivateKeyEntryValue)||visiblePrivateKeyEntryValue.match(/[^\r\n\u25CF]/)){$hiddenPrivateKey.val(visiblePrivateKeyEntryValue),$visiblePrivateKeyEntry.val(visiblePrivateKeyEntryValue.replace(/[^\r\n]/g,String.fromCharCode(9679)))}};$("form#ws-plugin--s2member-options-form").submit(updateCloudFrontPrivateKey);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontPrivateKey).trigger("change");var updateCloudFrontDistroCfgs=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyId=$("input#ws-plugin--s2member-amazon-cf-files-private-key-id");var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistrosStatus=$("input#ws-plugin--s2member-amazon-cf-files-distros-auto-config-status");var autoConfigDistrosStatusValue=$.trim($autoConfigDistrosStatus.val());var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyIdValue=$.trim($visiblePrivateKeyId.val());var hiddenPrivateKeyPrevConfigValue=$.trim($hiddenPrivateKey.attr("data-s-prev-config-value")),visiblePrivateKeyIdPrevConfigValue=$.trim($visiblePrivateKeyId.attr("data-s-prev-config-value"));if(autoConfigDistrosStatusValue==="configured"&&((visiblePrivateKeyIdPrevConfigValue&&visiblePrivateKeyIdValue!==visiblePrivateKeyIdPrevConfigValue)||(hiddenPrivateKeyPrevConfigValue&&hiddenPrivateKeyValue!==hiddenPrivateKeyPrevConfigValue))){alert("s2Member will need to delete and re-configure your Amazon CloudFront distributions if you change this. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}else{if(autoConfigDistrosStatusValue!=="configured"&&visiblePrivateKeyIdValue&&hiddenPrivateKeyValue){alert("s2Member will need to auto-configure your Amazon CloudFront distributions for you. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}}};$("input#ws-plugin--s2member-amazon-cf-files-private-key-id").change(updateCloudFrontDistroCfgs);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontDistroCfgs);$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros-w-cnames").change(function(){var $this=$(this),thisChecked=(this.checked)?true:false;var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistroCnames=$("div#ws-plugin--s2member-amazon-cf-files-auto-configure-distro-cnames");(thisChecked)?$autoConfigDistroCnames.show():$autoConfigDistroCnames.hide();(thisChecked)?$autoConfigDistros.attr("checked","checked"):null}).trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){$("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var $this=$(this),val=$this.val();var $viaCron=$("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(val==2){$viaCron.show()}else{$viaCron.hide()}})}if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){$("div.ws-menu-page select[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification)-term$/)}).change(function(){var button=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var trialDisabled=($(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;$("p#ws-plugin--s2member-"+button+"-trial-line").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-trial-then").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-20p-rule").css("display",(trialDisabled?"none":""));(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-period").val(0):null;(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-amount").val("0.00"):null});$("div.ws-menu-page input[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification|ccap)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^(-all|-al|-a|-)[;,]*/gi,""),_all=(this.value.match(/^(-all|-al|-a|-)[;,]*/i))?"-all,":"";if(value.match(/[^a-z_0-9,]/)){this.value=_all+$.trim($.trim(value).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(button){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="",labels={};eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");var shortCode=$("input#ws-plugin--s2member-"+button+"-shortcode");var code=$("textarea#ws-plugin--s2member-"+button+"-button");var modLevel=$("select#ws-plugin--s2member-modification-level");var level=(button==="modification")?modLevel.val().split(":",2)[1]:button.replace(/^level/,"");var label=labels["level"+level].replace(/"/g,"");var desc=$.trim($("input#ws-plugin--s2member-"+button+"-desc").val().replace(/"/g,""));var trialAmount=$("input#ws-plugin--s2member-"+button+"-trial-amount").val().replace(/[^0-9\.]/g,"");var trialPeriod=$("input#ws-plugin--s2member-"+button+"-trial-period").val().replace(/[^0-9]/g,"");var trialTerm=$("select#ws-plugin--s2member-"+button+"-trial-term").val().replace(/[^A-Z]/g,"");var regAmount=$("input#ws-plugin--s2member-"+button+"-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var regRecurTimes="",regRecurRetry="1";var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-"+button+"-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-"+button+"-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&&regTerm!=="L")?level+":"+cCaps+":"+regPeriod+" "+regTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(trialAmount!=="0"&&(isNaN(trialAmount)||trialAmount<0)){alert("— Oops, a slight problem: —\n\nWhen provided, Trial Amount must be >= 0.00");return false}else{if(trialAmount!=="0"&&trialAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00");return false}else{if(trialTerm==="D"&&trialPeriod>90){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 90.\nIf you want to offer more than 90 days, please choose Weeks or Months from the drop-down.");return false}else{if(trialTerm==="W"&&trialPeriod>52){alert("— Oops, a slight problem: —\n\nMaximum Trial Weeks is: 52.\nIf you want to offer more than 52 weeks, please choose Months from the drop-down.");return false}else{if(trialTerm==="M"&&trialPeriod>24){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 24.\nIf you want to offer more than 24 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>5){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 5.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}}}}}}code.html(code.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(trialPeriod)<=0)?code.html(code.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="(src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;shortCodeTemplateAttrs+=(button==="modification")?'modify="1" ':"";shortCodeTemplateAttrs+='level="'+esc_attr(level)+'" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'" custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"';shortCodeTemplateAttrs+=' ta="'+esc_attr(trialAmount)+'" tp="'+esc_attr(trialPeriod)+'" tt="'+esc_attr(trialTerm)+'" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'" rrt="'+esc_attr(regRecurTimes)+'" rra="'+esc_attr(regRecurRetry)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((button==="modification")?"1":"0")+'"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+esc_attr(regRecur)+'"'));code.html(code.val().replace(/ name\="srt" value\="(.*?)"/,' name="srt" value="'+esc_attr(regRecurTimes)+'"'));code.html(code.val().replace(/ name\="sra" value\="(.*?)"/,' name="sra" value="'+esc_attr(regRecurRetry)+'"'));code.html(code.val().replace(/ name\="a1" value\="(.*?)"/,' name="a1" value="'+esc_attr(trialAmount)+'"'));code.html(code.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+esc_attr(trialPeriod)+'"'));code.html(code.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+esc_attr(trialTerm)+'"'));code.html(code.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+esc_attr(regPeriod)+'"'));code.html(code.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+esc_attr(regTerm)+'"'));$("div#ws-plugin--s2member-"+button+"-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Modification Buttons should be displayed to existing Users/Members, and they should be logged-in, BEFORE clicking this Button."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalCcapButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-ccap-shortcode");var code=$("textarea#ws-plugin--s2member-ccap-button");var desc=$.trim($("input#ws-plugin--s2member-ccap-desc").val().replace(/"/g,""));var regAmount=$("input#ws-plugin--s2member-ccap-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-ccap-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-ccap-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-ccap-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-ccap-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-ccap-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();var levelCcapsPer=(regRecur==="BN"&&regTerm!=="L")?"*:"+cCaps+":"+regPeriod+" "+regTerm:"*:"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!cCaps||cCaps==="-all"){alert("— Oops, a slight problem: —\n\nPlease provide at least one Custom Capability.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}shortCodeTemplateAttrs+='level="*" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-ccap-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-sp-shortcode");var code=$("textarea#ws-plugin--s2member-sp-button");var leading=$("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var regAmount=$("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var desc=$.trim($("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member → Restriction Options → Specific Post/Page Access.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}var spIdsHours="sp:"+ids+":"+hours;shortCodeTemplateAttrs+='sp="1" ids="'+esc_attr(ids)+'" exp="'+esc_attr(hours)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(spIdsHours)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-sp-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your WordPress Editor.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalRegLinkGenerate=function(){var level=$("select#ws-plugin--s2member-reg-link-level").val().replace(/[^0-9]/g,"");var subscrID=$.trim($("input#ws-plugin--s2member-reg-link-subscr-id").val());var custom=$.trim($("input#ws-plugin--s2member-reg-link-custom").val());var cCaps=$.trim($.trim($("input#ws-plugin--s2member-reg-link-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());var fixedTerm=$.trim($("input#ws-plugin--s2member-reg-link-fixed-term").val().replace(/[^A-Z 0-9]/gi,"").toUpperCase());var $link=$("p#ws-plugin--s2member-reg-link"),$loading=$("img#ws-plugin--s2member-reg-link-loading");var levelCcapsPer=(fixedTerm&&!fixedTerm.match(/L$/))?level+":"+cCaps+":"+fixedTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!subscrID){alert("— Oops, a slight problem: —\n\nPaid Subscr. ID is a required value.");return false}else{if(!custom||custom.indexOf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq ($_SERVER["HTTP_HOST"]); ?>')!==0){alert("— Oops, a slight problem: —\n\nThe Custom Value MUST start with your domain name.");return false}else{if(fixedTerm&&!fixedTerm.match(/^[1-9]+ (D|W|M|Y|L)$/)){alert("— Oops, a slight problem: —\n\nThe Fixed Term Length is not formatted properly.");return false}}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_reg_access_link_via_ajax",ws_plugin__s2member_reg_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-reg-access-link-via-ajax")); ?>',s2member_reg_access_link_subscr_gateway:"paypal",s2member_reg_access_link_subscr_id:subscrID,s2member_reg_access_link_custom:custom,s2member_reg_access_link_item_number:levelCcapsPer},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var leading=$("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var $link=$("p#ws-plugin--s2member-sp-link"),$loading=$("img#ws-plugin--s2member-sp-link-loading");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member → Restriction Options → Specific Post/Page Access.");return false}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:ids,s2member_sp_access_link_hours:hours},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false}}if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){$("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var $this=$(this),val=$this.val();var $rows=$("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var $prevImg=$("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(val<=0){$rows.css("display","none"),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(val==1){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(val==2){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}});$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').change(function(){var thisChange=$(this).val(),checkedIndexes=[];$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="removal-deletion"&&this.checked){$this.nextAll(checkboxes).slice(0,2).attr({checked:"checked",disabled:"disabled"})}else{if(val==="removal-deletion"&&!this.checked){$this.nextAll(checkboxes).slice(0,2).removeAttr("disabled");(thisChange==="removal-deletion")?$this.nextAll(checkboxes).slice(0,2).removeAttr("checked"):null}else{if(val==="modification"&&this.checked){$this.nextAll(checkboxes).slice(0,3).attr({checked:"checked",disabled:"disabled"})}else{if(val==="modification"&&!this.checked){(thisChange==="modification")?$this.nextAll(checkboxes).slice(0,3).removeAttr("checked"):null;$this.nextAll(checkboxes).slice(0,3).removeAttr("disabled")}}}}}).each(function(index){(this.checked)?checkedIndexes.push(index):null});$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").removeAttr("disabled");if($.inArray(3,checkedIndexes)===-1&&$.inArray(4,checkedIndexes)===-1&&$.inArray(5,checkedIndexes)===-1&&$.inArray(6,checkedIndexes)===-1){$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").attr("disabled","disabled")}}).last().trigger("change")}});
1
+ jQuery(document).ready(function($){var esc_attr=esc_html=function(string){if(/[&\<\>"']/.test(string=String(string))){string=string.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),string=string.replace(/"/g,"&quot;").replace(/'/g,"&#039;")}return string};ws_plugin__s2member_generateSecurityKey=function(obj){if(!obj){obj="#ws-plugin--s2member-sec-encryption-key"}var mt_rand=function(min,max){min=(arguments.length<1)?0:min;max=(arguments.length<2)?2147483647:max;return Math.floor(Math.random()*(max-min+1))+min};var chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#%^&*()";for(var i=0,key="";i<64;i++){key+=chars.substr(mt_rand(0,chars.length-1),1)}$(obj).val(key);return false};if(location.href.match(/page\=ws-plugin--s2member/)){$("input.ws-plugin--s2member-update-roles-button, input.ws-plugin--s2member-reset-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");var levels='<?php echo (int)$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; ?>';var resetUpdate=($this.hasClass("ws-plugin--s2member-reset-roles-button"))?"Reset":"Update";$.post(ajaxurl,{action:"ws_plugin__s2member_update_roles_via_ajax",ws_plugin__s2member_update_roles_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="1"){alert("s2Member's Roles/Capabilities "+((resetUpdate.toLowerCase()==="reset")?"have been successfully reset":"updated successfully")+".\nYour installation of s2Member has Membership Levels 0-"+levels+"."),$this.val(resetUpdate+" Roles/Capabilities")}else{if(response==="l"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val(resetUpdate+" Roles/Capabilities")}else{alert("Sorry, your request failed.\nAccess denied. Do you have the ability to `create_users`?"),$this.val(resetUpdate+" Roles/Capabilities")}}});return false})}if(location.href.match(/page\=ws-plugin--s2member-logs/)){$("input#ws-plugin--s2member-gateway-debug-logs-extensive-1").click(function(){var $this=$(this),thisChecked=(this.checked)?true:false;if(thisChecked){$("input#ws-plugin--s2member-gateway-debug-logs-1").attr("checked","checked")}});var $toggles=$("a.ws-plugin--s2member-log-file-viewport-toggle");$toggles.click(function(){$("textarea#ws-plugin--s2member-log-file-viewer").each(function(){var $viewer=$(this);if($viewer.attr("data-state")!=="expanded"){$viewer.css({height:($viewer.prop("scrollHeight")+50)+"px","overflow-y":"auto"});$toggles.html("&#8657; normalize viewport &#10073;");$viewer.attr("data-state","expanded")}else{$viewer.css({height:"auto","overflow-y":"scroll"});$toggles.html("&#8659; expand viewport &#8659;");$viewer.attr("data-state","scrolling")}});return false})}if(location.href.match(/page\=ws-plugin--s2member-mms-ops/)){$("select#ws-plugin--s2member-mms-registration-file").change(function(){if($(this).val()==="wp-signup"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((gv==="all")?"show":"hide")]();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((gv==="all")?((l0v>0)?l0v:"1"):"0"))}else{if($(this).val()==="wp-login"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0").hide();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val("0")}}}).trigger("change");$("select#ws-plugin--s2member-mms-registration-grants").change(function(){$("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_enableSecurityKey=function(){if(confirm("Edit Key? Are you sure?\nThis could break your installation!\n\n*Note* If you've been testing s2Member, feel free to change this Key before you go live. Just don't go live, and then change it. You'll have unhappy Customers. Data corruption WILL occur! For your safety, s2Member keeps a history of the last 10 Keys that you've used. If you get yourself into a real situation, s2Member will let you revert back to a previous Key.")){$("input#ws-plugin--s2member-sec-encryption-key").removeAttr("disabled")}return false};ws_plugin__s2member_securityKeyHistory=function(){$("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};$("select#ws-plugin--s2member-new-user-emails-enabled").change(function(){var $pluggable=$("input#ws-plugin--s2member-pluggables-wp-new-user-notification"),$this=$(this),$newUserEmails=$("div#ws-plugin--s2member-new-user-emails");if($pluggable.val()==="0"||$this.val()==="0"){($pluggable.val()==="0")?$this.attr("disabled","disabled"):$this.removeAttr("disabled");$(":input",$newUserEmails).attr("disabled","disabled"),$newUserEmails.css("opacity","0.5")}else{$this.removeAttr("disabled"),$(":input",$newUserEmails).removeAttr("disabled"),$newUserEmails.css("opacity","")}}).trigger("change");$("select#ws-plugin--s2member-login-reg-design-enabled").change(function(){var $this=$(this),$loginRegDesign=$("div#ws-plugin--s2member-login-reg-design");if($this.val()==="0"){$(":input",$loginRegDesign).attr("disabled","disabled"),$loginRegDesign.css("opacity","0.5"),$loginRegDesign.hide()}else{$(":input",$loginRegDesign).removeAttr("disabled"),$loginRegDesign.css("opacity",""),$loginRegDesign.show()}}).trigger("change");$("select#ws-plugin--s2member-custom-reg-password").change(function(){var $this=$(this),$newUserNotification=$("div#ws-plugin--s2member-new-user-email-details");if($this.val()==="1"){$newUserNotification.css("opacity","0.5")}else{$newUserNotification.css("opacity","")}}).trigger("change");if($("input#ws-plugin--s2member-custom-reg-fields").length&&$("div#ws-plugin--s2member-custom-reg-field-configuration").length){(function(){var i,fieldDefaults,tools,table,$tools,$table;var $fields=$("input#ws-plugin--s2member-custom-reg-fields");var $configuration=$("div#ws-plugin--s2member-custom-reg-field-configuration");var fields=($fields.val())?$.JSON.parse($fields.val()):[];fields=(fields instanceof Array)?fields:[];fieldDefaults={section:"no",sectitle:"",id:"",label:"",type:"text",deflt:"",options:"",expected:"",required:"yes",levels:"all",editable:"yes",classes:"",styles:"",attrs:""};for(i=0;i<fields.length;i++){fields[i]=$.extend(true,{},fieldDefaults,fields[i])}tools='<div id="ws-plugin--s2member-custom-reg-field-configuration-tools"></div>',table='<table id="ws-plugin--s2member-custom-reg-field-configuration-table"></table>';$configuration.html(tools+table);$tools=$("div#ws-plugin--s2member-custom-reg-field-configuration-tools"),$table=$("table#ws-plugin--s2member-custom-reg-field-configuration-table");ws_plugin__s2member_customRegFieldSectionChange=function(select){var section=$(select).val();var sectitle_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle";(section==="yes")?$(sectitle_trs).css("display",""):$(sectitle_trs).css("display","none")};ws_plugin__s2member_customRegFieldTypeChange=function(select){var type=$(select).val();var deflt_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt",options_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-options",expected_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected";(type.match(/^(text|textarea)$/))?$(deflt_trs).css("display",""):$(deflt_trs).css("display","none");(type.match(/^(select|selects|checkboxes|radios)$/))?$(options_trs).css("display",""):$(options_trs).css("display","none");(type.match(/^(text|textarea)$/))?$(expected_trs).css("display",""):$(expected_trs).css("display","none")};ws_plugin__s2member_customRegFieldDelete=function(index){var newFields=new Array();for(var i=0;i<fields.length;i++){if(i!==index){newFields.push(fields[i])}}fields=newFields,updateFields(),buildTable()};ws_plugin__s2member_customRegFieldMoveUp=function(index){if(typeof fields[index]==="object"&&typeof fields[index-1]==="object"){var prevFieldObj=fields[index-1],thisFieldObj=fields[index];fields[index-1]=thisFieldObj,fields[index]=prevFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldMoveDown=function(index){if(typeof fields[index]==="object"&&typeof fields[index+1]==="object"){var nextFieldObj=fields[index+1],thisFieldObj=fields[index];fields[index+1]=thisFieldObj,fields[index]=nextFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldCreate=function(){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field))){fields.push(field),updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+(fields.length-1);alert('Field created successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldUpdate=function(index){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field,index))){fields[index]=field,updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+index;alert('Field updated successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldAdd=function(){buildTools(true)};ws_plugin__s2member_customRegFieldEdit=function(index){buildTools(false,index),scrollReset()};ws_plugin__s2member_customRegFieldCancel=function(){buildTools(),scrollReset()};var validateField=function(field,index){var editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,errors=[],options,i;if(typeof field!=="object"||typeof(field=$.extend(true,{},fieldDefaults,field))!=="object"){alert("Invalid field object. Please try again.");return false}field.sectitle=(field.section==="yes")?field.sectitle:"";field.deflt=(field.type.match(/^(text|textarea)$/))?field.deflt:"";field.deflt=(field.type.match(/^(text)$/))?field.deflt.replace(/[\r\n\t ]+/g," "):field.deflt;field.options=(field.type.match(/^(select|selects|checkboxes|radios)$/))?field.options:"";field.expected=(field.type.match(/^(text|textarea)$/))?field.expected:"";if(!field.id){errors.push("Unique Field ID:\nThis is required. Please try again.")}else{if(fieldIdExists(field.id)&&(!editing||field.id!==fields[index].id)){errors.push("Unique Field ID:\nThat Field ID already exists. Please try again.")}}if(!field.label){errors.push("Field Label/Description:\nThis is required. Please try again.")}if(field.type.match(/^(select|selects|checkboxes|radios)$/)&&!field.options){errors.push("Option Configuration File:\nThis is required. Please try again.")}else{if(field.type.match(/^(select|selects|checkboxes|radios)$/)){for(i=0;i<(options=field.options.split(/[\r\n]+/)).length;i++){if(!(options[i]=$.trim(options[i])).match(/^([^\|]*)(\|)([^\|]*)(\|default)?$/)){errors.push("Option Configuration File:\nInvalid configuration at line #"+(i+1)+".");break}}field.options=$.trim(options.join("\n"))}}if(!(field.levels=field.levels.replace(/ /g,""))){errors.push("Applicable Levels:\nThis is required. Please try again.")}else{if(!field.levels.match(/^(all|[0-9,]+)$/)){errors.push("Applicable Levels:\nShould be comma-delimited Levels, or just type: all.\n(examples: 0,1,2,3,4 or type the word: all)")}}if(field.classes&&field.classes.match(/[^a-z 0-9 _ \-]/i)){errors.push("CSS Classes:\nContains invalid characters. Please try again.\n(only: alphanumerics, underscores, hyphens, spaces)")}if(field.styles&&field.styles.match(/["\=\>\<]/)){errors.push('CSS Styles:\nContains invalid characters. Please try again.\n(do NOT use these characters: = " < >)')}if(field.attrs&&field.attrs.match(/[\>\<]/)){errors.push("Other Attributes:\nContains invalid characters. Please try again.\n(do NOT use these characters: < >)")}if(errors.length>0){alert(errors.join("\n\n"));return false}else{return field}};var updateFields=function(){$fields.val(((fields.length>0)?$.JSON.stringify(fields):""))};var fieldId2Var=function(fieldId){return(typeof fieldId==="string")?$.trim(fieldId).toLowerCase().replace(/[^a-z0-9]/g,"_"):""};var fieldTypeDesc=function(type){var types={text:"Text (single line)",textarea:"Textarea (multi-line)",select:"Select Menu (drop-down)",selects:"Select Menu (multi-option)",checkbox:"Checkbox (single)",pre_checkbox:"Checkbox (pre-checked)",checkboxes:"Checkboxes (multi-option)",radios:"Radio Buttons (multi-option)"};if(typeof types[type]==="string"){return types[type]}return""};var fieldIdExists=function(fieldId){for(var i=0;i<fields.length;i++){if(fields[i].id===fieldId){return true}}};var scrollReset=function(){scrollTo(0,$("div.ws-plugin--s2member-custom-reg-fields-section").offset()["top"]-100)};var buildTools=function(adding,index){var i=0,html="",form="",w=0,h=0,editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,displayForm=(adding||editing)?true:false,field=(editing)?$.extend(true,{},fieldDefaults,fields[index]):fieldDefaults;html+='<a href="#" onclick="ws_plugin__s2member_customRegFieldAdd(); return false;">Add New Field</a>';tb_remove(),$("div#ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form").remove();if(displayForm){form+='<div id="ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form">';form+='<table id="ws-plugin--s2member-custom-reg-field-configuration-tools-form">';form+="<tbody>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">Starts A New Section?</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<select property="section" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);">';form+='<option value="no"'+((field.section==="no")?' selected="selected"':"")+'">No (this Field flows normally)</option>';form+='<option value="yes"'+((field.section==="yes")?' selected="selected"':"")+'">Yes (this Field begins a new section)</option>';form+="</select><br />";form+="<small>Optional. Allows Fields to be grouped into sections.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+'><td colspan="2"><hr /></td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+">";form+='<td colspan="2">';form+="Title for this new section? (optional)<br />";form+='<input type="text" property="sectitle" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle" value="'+esc_attr(field.sectitle)+'" /><br />';form+="<small>If empty, a simple divider will be used by default.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-type"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">Form Field Type: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<select property="type" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);">';form+='<option value="text"'+((field.type==="text")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("text"))+"</option>";form+='<option value="textarea"'+((field.type==="textarea")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("textarea"))+"</option>";form+='<option value="select"'+((field.type==="select")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("select"))+"</option>";form+='<option value="selects"'+((field.type==="selects")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("selects"))+"</option>";form+='<option value="checkbox"'+((field.type==="checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkbox"))+"</option>";form+='<option value="pre_checkbox"'+((field.type==="pre_checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("pre_checkbox"))+"</option>";form+='<option value="checkboxes"'+((field.type==="checkboxes")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkboxes"))+"</option>";form+='<option value="radios"'+((field.type==="radios")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("radios"))+"</option>";form+="</select><br />";form+="<small>The options below may change, based on the Field Type you choose here.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-label"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">Field Label/Desc: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<input type="text" property="label" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label" value="'+esc_attr(field.label)+'" /><br />';form+="<small>Examples: <code>Choose Country</code>, <code>Street Address</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-id"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">Unique Field ID: *</label></label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<input type="text" property="id" maxlength="25" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id" value="'+esc_attr(field.id)+'" /><br />';form+="<small>Examples: <code>country_code</code>, <code>street_address</code></small><br />";form+='<small>e.g., <code>[s2Get user_field="country_code" /]</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-required"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">Field Required: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<select property="required" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<option value="yes"'+((field.required==="yes")?' selected="selected"':"")+'">Yes (required)</option>';form+='<option value="no"'+((field.required==="no")?' selected="selected"':"")+'">No (optional)</option>';form+="</select><br />";form+='<small>If <code>yes</code>, only Users/Members will be "required" to enter this field.</small><br />';form+="<small>* Administrators are exempt from this requirement.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt">Default Text Value: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="deflt" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt" rows="1">'+esc_html(field.deflt)+"</textarea><br />";form+="<small>Default value before user input is received.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+'><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">Option Configuration File: * (one option per line)</label><br />';form+="<small>Use a pipe <code>|</code> delimited format: <code>option value|option label</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="options" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options" rows="3">'+esc_html(field.options)+"</textarea><br />";form+="Here is a quick example:<br />";form+="<small>You can also specify a <em>default</em> option:</small><br />";form+="<code>US|United States|default</code><br />";form+="<code>CA|Canada</code><br />";form+="<code>VI|Virgin Islands (U.S.)</code>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">Expected Format: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<select property="expected" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">';form+='<option value=""'+((field.expected==="")?' selected="selected"':"")+'">Anything Goes</option>';form+='<option disabled="disabled"></option>';form+='<optgroup label="Specific Input Types">';form+='<option value="numeric-wp-commas"'+((field.expected==="numeric-wp-commas")?' selected="selected"':"")+'">Numeric (with or without decimals, commas allowed)</option>';form+='<option value="numeric"'+((field.expected==="numeric")?' selected="selected"':"")+'">Numeric (with or without decimals, no commas)</option>';form+='<option value="integer"'+((field.expected==="integer")?' selected="selected"':"")+'">Integer (whole number, without any decimals)</option>';form+='<option value="integer-gt-0"'+((field.expected==="integer-gt-0")?' selected="selected"':"")+'">Integer > 0 (whole number, no decimals, greater than 0)</option>';form+='<option value="float"'+((field.expected==="float")?' selected="selected"':"")+'">Float (floating point number, decimals required)</option>';form+='<option value="float-gt-0"'+((field.expected==="float-gt-0")?' selected="selected"':"")+'">Float > 0 (floating point number, decimals required, greater than 0)</option>';form+='<option value="date"'+((field.expected==="date")?' selected="selected"':"")+'">Date (required date format: dd/mm/yyyy)</option>';form+='<option value="email"'+((field.expected==="email")?' selected="selected"':"")+'">Email (require valid email)</option>';form+='<option value="url"'+((field.expected==="url")?' selected="selected"':"")+'">Full URL (starting with http or https)</option>';form+='<option value="domain"'+((field.expected==="domain")?' selected="selected"':"")+'">Domain Name (domain name only, without http)</option>';form+='<option value="phone"'+((field.expected==="phone")?' selected="selected"':"")+'">Phone # (10 digits w/possible hyphens,spaces,brackets)</option>';form+='<option value="uszip"'+((field.expected==="uszip")?' selected="selected"':"")+'">US Zipcode (5-9 digits w/possible hyphen)</option>';form+='<option value="cazip"'+((field.expected==="cazip")?' selected="selected"':"")+'">Canadian Zipcode (6 alpha-numerics w/possible space)</option>';form+='<option value="uczip"'+((field.expected==="uczip")?' selected="selected"':"")+'">US/Canadian Zipcode (either a US or Canadian zipcode)</option>';form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Any Character Combination">';for(i=1;i<=25;i++){form+='<option value="any-'+i+'"'+((field.expected==="any-"+i)?' selected="selected"':"")+'">Any Character Combination ('+i+" character minimum)</option>";form+='<option value="any-'+i+'-e"'+((field.expected==="any-"+i+"-e")?' selected="selected"':"")+'">Any Character Combination (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics, Spaces &amp; Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-punctuation-'+i+'"'+((field.expected==="alphanumerics-spaces-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics, Spaces &amp; Punctuation ('+i+" character minimum)</option>";form+='<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-spaces-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics, Spaces &amp; Punctuation (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics &amp; Spaces Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-'+i+'"'+((field.expected==="alphanumerics-spaces-"+i)?' selected="selected"':"")+'">Alphanumerics &amp; Spaces ('+i+" character minimum)</option>";form+='<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected==="alphanumerics-spaces-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics &amp; Spaces (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics &amp; Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-punctuation-'+i+'"'+((field.expected==="alphanumerics-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics &amp; Punctuation ('+i+" character minimum)</option>";form+='<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics &amp; Punctuation (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-'+i+'"'+((field.expected==="alphanumerics-"+i)?' selected="selected"':"")+'">Alphanumerics ('+i+" character minimum)</option>";form+='<option value="alphanumerics-'+i+'-e"'+((field.expected==="alphanumerics-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphabetics Only">';for(i=1;i<=25;i++){form+='<option value="alphabetics-'+i+'"'+((field.expected==="alphabetics-"+i)?' selected="selected"':"")+'">Alphabetics ('+i+" character minimum)</option>";form+='<option value="alphabetics-'+i+'-e"'+((field.expected==="alphabetics-"+i+"-e")?' selected="selected"':"")+'">Alphabetics (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Numeric Digits Only">';for(i=1;i<=25;i++){form+='<option value="numerics-'+i+'"'+((field.expected==="numerics-"+i)?' selected="selected"':"")+'">Numeric Digits ('+i+" digit minimum)</option>";form+='<option value="numerics-'+i+'-e"'+((field.expected==="numerics-"+i+"-e")?' selected="selected"':"")+'">Numeric Digits (exactly '+i+" digit"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+="</select><br />";form+="<small>Only Users/Members will be required to meet this criteria.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">Applicable Membership Levels: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<input type="text" property="levels" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels" value="'+esc_attr(field.levels)+'" /><br />';form+="<small>Please use comma-delimited Level #'s: <code>0,1,2,3,4</code> or type: <code>all</code>.</small><br />";form+="<small>This allows you to enable this field - only at specific Membership Levels.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">Allow Profile Edits: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<select property="editable" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<option value="yes"'+((field.editable==="yes")?' selected="selected"':"")+'">Yes (editable)</option>';form+='<option value="no"'+((field.editable==="no")?' selected="selected"':"")+'">No (uneditable after registration)</option>';form+='<option value="no-invisible"'+((field.editable==="no-invisible")?' selected="selected"':"")+'">No (uneditable &amp; totally invisible after registration)</option>';form+='<option value="no-always-invisible"'+((field.editable==="no-always-invisible")?' selected="selected"':"")+'">No (uneditable &amp; totally invisible, both during &amp; after registration)</option>';form+='<option value="yes-invisible"'+((field.editable==="yes-invisible")?' selected="selected"':"")+'">Yes (editable after registration / invisible during registration)</option>';form+="</select><br />";form+="<small>If <code>No</code>, this field will be un-editable after registration.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">CSS Classes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<input type="text" property="classes" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes" value="'+esc_attr(field.classes)+'" /><br />';form+="<small>Example: <code>my-style-1 my-style-2</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">CSS Styles: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<input type="text" property="styles" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles" value="'+esc_attr(field.styles)+'" /><br />';form+="<small>Example: <code>color:#000000; background:#FFFFFF;</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">Other Attributes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<input type="text" property="attrs" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs" value="'+esc_attr(field.attrs)+'" /><br />';form+='<small>Example: <code>onkeyup="" onblur=""</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons"><td colspan="2">&nbsp;</td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons">';form+='<td align="left">';form+='<input type="button" value="Cancel" onclick="ws_plugin__s2member_customRegFieldCancel();" />';form+="</td>";form+='<td align="right">';form+='<input type="button" value="'+((editing)?"Update This Field":"Create Registration Field")+'" onclick="'+((editing)?"ws_plugin__s2member_customRegFieldUpdate("+index+");":"ws_plugin__s2member_customRegFieldCreate();")+'" />';form+="</td>";form+="</tr>";form+="</tbody>";form+="</table>";form+="<div>";$("body").append(form);tb_show(((editing)?"Editing Registration/Profile Field":"New Custom Registration/Profile Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var buildTable=function(){var l=fields.length,i=0,html="",eo="o";html+="<tbody>";html+="<tr>";html+="<th>Order</th>";html+="<th>Field Type</th>";html+="<th>Unique ID</th>";html+="<th>Required</th>";html+="<th>Levels</th>";html+="<th>- Tools -</th>";html+="</tr>";if(fields.length>0){for(i=0;i<fields.length;i++){html+='<tr class="'+esc_attr((eo=(eo==="o")?"e":"o"))+((fields[i].section==="yes")?" s":"")+" ws-plugin--s2member-custom-reg-field-configuration-table-row-"+i+'">';html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-move-up" href="#" onclick="ws_plugin__s2member_customRegFieldMoveUp('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-move-down" href="#" onclick="ws_plugin__s2member_customRegFieldMoveDown('+i+'); return false;"></a></td>';html+='<td nowrap="nowrap">'+esc_html(fieldTypeDesc(fields[i].type))+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].id)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].required)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].levels)+"</td>";html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-edit" href="#" onclick="ws_plugin__s2member_customRegFieldEdit('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-delete" href="#" onclick="ws_plugin__s2member_customRegFieldDelete('+i+'); return false;"></a></td>';html+="</tr>"}}else{html+="<tr>";html+='<td colspan="6">No Custom Fields are configured.</td>';html+="</tr>"}html+="</tbody>";$table.html(html)};buildTools(),buildTable()})()}}if(location.href.match(/page\=ws-plugin--s2member-res-ops/)){$("input#ws-plugin--s2member-brute-force-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's Brute Force Restriction Logs have all been reset."),$this.val("Reset Brute Force Logs")});return false});$("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's IP Restriction Logs have all been reset."),$this.val("Reset IP Restriction Logs")});return false});$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').change(function(){var thisChange=$(this).val();$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="all"&&this.checked){$this.nextAll(checkboxes).attr({checked:"checked",disabled:"disabled"})}else{if(val==="all"&&!this.checked){$this.nextAll(checkboxes).removeAttr("disabled");(thisChange==="all")?$this.nextAll(checkboxes).removeAttr("checked"):null}}})}).last().trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-down-ops/)){var updateCloudFrontPrivateKey=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyEntry=$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry");var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyEntryValue=$.trim($visiblePrivateKeyEntry.val());if((hiddenPrivateKeyValue&&!visiblePrivateKeyEntryValue)||visiblePrivateKeyEntryValue.match(/[^\r\n\u25CF]/)){$hiddenPrivateKey.val(visiblePrivateKeyEntryValue),$visiblePrivateKeyEntry.val(visiblePrivateKeyEntryValue.replace(/[^\r\n]/g,String.fromCharCode(9679)))}};$("form#ws-plugin--s2member-options-form").submit(updateCloudFrontPrivateKey);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontPrivateKey).trigger("change");var updateCloudFrontDistroCfgs=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyId=$("input#ws-plugin--s2member-amazon-cf-files-private-key-id");var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistrosStatus=$("input#ws-plugin--s2member-amazon-cf-files-distros-auto-config-status");var autoConfigDistrosStatusValue=$.trim($autoConfigDistrosStatus.val());var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyIdValue=$.trim($visiblePrivateKeyId.val());var hiddenPrivateKeyPrevConfigValue=$.trim($hiddenPrivateKey.attr("data-s-prev-config-value")),visiblePrivateKeyIdPrevConfigValue=$.trim($visiblePrivateKeyId.attr("data-s-prev-config-value"));if(autoConfigDistrosStatusValue==="configured"&&((visiblePrivateKeyIdPrevConfigValue&&visiblePrivateKeyIdValue!==visiblePrivateKeyIdPrevConfigValue)||(hiddenPrivateKeyPrevConfigValue&&hiddenPrivateKeyValue!==hiddenPrivateKeyPrevConfigValue))){alert("s2Member will need to delete and re-configure your Amazon CloudFront distributions if you change this. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}else{if(autoConfigDistrosStatusValue!=="configured"&&visiblePrivateKeyIdValue&&hiddenPrivateKeyValue){alert("s2Member will need to auto-configure your Amazon CloudFront distributions for you. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}}};$("input#ws-plugin--s2member-amazon-cf-files-private-key-id").change(updateCloudFrontDistroCfgs);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontDistroCfgs);$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros-w-cnames").change(function(){var $this=$(this),thisChecked=(this.checked)?true:false;var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistroCnames=$("div#ws-plugin--s2member-amazon-cf-files-auto-configure-distro-cnames");(thisChecked)?$autoConfigDistroCnames.show():$autoConfigDistroCnames.hide();(thisChecked)?$autoConfigDistros.attr("checked","checked"):null}).trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){$("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var $this=$(this),val=$this.val();var $viaCron=$("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(val==2){$viaCron.show()}else{$viaCron.hide()}})}if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){$("div.ws-menu-page select[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification)-term$/)}).change(function(){var button=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var trialDisabled=($(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;$("p#ws-plugin--s2member-"+button+"-trial-line").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-trial-then").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-20p-rule").css("display",(trialDisabled?"none":""));(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-period").val(0):null;(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-amount").val("0.00"):null});$("div.ws-menu-page input[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification|ccap)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^(-all|-al|-a|-)[;,]*/gi,""),_all=(this.value.match(/^(-all|-al|-a|-)[;,]*/i))?"-all,":"";if(value.match(/[^a-z_0-9,]/)){this.value=_all+$.trim($.trim(value).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(button){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="",labels={};eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");var shortCode=$("input#ws-plugin--s2member-"+button+"-shortcode");var code=$("textarea#ws-plugin--s2member-"+button+"-button");var modLevel=$("select#ws-plugin--s2member-modification-level");var level=(button==="modification")?modLevel.val().split(":",2)[1]:button.replace(/^level/,"");var label=labels["level"+level].replace(/"/g,"");var desc=$.trim($("input#ws-plugin--s2member-"+button+"-desc").val().replace(/"/g,""));var trialAmount=$("input#ws-plugin--s2member-"+button+"-trial-amount").val().replace(/[^0-9\.]/g,"");var trialPeriod=$("input#ws-plugin--s2member-"+button+"-trial-period").val().replace(/[^0-9]/g,"");var trialTerm=$("select#ws-plugin--s2member-"+button+"-trial-term").val().replace(/[^A-Z]/g,"");var regAmount=$("input#ws-plugin--s2member-"+button+"-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var regRecurTimes="",regRecurRetry="1";var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-"+button+"-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-"+button+"-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&&regTerm!=="L")?level+":"+cCaps+":"+regPeriod+" "+regTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(trialAmount!=="0"&&(isNaN(trialAmount)||trialAmount<0)){alert("— Oops, a slight problem: —\n\nWhen provided, Trial Amount must be >= 0.00");return false}else{if(trialAmount!=="0"&&trialAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00");return false}else{if(trialTerm==="D"&&trialPeriod>90){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 90.\nIf you want to offer more than 90 days, please choose Weeks or Months from the drop-down.");return false}else{if(trialTerm==="W"&&trialPeriod>52){alert("— Oops, a slight problem: —\n\nMaximum Trial Weeks is: 52.\nIf you want to offer more than 52 weeks, please choose Months from the drop-down.");return false}else{if(trialTerm==="M"&&trialPeriod>24){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 24.\nIf you want to offer more than 24 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>5){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 5.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}}}}}}code.html(code.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(trialPeriod)<=0)?code.html(code.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="(src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;shortCodeTemplateAttrs+=(button==="modification")?'modify="1" ':"";shortCodeTemplateAttrs+='level="'+esc_attr(level)+'" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'" custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"';shortCodeTemplateAttrs+=' ta="'+esc_attr(trialAmount)+'" tp="'+esc_attr(trialPeriod)+'" tt="'+esc_attr(trialTerm)+'" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'" rrt="'+esc_attr(regRecurTimes)+'" rra="'+esc_attr(regRecurRetry)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((button==="modification")?"1":"0")+'"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+esc_attr(regRecur)+'"'));code.html(code.val().replace(/ name\="srt" value\="(.*?)"/,' name="srt" value="'+esc_attr(regRecurTimes)+'"'));code.html(code.val().replace(/ name\="sra" value\="(.*?)"/,' name="sra" value="'+esc_attr(regRecurRetry)+'"'));code.html(code.val().replace(/ name\="a1" value\="(.*?)"/,' name="a1" value="'+esc_attr(trialAmount)+'"'));code.html(code.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+esc_attr(trialPeriod)+'"'));code.html(code.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+esc_attr(trialTerm)+'"'));code.html(code.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+esc_attr(regPeriod)+'"'));code.html(code.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+esc_attr(regTerm)+'"'));$("div#ws-plugin--s2member-"+button+"-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Modification Buttons should be displayed to existing Users/Members, and they should be logged-in, BEFORE clicking this Button."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalCcapButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-ccap-shortcode");var code=$("textarea#ws-plugin--s2member-ccap-button");var desc=$.trim($("input#ws-plugin--s2member-ccap-desc").val().replace(/"/g,""));var regAmount=$("input#ws-plugin--s2member-ccap-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-ccap-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-ccap-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-ccap-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-ccap-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-ccap-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();var levelCcapsPer=(regRecur==="BN"&&regTerm!=="L")?"*:"+cCaps+":"+regPeriod+" "+regTerm:"*:"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!cCaps||cCaps==="-all"){alert("— Oops, a slight problem: —\n\nPlease provide at least one Custom Capability.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}shortCodeTemplateAttrs+='level="*" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-ccap-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-sp-shortcode");var code=$("textarea#ws-plugin--s2member-sp-button");var leading=$("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var regAmount=$("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var desc=$.trim($("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member → Restriction Options → Specific Post/Page Access.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&&currencyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}var spIdsHours="sp:"+ids+":"+hours;shortCodeTemplateAttrs+='sp="1" ids="'+esc_attr(ids)+'" exp="'+esc_attr(hours)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(spIdsHours)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-sp-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your WordPress Editor.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalRegLinkGenerate=function(){var level=$("select#ws-plugin--s2member-reg-link-level").val().replace(/[^0-9]/g,"");var subscrID=$.trim($("input#ws-plugin--s2member-reg-link-subscr-id").val());var custom=$.trim($("input#ws-plugin--s2member-reg-link-custom").val());var cCaps=$.trim($.trim($("input#ws-plugin--s2member-reg-link-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());var fixedTerm=$.trim($("input#ws-plugin--s2member-reg-link-fixed-term").val().replace(/[^A-Z 0-9]/gi,"").toUpperCase());var $link=$("p#ws-plugin--s2member-reg-link"),$loading=$("img#ws-plugin--s2member-reg-link-loading");var levelCcapsPer=(fixedTerm&&!fixedTerm.match(/L$/))?level+":"+cCaps+":"+fixedTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!subscrID){alert("— Oops, a slight problem: —\n\nPaid Subscr. ID is a required value.");return false}else{if(!custom||custom.indexOf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq ($_SERVER["HTTP_HOST"]); ?>')!==0){alert("— Oops, a slight problem: —\n\nThe Custom Value MUST start with your domain name.");return false}else{if(fixedTerm&&!fixedTerm.match(/^[1-9]+ (D|W|M|Y|L)$/)){alert("— Oops, a slight problem: —\n\nThe Fixed Term Length is not formatted properly.");return false}}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_reg_access_link_via_ajax",ws_plugin__s2member_reg_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-reg-access-link-via-ajax")); ?>',s2member_reg_access_link_subscr_gateway:"paypal",s2member_reg_access_link_subscr_id:subscrID,s2member_reg_access_link_custom:custom,s2member_reg_access_link_item_number:levelCcapsPer},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var leading=$("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var $link=$("p#ws-plugin--s2member-sp-link"),$loading=$("img#ws-plugin--s2member-sp-link-loading");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member → Restriction Options → Specific Post/Page Access.");return false}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:ids,s2member_sp_access_link_hours:hours},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false}}if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){$("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var $this=$(this),val=$this.val();var $rows=$("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var $prevImg=$("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(val<=0){$rows.css("display","none"),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(val==1){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(val==2){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}});$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').change(function(){var thisChange=$(this).val(),checkedIndexes=[];$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="removal-deletion"&&this.checked){$this.nextAll(checkboxes).slice(0,2).attr({checked:"checked",disabled:"disabled"})}else{if(val==="removal-deletion"&&!this.checked){$this.nextAll(checkboxes).slice(0,2).removeAttr("disabled");(thisChange==="removal-deletion")?$this.nextAll(checkboxes).slice(0,2).removeAttr("checked"):null}else{if(val==="modification"&&this.checked){$this.nextAll(checkboxes).slice(0,3).attr({checked:"checked",disabled:"disabled"})}else{if(val==="modification"&&!this.checked){(thisChange==="modification")?$this.nextAll(checkboxes).slice(0,3).removeAttr("checked"):null;$this.nextAll(checkboxes).slice(0,3).removeAttr("disabled")}}}}}).each(function(index){(this.checked)?checkedIndexes.push(index):null});$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").removeAttr("disabled");if($.inArray(3,checkedIndexes)===-1&&$.inArray(4,checkedIndexes)===-1&&$.inArray(5,checkedIndexes)===-1&&$.inArray(6,checkedIndexes)===-1){$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").attr("disabled","disabled")}}).last().trigger("change")}});
includes/menu-pages/menu-pages-s.css CHANGED
@@ -2,7 +2,7 @@
2
  * Core CSS for s2Member menu pages.
3
  *
4
  * Copyright: © 2009-2011
5
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
6
  * (coded in the USA)
7
  *
8
  * Released under the terms of the GNU General Public License.
2
  * Core CSS for s2Member menu pages.
3
  *
4
  * Copyright: © 2009-2011
5
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
6
  * (coded in the USA)
7
  *
8
  * Released under the terms of the GNU General Public License.
includes/menu-pages/menu-pages-s.js CHANGED
@@ -2,7 +2,7 @@
2
  * Core JavaScript routines for s2Member menu pages.
3
  *
4
  * Copyright: © 2009-2011
5
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
6
  * (coded in the USA)
7
  *
8
  * Released under the terms of the GNU General Public License.
@@ -161,6 +161,16 @@ jQuery(document).ready(function($)
161
 
162
  }).trigger /* Fire on ready too. */('change');
163
 
 
 
 
 
 
 
 
 
 
 
164
  if($('input#ws-plugin--s2member-custom-reg-fields').length && $('div#ws-plugin--s2member-custom-reg-field-configuration').length)
165
  {
166
  ( /* Wrap these routines inside a function to keep variables within relative scope. */function()
2
  * Core JavaScript routines for s2Member menu pages.
3
  *
4
  * Copyright: © 2009-2011
5
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
6
  * (coded in the USA)
7
  *
8
  * Released under the terms of the GNU General Public License.
161
 
162
  }).trigger /* Fire on ready too. */('change');
163
 
164
+ $('select#ws-plugin--s2member-custom-reg-password').change(function()
165
+ {
166
+ var $this = $(this), $newUserNotification = $('div#ws-plugin--s2member-new-user-email-details');
167
+
168
+ if($this.val() === '1') // Disable this section.
169
+ $newUserNotification.css('opacity', '0.5');
170
+ else $newUserNotification.css('opacity', '');
171
+
172
+ }).trigger /* Fire on ready too. */('change');
173
+
174
  if($('input#ws-plugin--s2member-custom-reg-fields').length && $('div#ws-plugin--s2member-custom-reg-field-configuration').length)
175
  {
176
  ( /* Wrap these routines inside a function to keep variables within relative scope. */function()
includes/menu-pages/menu-pages.css CHANGED
@@ -4,7 +4,7 @@
4
  * This file is included with all WordPress themes/plugins by WebSharks, Inc.
5
  *
6
  * Copyright: © 2009-2011
7
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
8
  * (coded in the USA)
9
  *
10
  * Released under the terms of the GNU General Public License.
@@ -547,6 +547,39 @@ div.ws-menu-page div.ws-menu-page-toolbox > .links a
547
  margin : 0 10px 0 10px;
548
  text-decoration : none;
549
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
550
  /*
551
  Specifically for the main layout table.
552
  These CSS selectors address common layout styles.
4
  * This file is included with all WordPress themes/plugins by WebSharks, Inc.
5
  *
6
  * Copyright: © 2009-2011
7
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
8
  * (coded in the USA)
9
  *
10
  * Released under the terms of the GNU General Public License.
547
  margin : 0 10px 0 10px;
548
  text-decoration : none;
549
  }
550
+ div.ws-menu-page div.ws-menu-page-number-button-tabs
551
+ {
552
+ font-size: 110%;
553
+ display: inline-block;
554
+ margin: 0 10px 0 10px;
555
+ }
556
+ div.ws-menu-page div.ws-menu-page-number-button-tabs > a
557
+ {
558
+ margin: 0 5px;
559
+ padding: 4px 8px;
560
+ display: inline-block;
561
+ text-decoration: none !important;
562
+
563
+ color: #D0DDAD;
564
+ background: #97a376;
565
+ border: 1px solid transparent;
566
+ border-radius: 4px;
567
+ }
568
+ div.ws-menu-page div.ws-menu-page-number-button-tabs > a:first-child
569
+ {
570
+ margin-left: 0;
571
+ }
572
+ div.ws-menu-page div.ws-menu-page-number-button-tabs > a:last-child
573
+ {
574
+ margin-right: 0;
575
+ }
576
+ div.ws-menu-page div.ws-menu-page-number-button-tabs > a:hover,
577
+ div.ws-menu-page div.ws-menu-page-number-button-tabs > a.-current
578
+ {
579
+ color: #000000;
580
+ background: #ffffff;
581
+ border: 1px solid #73797a;
582
+ }
583
  /*
584
  Specifically for the main layout table.
585
  These CSS selectors address common layout styles.
includes/menu-pages/menu-pages.js CHANGED
@@ -7,7 +7,7 @@
7
  * This file is included with all WordPress themes/plugins by WebSharks, Inc.
8
  *
9
  * Copyright: © 2009-2011
10
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
11
  * (coded in the USA)
12
  *
13
  * Released under the terms of the GNU General Public License.
7
  * This file is included with all WordPress themes/plugins by WebSharks, Inc.
8
  *
9
  * Copyright: © 2009-2011
10
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
11
  * (coded in the USA)
12
  *
13
  * Released under the terms of the GNU General Public License.
includes/menu-pages/mms-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (Main Multisite Options page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (Main Multisite Options page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/paypal-buttons.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (PayPal Button Generator page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -604,7 +604,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_buttons"))
604
  echo '<li><code>lc=""</code> Optional 2 character Country/Locale Code <em>(i.e., Country Code—ex: <code>US</code>)</em>. This controls the interface language used at PayPal during checkout. If unspecified, the language is determined by PayPal when possible, defaulting to <code>US</code> <em>english</em> when not possible. See <a href="http://s2member.com/r/paypal-locale-codes/" target="_blank" rel="external">this list of possible Country Codes</a>. Not valid when <code>cancel="1"</code>.</li>' . "\n";
605
  echo '<li><code>level="1"</code> Membership Level [1-4] <em>(or, up to the number of configured Levels)</em>. Only valid for Buttons providing paid Membership Level Access.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' Or, with Independent Custom Capabilities this MUST be set to <code>level="*"</code>, and <code>ccaps=""</code> must NOT be empty <em>(i.e., <code>level="*" ccaps="music,videos"</code>)</em>.') . '</li>' . "\n";
606
  echo '<li><code>modify="0"</code> Modification directive. Only valid w/ Membership Level Access. Possible values: <code>0</code> = allows Customers to only create a new Subscription, <code>1</code> = allows Customers to modify their current Subscription or sign up for a new one, <code>2</code> = allows Customers to only modify their current Subscription.</li>' . "\n";
607
- echo '<li><code>ns="1"</code> The <em>no_shipping</em> directive. Possible values: <code>0</code> = prompt for an address, but do not require one, <code>1</code> = do not prompt for a shipping address, <code>2</code> = prompt for an address, and require one. Not valid when <code>cancel="1"</code>.</li>' . "\n";
608
  echo '<li><code>output="button"</code> Output Type. Possible values: <code>button</code> = PayPal Button w/hidden inputs, <code>anchor</code> = PayPal Button ( &lt;a&gt; anchor tag ) URL w/ ?query string, <code>url</code> = raw URL w/ ?query string.</li>' . "\n";
609
  echo '<li><code>ps="paypal"</code> PayPal checkout Page Style. Not valid when <code>cancel="1"</code>.</li>' . "\n";
610
  echo '<li><code>ra="0.01"</code> Regular, Buy Now, and/or Recurring Amount. Must be &gt;= <code>0.01</code>. Not valid when <code>cancel="1"</code>.</li>' . "\n";
3
  * Menu page for the s2Member plugin (PayPal Button Generator page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
604
  echo '<li><code>lc=""</code> Optional 2 character Country/Locale Code <em>(i.e., Country Code—ex: <code>US</code>)</em>. This controls the interface language used at PayPal during checkout. If unspecified, the language is determined by PayPal when possible, defaulting to <code>US</code> <em>english</em> when not possible. See <a href="http://s2member.com/r/paypal-locale-codes/" target="_blank" rel="external">this list of possible Country Codes</a>. Not valid when <code>cancel="1"</code>.</li>' . "\n";
605
  echo '<li><code>level="1"</code> Membership Level [1-4] <em>(or, up to the number of configured Levels)</em>. Only valid for Buttons providing paid Membership Level Access.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' Or, with Independent Custom Capabilities this MUST be set to <code>level="*"</code>, and <code>ccaps=""</code> must NOT be empty <em>(i.e., <code>level="*" ccaps="music,videos"</code>)</em>.') . '</li>' . "\n";
606
  echo '<li><code>modify="0"</code> Modification directive. Only valid w/ Membership Level Access. Possible values: <code>0</code> = allows Customers to only create a new Subscription, <code>1</code> = allows Customers to modify their current Subscription or sign up for a new one, <code>2</code> = allows Customers to only modify their current Subscription.</li>' . "\n";
607
+ echo '<li><code>ns="0"</code> The <em>no_shipping</em> directive. Possible values: <code>0</code> = prompt for an address, but do not require one, <code>1</code> = do not prompt for a shipping address, <code>2</code> = prompt for an address, and require one. Not valid when <code>cancel="1"</code>.</li>' . "\n";
608
  echo '<li><code>output="button"</code> Output Type. Possible values: <code>button</code> = PayPal Button w/hidden inputs, <code>anchor</code> = PayPal Button ( &lt;a&gt; anchor tag ) URL w/ ?query string, <code>url</code> = raw URL w/ ?query string.</li>' . "\n";
609
  echo '<li><code>ps="paypal"</code> PayPal checkout Page Style. Not valid when <code>cancel="1"</code>.</li>' . "\n";
610
  echo '<li><code>ra="0.01"</code> Regular, Buy Now, and/or Recurring Amount. Must be &gt;= <code>0.01</code>. Not valid when <code>cancel="1"</code>.</li>' . "\n";
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (PayPal Options page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (PayPal Options page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/res-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (Restriction Options page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (Restriction Options page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/scripting.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (API Scripting page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (API Scripting page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/start.inc.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  /**
3
- * Menu page for the s2Member plugin (Quick Start Guide page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
@@ -20,7 +20,7 @@ if(!defined('WPINC')) // MUST have WordPress.
20
  if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
21
  {
22
  /**
23
- * Menu page for the s2Member plugin (Quick Start Guide page).
24
  *
25
  * @package s2Member\Menu_Pages
26
  * @since 110531
@@ -35,7 +35,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
35
  c_ws_plugin__s2member_menu_pages_tb::display ();
36
  echo '</div>'."\n";
37
 
38
- echo '<h2>Quick-Start Guide</h2>' . "\n";
39
 
40
  echo '<table class="ws-menu-page-table">' . "\n";
41
  echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
@@ -44,40 +44,18 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
44
 
45
  do_action("ws_plugin__s2member_during_start_page_before_left_sections", get_defined_vars ());
46
 
47
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_video_tutorials", false, get_defined_vars ()))
48
- {
49
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_video_tutorials", get_defined_vars ());
50
-
51
- echo '<div class="ws-menu-page-group" title="Video Tutorials" style="padding-top:5px;">' . "\n";
52
-
53
- echo '<div class="ws-menu-page-section ws-plugin--s2member-registration-process-section">' . "\n";
54
- echo '<p><iframe src="//www.youtube.com/embed/videoseries?list=PL8gPolqFnYqtBVz0nVeN2sJgRVednq0jw" width="100%" height="550" frameborder="0" allowfullscreen></iframe></p>' . "\n";
55
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_video_tutorials", get_defined_vars ());
56
- echo '</div>' . "\n";
57
-
58
- echo '<div class="ws-menu-page-section ws-plugin--s2member-registration-process-section">' . "\n";
59
- echo '<p><iframe src="//www.youtube.com/embed/videoseries?list=PLA40AFC154461862E" width="100%" height="550" frameborder="0" allowfullscreen></iframe></p>' . "\n";
60
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_video_tutorials", get_defined_vars ());
61
- echo '</div>' . "\n";
62
-
63
- echo '</div>' . "\n";
64
-
65
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_video_tutorials", get_defined_vars ());
66
- }
67
-
68
  if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_registration_process", true, get_defined_vars ()))
69
  {
70
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_registration_process", get_defined_vars ());
71
 
72
- echo '<div class="ws-menu-page-group" title="The Registration Process">' . "\n";
73
 
74
  echo '<div class="ws-menu-page-section ws-plugin--s2member-registration-process-section">' . "\n";
75
- echo '<h3>The Subscription Signup/Registration Process</h3>' . "\n";
76
- echo '<p>1. Internet Users will go to your Membership Options Page <em>(which you\'ll need to configure on the s2Member General Options panel)</em>. On this Membership Options Page (that you create in WordPress), you\'ll insert the PayPal Subscription Buttons that were generated for you by s2Member.</p>' . "\n";
77
- echo '<p>2. An Internet User will click on a PayPal Subscription Button from your Membership Options Page. They will be transferred over to PayPal in order to agree to your Membership terms and pricing. You can customize the Checkout Page Style, Pricing, Payment Periods, and more; whenever you generate your PayPal Buttons through s2Member.</p>' . "\n";
78
- echo '<p>3. Once a User has completed the Subscription Signup Process at PayPal, they\'ll be returned to your site, where they\'ll be activated by s2Member instantly, and given the opportunity to register a Username &amp; Password for their Membership. <em>(Note: they\'ll be allowed to register a Username &amp; Password, even if you\'ve set \'Anyone Can Register\' to `Off` in your General WordPress options; because s2Member identifies the User as having paid for Membership access through PayPal)</em>.</p>' . "\n";
79
- echo '<p>s2Member will also send the User an email with instructions on how to register their Username &amp; Password, just in case they missed the instructions after checkout. That email will be sent to their PayPal email address. Much of this is handled through the PayPal IPN service behind-the-scenes, where PayPal and s2Member communicate with each other.</p>' . "\n";
80
- echo '<p>4. Once a User has completed checkout and registered a Username &amp; Password, they\'ll be able to log in. The first page they\'ll see after logging in, will be your Login Welcome Page <em>(which you\'ll need to configure on the s2Member General Options panel)</em>. Your Login Welcome Page can contain whatever you like. You\'ll need to design this Page in WordPress.</p>' . "\n";
81
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_registration_process", get_defined_vars ());
82
  echo '</div>' . "\n";
83
 
@@ -90,12 +68,11 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
90
  {
91
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_log_reg_form", get_defined_vars ());
92
 
93
- echo '<div class="ws-menu-page-group" title="Your Login/Registration Form">' . "\n";
94
 
95
  echo '<div class="ws-menu-page-section ws-plugin--s2member-login-reg-form-section">' . "\n";
96
- echo '<h3>Your Login/Registration Form (already built-in)</h3>' . "\n";
97
- echo '<p>s2Member uses the existing WordPress Login/Registration system. This is the same Login/Registration Form that you use to access your WP Dashboard. However, with s2Member installed, your Login/Registration Forms can be customized <em>(i.e., re-branded)</em>. <em>See: <strong>s2Member General Options Login/Registration Design</strong>.</em> You can make the default Login/Registration Forms match your WordPress theme design; by changing the background color/image, your logo image, add Custom Fields, and more<em>!</em></p>' . "\n";
98
- echo '<p>Since s2Member uses the default Login/Registration system for WordPress, s2Member is also compatible with themes and other plugins <em>(such as BuddyPress)</em>. If your theme has a login form built-in already, chances are, it\'s perfectly compatible with s2Member. There are also many plugins available that are designed to place login forms into your Sidebar; and many of those are also compatible with s2Member\'s integration. If you have any trouble, please check the <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank" rel="external">s2Member Forums</a> for assistance.</p>' . "\n";
99
  echo ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) || c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<div class="ws-menu-page-hr"></div>' . "\n" : '';
100
  echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of a Multisite Blog Farm uses a different Registration Form. See: <strong>s2Member → General Options → Registration/Profile Fields</strong>.</em></p>' . "\n" : '';
101
  echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form. See: <strong>s2Member → General Options → Registration/Profile Fields</strong>.</em></p>' . "\n" : '';
@@ -111,14 +88,13 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
111
  {
112
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_login_welcome_page", get_defined_vars ());
113
 
114
- echo '<div class="ws-menu-page-group" title="Your Login Welcome Page">' . "\n";
115
 
116
  echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
117
- echo '<h3>Your Login Welcome Page (you create this in WordPress)</h3>' . "\n";
118
  echo '<p>You create this special Page in WordPress. This is a "Page" not a Post. This is the first page Members will see after logging into your site.</p>' . "\n";
119
- echo '<p>You should go ahead and create an empty Page now, before you start configuring everything. Title it: <code>My Login Welcome Page</code>, and click Publish.</p>' . "\n";
120
- echo '<p>Once you have all of your <strong>s2Member → General Options</strong> configured, and once you have a basic understanding of how s2Member works, go back and customize the title and content for this Page. You\'ll want to be creative with your Login Welcome Page. However, you should configure your <strong>s2Member → General Options</strong> first, and test things out. That way you\'ll understand why this Page is important.</p>' . "\n";
121
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/customizing-your-lwp/" target="_blank" rel="external">Customizing Your Login Welcome Page</a>.</p>'."\n" : '';
122
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
123
  echo '</div>' . "\n";
124
 
@@ -131,13 +107,12 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
131
  {
132
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_membership_options_page", get_defined_vars ());
133
 
134
- echo '<div class="ws-menu-page-group" title="Your Membership Options Page">' . "\n";
135
 
136
  echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
137
- echo '<h3>Your Membership Options Page (you create this in WordPress)</h3>' . "\n";
138
  echo '<p>You create this special Page in WordPress. This is a "Page" not a Post. s2Member comes with a PayPal Button Generator. You will generate PayPal Buttons with s2Member, for each Membership Level that you plan to offer. Those buttons will be inserted into your Membership Options Page. If a User in the general public attempts to access an area of your site that is being protected by s2Member <em>(based on your configuration)</em>, s2Member will redirect the User to your Membership Options Page, where they can signup through PayPal and become a Member.</p>' . "\n";
139
- echo '<p>You should go ahead and create an empty Page now, before you start configuring everything. Title it: <code>My Membership Options Page</code>, and click Publish.</p>' . "\n";
140
- echo '<p>Once you have all of your <strong>s2Member → General Options</strong> configured, and once you have a basic understanding of how s2Member works, go back and customize the title and content for this Page. You\'ll want to be creative with your Membership Options Page. However, you should configure your <strong>s2Member → General Options</strong> first, and test things out. That way you\'ll understand why this Page is important.</p>' . "\n";
141
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_membership_options_page", get_defined_vars ());
142
  echo '</div>' . "\n";
143
 
@@ -150,12 +125,11 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
150
  {
151
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_general_options", get_defined_vars ());
152
 
153
- echo '<div class="ws-menu-page-group" title="Your s2Member → General Options">' . "\n";
154
 
155
  echo '<div class="ws-menu-page-section ws-plugin--s2member-general-options-section">' . "\n";
156
- echo '<h3>Your s2Member → General Options (Basic Configuration)</h3>' . "\n";
157
- echo '<p>Once you have a Login Welcome Page, and a Membership Options Page. Go to: <strong>s2Member General Options</strong>.</p>' . "\n";
158
- echo '<p>From your s2Member General Options Panel you can setup the basics of your Membership offering. Including the design of your Login/Registration Form, any Custom Registration/Profile Fields you\'d like to create, Labels for each Membership Level, Open Registration (on/off), a Profile Editing Panel for Members, and more.</p>' . "\n";
159
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_general_options", get_defined_vars ());
160
  echo '</div>' . "\n";
161
 
@@ -168,14 +142,13 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
168
  {
169
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_restriction_options", get_defined_vars ());
170
 
171
- echo '<div class="ws-menu-page-group" title="Your s2Member → Restriction Options">' . "\n";
172
 
173
  echo '<div class="ws-menu-page-section ws-plugin--s2member-restriction-options-section">' . "\n";
174
- echo '<h3>Your s2Member → Restriction Options (Basic Configuration)</h3>' . "\n";
175
- echo '<p>Once you have a Login Welcome Page, and a Membership Options Page. Go to: <strong>s2Member Restriction Options</strong>.</p>' . "\n";
176
- echo '<p>From your s2Member Restriction Options Panel you may restrict access to certain Posts, Pages, Tags, Categories, and/or URIs based on a Member\'s Level. The s2Member Options Panel makes it easy for you. All you do is type in the basics of what you want to restrict access to, and those sections of your site will be off limits to non-Members.</p>' . "\n";
177
  echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p>That being said, there are times when you might need to have greater control over which portions of your site can be viewed by non-Members, or Members at different Levels. This is where API Scripting with Conditionals comes in. <em>For more information, please check your Dashboard here: <strong>s2Member → API Scripting</strong></em>.</p>' . "\n" : '';
178
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/simple-shortcode-conditionals/" target="_blank" rel="external">Simple Shortcode Conditionals</a>.</p>'."\n" : '';
179
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_restriction_options", get_defined_vars ());
180
  echo '</div>' . "\n";
181
 
@@ -188,12 +161,11 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
188
  {
189
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_automation_process", get_defined_vars ());
190
 
191
- echo '<div class="ws-menu-page-group" title="Cancellations / Expirations / Terminations">' . "\n";
192
 
193
  echo '<div class="ws-menu-page-section ws-plugin--s2member-automation-process-section">' . "\n";
194
- echo '<h3>Subscription Cancellations / Expirations / Terminations</h3>' . "\n";
195
  echo '<p>You\'ll be happy to know that s2Member handles cancellations, expirations, failed payments, terminations <em>(e.g., refunds &amp; chargebacks)</em> for you automatically. If you log into your PayPal account and cancel a Member\'s Subscription, or, if the Member logs into their PayPal account and cancels their own Subscription, s2Member will be notified of these important changes and react accordingly through the PayPal IPN service that runs silently behind-the-scene.</p>' . "\n";
196
- echo '<p>The PayPal IPN service will notify s2Member whenever a Member\'s payments have been failing, and/or whenever a Member\'s Subscription has expired for any reason. Even refunds &amp; chargeback reversals are supported through the IPN service. If you issue a refund to an unhappy Customer through PayPal, s2Member will be notified; and the account for that Customer will either be demoted to a Free Subscriber, or deleted automatically <em>(based on your configuration)</em>. The communication from PayPal → s2Member is seamless.</p>' . "\n";
197
  echo '<p><em><strong>Some Hairy Details:</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT (End Of Term) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs; which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
198
  echo '<p><em>s2Member will not process an EOT until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system (based on your configuration). s2Member also calculates one extra day (24 hours) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
199
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_automation_process", get_defined_vars ());
@@ -208,12 +180,11 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
208
  {
209
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_upgrading_downgrading", get_defined_vars ());
210
 
211
- echo '<div class="ws-menu-page-group" title="Upgrading/Downgrading Accounts">' . "\n";
212
 
213
  echo '<div class="ws-menu-page-section ws-plugin--s2member-upgrading-downgrading-section">' . "\n";
214
- echo '<h3>Upgrading and/or Downgrading User Accounts</h3>' . "\n";
215
  echo '<p>s2Member builds upon existing functionality offered through WordPress Roles and Capabilities. From your WordPress Dashboard, go to: <code>Users</code>. You can use bulk actions to modify Member Access Levels all at once, or click on an individual Member account to modify only their specific Access Level. If you want to temporarily demote a Member so they cannot access Membership privileges, set their Role to Subscriber. When you\'re ready to give them their Membership privileges back, change their Role back to one of the s2Member Levels.</p>' . "\n";
216
- echo '<p>All financial details, such as pricing, trial periods, subscription lengths, refunds, and other Customer service issues; should be handled by you, through your PayPal account, and not through WordPress. Feel free to modify your Members\' Subscriptions via PayPal as often as you like. s2Member will be notified through the PayPal IPN service behind-the-scenes automatically. For example, if you log into PayPal and cancel a Member\'s paid Subscription, s2Member will be notified by PayPal behind-the-scenes, and s2Member will remove their Membership privileges at the correct point in time.</p>' . "\n";
217
  echo '<p>That being said, if you log into your WordPress Dashboard and delete a Member\'s account, you will still need to log into PayPal and cancel billing for the account you deleted. In other words, s2Member can be notified automatically about actions you take inside PayPal\'s interface, but PayPal cannot be notified of actions you take inside your WordPress Dashboard. At least, not in an automated fashion, as that would create a security issue for PayPal. Thus, automation works seamlessly from PayPal » s2Member, but not the other way around.</p>' . "\n";
218
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_upgrading_downgrading", get_defined_vars ());
219
  echo '</div>' . "\n";
@@ -237,15 +208,14 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
237
  {
238
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_reg_before_checkout", get_defined_vars ());
239
 
240
- echo '<div class="ws-menu-page-group" title="Registration Before Checkout?">' . "\n";
241
 
242
  echo '<div class="ws-menu-page-section ws-plugin--s2member-reg-before-checkout-section">' . "\n";
243
- echo '<h3>Registration Before Checkout? (reversing the process)</h3>' . "\n";
244
- echo '<p>By default, s2Member will send a Customer directly to PayPal, and only after checkout is completed does the Customer have the ability to register a Username/Password for access to your site. This process works very well in most cases, and it has the benefit of increasing conversion rates; because there are fewer obstacles for the Customer on their way to the actual checkout process at PayPal.</p>' . "\n";
245
- echo '<p>That being said, we believe the <em>ideal</em> approach is a <em>combined Checkout/Registration process</em>; in just one simple step <em>(available with <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Add-on / Prices")) . '" target="_blank" rel="external">s2Member Pro</a> using Stripe™ (most popular), PayPal Pro integration, or through Authorize.Net integration)</em>. However, even with PayPal Standard Buttons, there is a way to accomplish Registration Before Checkout, thereby reversing the process—if you prefer it that way.</p>'."\n";
246
  echo '<p>With PayPal Standard Buttons, Registration before Checkout is accomplished by turning Open Registration <code>(on)</code>, and then making a PayPal Button available to Free Subscribers at Level #0. In other words, you can let Visitors register for free at Level #0 <em>(where they have access to very little perhaps)</em>, and then charge them for access to higher Member Levels [1-4]. For further details, please check your WordPress Dashboard here: <strong>s2Member → General Options → Open Registration</strong>.</p>' . "\n";
247
- echo '<p><em>s2Member\'s Simple Conditionals can help you further integrate this process, by allowing you to integrate a special PayPal Button on your Login Welcome Page; one that will be seen only by Free Subscribers at Level #0. Please check your WordPress Dashboard under: <strong>s2Member → API Scripting → Simple Conditionals</strong>. We also suggest reading over the documentation on PayPal Modification Buttons. See: <strong>s2Member → PayPal Buttons → Subscription Modifications</strong>.</em></p>' . "\n";
248
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/simple-shortcode-conditionals/" target="_blank" rel="external">Simple Shortcode Conditionals</a>.</p>'."\n" : '';
249
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_reg_before_checkout", get_defined_vars ());
250
  echo '</div>' . "\n";
251
 
@@ -258,11 +228,10 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
258
  {
259
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_themes", get_defined_vars ());
260
 
261
- echo '<div class="ws-menu-page-group" title="Choosing The Perfect WordPress Theme">' . "\n";
262
 
263
  echo '<div class="ws-menu-page-section ws-plugin--s2member-themes">' . "\n";
264
- echo '<h3>Choosing The Perfect WordPress Theme</h3>' . "\n";
265
- echo '<p>We recommend <a href="http://www.s2member.com/r/themeforest/" target="_blank" rel="external">ThemeForest</a>. This is a great place to find the perfect theme for your installation of WordPress—at very affordable prices.</p>' . "\n";
266
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_themes", get_defined_vars ());
267
  echo '</div>' . "\n";
268
  echo '</div>' . "\n";
@@ -274,12 +243,12 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
274
  {
275
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_pro", get_defined_vars ());
276
 
277
- echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>">' . "\n";
278
 
279
  echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
280
  echo '<h3>s2Member Pro—A Recommended Upgrade</h3>' . "\n";
281
- echo '<p>Among many other features/enhancements, <a href="http://www.s2member.com/pro/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular; also supports Bitcoin), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
282
- echo '<p><strong>Learn more here:</strong> <a href="http://www.s2member.com/pro/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
283
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
284
  echo '</div>' . "\n";
285
 
@@ -292,17 +261,16 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
292
  {
293
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_help", get_defined_vars ());
294
 
295
- echo '<div class="ws-menu-page-group" title="Getting Help w/ s2Member">' . "\n";
296
 
297
  echo '<div class="ws-menu-page-section ws-plugin--s2member-help">' . "\n";
298
- echo '<h3>Getting Help w/ s2Member (Troubleshooting)</h3>' . "\n";
299
- echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://www.s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://www.s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://www.s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://www.s2member.com/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>' . "\n";
300
- echo '<p><strong>See also:</strong> <a href="http://www.s2member.com/kb/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
301
 
302
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
303
 
304
  echo '<h3 style="margin-bottom:0;">Testing Server Compatibility</h3>'."\n";
305
- echo '<p>Please download the <a href="http://www.s2member.com/r/server-check-tool/">s2Member Server Scanner</a>. Unzip, upload via FTP; then open in a browser for a full report.</p>'."\n";
306
 
307
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
308
 
@@ -311,9 +279,9 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
311
 
312
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
313
 
314
- echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles, Forums, Codex and more<em>!</em></h3>'."\n";
315
- echo '<form method="get" action="http://www.s2member.com/quick-s.php" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
316
- echo '<p><input type="text" name="q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
317
  echo '</form>'."\n";
318
 
319
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_help", get_defined_vars ());
1
  <?php
2
  /**
3
+ * Getting Started.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
20
  if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
21
  {
22
  /**
23
+ * Getting Started.
24
  *
25
  * @package s2Member\Menu_Pages
26
  * @since 110531
35
  c_ws_plugin__s2member_menu_pages_tb::display ();
36
  echo '</div>'."\n";
37
 
38
+ echo '<h2>Getting Started w/ s2Member®</h2>' . "\n";
39
 
40
  echo '<table class="ws-menu-page-table">' . "\n";
41
  echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
44
 
45
  do_action("ws_plugin__s2member_during_start_page_before_left_sections", get_defined_vars ());
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_registration_process", true, get_defined_vars ()))
48
  {
49
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_registration_process", get_defined_vars ());
50
 
51
+ echo '<div class="ws-menu-page-group" title="The Registration Process" default-state="open">' . "\n";
52
 
53
  echo '<div class="ws-menu-page-section ws-plugin--s2member-registration-process-section">' . "\n";
54
+ echo '<p>1. Users will go to your Membership Options Page (which you may configure; see: <em><strong>Dashboard → s2Member → General Options → Membership Options Page</strong></em>). On this Membership Options Page (that you create in WordPress) you\'ll insert the PayPal Subscription Buttons that were generated for you by s2Member.</p>' . "\n";
55
+ echo '<p>2. A User will click on a PayPal Subscription Button from your Membership Options Page. They will be transferred over to PayPal in order to agree to your Membership terms and pricing. You can customize the Checkout Page Style, Pricing, Payment Periods, and more, whenever you generate your PayPal Buttons through s2Member.</p>' . "\n";
56
+ echo '<p>3. Once a User has completed the Subscription Signup Process at PayPal, they\'ll be returned to your site, where they\'ll be activated by s2Member instantly, and given the opportunity to register a Username &amp; Password for their Membership. <em>(Note: they\'ll be allowed to register a Username &amp; Password even if you\'ve set \'Anyone Can Register\' to `Off` in your General WordPress options, because s2Member identifies the User as having paid for Membership access through PayPal)</em>.</p>' . "\n";
57
+ echo '<p>s2Member will also send the User an email with instructions on how to register their Username &amp; Password, just in case they missed anything after checkout. That email will be sent to their PayPal email address. Much of this is handled through the PayPal IPN service behind-the-scenes, where PayPal and s2Member communicate with each other.</p>' . "\n";
58
+ echo '<p>4. Once a User has completed checkout and registered a Username &amp; Password, they\'ll be able to log in. The first page they\'ll see after logging in will be your Login Welcome Page <em>(which you\'ll need to configure in the s2Member General Options panel)</em>. Your Login Welcome Page can contain whatever you like. You can design this Page in WordPress.</p>' . "\n";
 
59
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_registration_process", get_defined_vars ());
60
  echo '</div>' . "\n";
61
 
68
  {
69
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_log_reg_form", get_defined_vars ());
70
 
71
+ echo '<div class="ws-menu-page-group" title="Your Login/Registration Form" default-state="open">' . "\n";
72
 
73
  echo '<div class="ws-menu-page-section ws-plugin--s2member-login-reg-form-section">' . "\n";
74
+ echo '<p>s2Member uses the existing WordPress Login/Registration system. This is the same Login/Registration Form that you use to access your WP Dashboard. However, with s2Member installed, your Login/Registration Forms can be customized <em>(i.e., re-branded)</em>. <em>See: <strong>s2Member → General Options → Login/Registration Design</strong>.</em> You can make the default Login/Registration Forms match your WordPress theme design by changing the background color/image, your logo image, add Custom Fields, and more<em>!</em></p>' . "\n";
75
+ echo '<p>Since s2Member uses the default Login/Registration system for WordPress, s2Member is also compatible with themes and other plugins <em>(such as BuddyPress)</em>. If your theme has a login form built-in already, chances are, it\'s perfectly compatible with s2Member. There are also many plugins available that are designed to place login forms into your Sidebar. Many of those are also compatible with s2Member\'s integration. If you have any trouble, please check the <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank" rel="external">s2Member Forums</a> for assistance.</p>' . "\n";
 
76
  echo ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) || c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<div class="ws-menu-page-hr"></div>' . "\n" : '';
77
  echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of a Multisite Blog Farm uses a different Registration Form. See: <strong>s2Member → General Options → Registration/Profile Fields</strong>.</em></p>' . "\n" : '';
78
  echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form. See: <strong>s2Member → General Options → Registration/Profile Fields</strong>.</em></p>' . "\n" : '';
88
  {
89
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_login_welcome_page", get_defined_vars ());
90
 
91
+ echo '<div class="ws-menu-page-group" title="Your Login Welcome Page" default-state="open">' . "\n";
92
 
93
  echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
 
94
  echo '<p>You create this special Page in WordPress. This is a "Page" not a Post. This is the first page Members will see after logging into your site.</p>' . "\n";
95
+ echo '<p>You should go ahead and create an empty Page now, before you start configuring everything. Title it: <code>My Login Welcome Page</code> and click Publish.</p>' . "\n";
96
+ echo '<p>Once you have all of your <strong>s2Member → General Options</strong> configured, and once you have a basic understanding of how s2Member works, go back and customize the title and content for this Page. You\'ll want to be creative with your Login Welcome Page. However, you should configure your <strong>s2Member → General Options</strong> first and test things out. That way you\'ll understand why this Page is important.</p>' . "\n";
97
+ echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://s2member.com/r/customizing-login-welcome-page/" target="_blank" rel="external">Customizing Your Login Welcome Page</a>.</p>'."\n" : '';
98
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
99
  echo '</div>' . "\n";
100
 
107
  {
108
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_membership_options_page", get_defined_vars ());
109
 
110
+ echo '<div class="ws-menu-page-group" title="Your Membership Options Page" default-state="open">' . "\n";
111
 
112
  echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
 
113
  echo '<p>You create this special Page in WordPress. This is a "Page" not a Post. s2Member comes with a PayPal Button Generator. You will generate PayPal Buttons with s2Member, for each Membership Level that you plan to offer. Those buttons will be inserted into your Membership Options Page. If a User in the general public attempts to access an area of your site that is being protected by s2Member <em>(based on your configuration)</em>, s2Member will redirect the User to your Membership Options Page, where they can signup through PayPal and become a Member.</p>' . "\n";
114
+ echo '<p>You should go ahead and create an empty Page now, before you start configuring everything. Title it: <code>My Membership Options Page</code> and click Publish.</p>' . "\n";
115
+ echo '<p>Once you have all of your <strong>s2Member → General Options</strong> configured, and once you have a basic understanding of how s2Member works, go back and customize the title and content for this Page. You\'ll want to be creative with your Membership Options Page. However, you should configure your <strong>s2Member → General Options</strong> first and test things out. That way you\'ll understand why this Page is important.</p>' . "\n";
116
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_membership_options_page", get_defined_vars ());
117
  echo '</div>' . "\n";
118
 
125
  {
126
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_general_options", get_defined_vars ());
127
 
128
+ echo '<div class="ws-menu-page-group" title="Your s2Member → General Options" default-state="open">' . "\n";
129
 
130
  echo '<div class="ws-menu-page-section ws-plugin--s2member-general-options-section">' . "\n";
131
+ echo '<p>Once you have a Login Welcome Page and a Membership Options Page. Go to: <strong>s2Member → General Options</strong></p>' . "\n";
132
+ echo '<p>From the s2Member General Options Panel you can setup your Membership offering. Including the design of your Login/Registration Form, any Custom Registration/Profile Fields you\'d like to create, Labels for each Membership Level, Open Registration (on/off), a Profile Editing Panel for Members, and more.</p>' . "\n";
 
133
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_general_options", get_defined_vars ());
134
  echo '</div>' . "\n";
135
 
142
  {
143
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_restriction_options", get_defined_vars ());
144
 
145
+ echo '<div class="ws-menu-page-group" title="Your s2Member → Restriction Options" default-state="open">' . "\n";
146
 
147
  echo '<div class="ws-menu-page-section ws-plugin--s2member-restriction-options-section">' . "\n";
148
+ echo '<p>Once you have a Login Welcome Page and a Membership Options Page. Go to: <strong>s2Member → Restriction Options</strong></p>' . "\n";
149
+ echo '<p>From the s2Member Restriction Options Panel you may restrict access to certain Posts, Pages, Tags, Categories, and/or URIs based on a Member\'s Level. The s2Member Options Panel makes it easy for you. All you do is type in the basics of what you want to restrict access to and those sections of your site will be off limits to non-Members.</p>' . "\n";
 
150
  echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p>That being said, there are times when you might need to have greater control over which portions of your site can be viewed by non-Members, or Members at different Levels. This is where API Scripting with Conditionals comes in. <em>For more information, please check your Dashboard here: <strong>s2Member → API Scripting</strong></em>.</p>' . "\n" : '';
151
+ echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://s2member.com/r/simple-shortcode-conditionals/" target="_blank" rel="external">Simple Shortcode Conditionals</a>.</p>'."\n" : '';
152
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_restriction_options", get_defined_vars ());
153
  echo '</div>' . "\n";
154
 
161
  {
162
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_automation_process", get_defined_vars ());
163
 
164
+ echo '<div class="ws-menu-page-group" title="Cancellations / Expirations / Terminations" default-state="open">' . "\n";
165
 
166
  echo '<div class="ws-menu-page-section ws-plugin--s2member-automation-process-section">' . "\n";
 
167
  echo '<p>You\'ll be happy to know that s2Member handles cancellations, expirations, failed payments, terminations <em>(e.g., refunds &amp; chargebacks)</em> for you automatically. If you log into your PayPal account and cancel a Member\'s Subscription, or, if the Member logs into their PayPal account and cancels their own Subscription, s2Member will be notified of these important changes and react accordingly through the PayPal IPN service that runs silently behind-the-scene.</p>' . "\n";
168
+ echo '<p>The PayPal IPN service will notify s2Member whenever a Member\'s payments have been failing and/or whenever a Member\'s Subscription has expired for any reason. Even refunds &amp; chargeback reversals are supported through the IPN service. If you issue a refund to an unhappy Customer through PayPal, s2Member will be notified and the account for that Customer will either be demoted to a Free Subscriber or deleted automatically <em>(based on your configuration)</em>. The communication from PayPal → s2Member is seamless.</p>' . "\n";
169
  echo '<p><em><strong>Some Hairy Details:</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT (End Of Term) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs; which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
170
  echo '<p><em>s2Member will not process an EOT until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system (based on your configuration). s2Member also calculates one extra day (24 hours) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
171
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_automation_process", get_defined_vars ());
180
  {
181
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_upgrading_downgrading", get_defined_vars ());
182
 
183
+ echo '<div class="ws-menu-page-group" title="Upgrading/Downgrading Accounts" default-state="open">' . "\n";
184
 
185
  echo '<div class="ws-menu-page-section ws-plugin--s2member-upgrading-downgrading-section">' . "\n";
 
186
  echo '<p>s2Member builds upon existing functionality offered through WordPress Roles and Capabilities. From your WordPress Dashboard, go to: <code>Users</code>. You can use bulk actions to modify Member Access Levels all at once, or click on an individual Member account to modify only their specific Access Level. If you want to temporarily demote a Member so they cannot access Membership privileges, set their Role to Subscriber. When you\'re ready to give them their Membership privileges back, change their Role back to one of the s2Member Levels.</p>' . "\n";
187
+ echo '<p>All financial details, such as pricing, trial periods, subscription lengths, refunds, and other Customer service issues, should be handled by youthrough your PayPal account; not through WordPress. Feel free to modify your Members\' Subscriptions via PayPal as often as you like. s2Member will be notified through the PayPal IPN service behind-the-scenes automatically. For example, if you log into PayPal and cancel a Member\'s paid Subscription, s2Member will be notified by PayPal behind-the-scenes, and s2Member will remove their Membership privileges at the correct point in time.</p>' . "\n";
188
  echo '<p>That being said, if you log into your WordPress Dashboard and delete a Member\'s account, you will still need to log into PayPal and cancel billing for the account you deleted. In other words, s2Member can be notified automatically about actions you take inside PayPal\'s interface, but PayPal cannot be notified of actions you take inside your WordPress Dashboard. At least, not in an automated fashion, as that would create a security issue for PayPal. Thus, automation works seamlessly from PayPal » s2Member, but not the other way around.</p>' . "\n";
189
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_upgrading_downgrading", get_defined_vars ());
190
  echo '</div>' . "\n";
208
  {
209
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_reg_before_checkout", get_defined_vars ());
210
 
211
+ echo '<div class="ws-menu-page-group" title="Registration Before Checkout?" default-state="open">' . "\n";
212
 
213
  echo '<div class="ws-menu-page-section ws-plugin--s2member-reg-before-checkout-section">' . "\n";
214
+ echo '<p>By default, s2Member will send a Customer directly to PayPal, and only after checkout is completed does the Customer have the ability to register a Username/Password for access to your site. This process works very well in most cases, and it has the benefit of increasing conversion rates, because there are fewer obstacles for the Customer on their way to the actual checkout process at PayPal.</p>' . "\n";
215
+ echo '<p>That being said, we believe the <em>ideal</em> approach is a <em>combined</em> Checkout/Registration process; in just one simple step <em>(available with <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Add-on / Prices")) . '" target="_blank" rel="external">s2Member Pro</a> using Stripe™ (most popular), PayPal Pro integration, or through Authorize.Net)</em>. However, even with PayPal Standard Buttons, there is a way to accomplish Registration Before Checkout, thereby reversing the process—if you prefer it that way.</p>'."\n";
 
216
  echo '<p>With PayPal Standard Buttons, Registration before Checkout is accomplished by turning Open Registration <code>(on)</code>, and then making a PayPal Button available to Free Subscribers at Level #0. In other words, you can let Visitors register for free at Level #0 <em>(where they have access to very little perhaps)</em>, and then charge them for access to higher Member Levels [1-4]. For further details, please check your WordPress Dashboard here: <strong>s2Member → General Options → Open Registration</strong>.</p>' . "\n";
217
+ echo '<p><em>s2Member\'s Simple Conditionals can help with you too. For instance, you could integrate a special PayPal Button on your Login Welcome Page that will only be seen by Free Subscribers at Level #0. Please check your WordPress Dashboard under: <strong>s2Member → Restriction Options → Simple Shortcode Conditionals</strong>. We also suggest reading over the documentation on PayPal Modification Buttons. See: <strong>s2Member → PayPal Buttons → Subscr. Modification Buttons</strong>.</em></p>' . "\n";
218
+ echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://s2member.com/r/simple-shortcode-conditionals/" target="_blank" rel="external">Simple Shortcode Conditionals</a>.</p>'."\n" : '';
219
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_reg_before_checkout", get_defined_vars ());
220
  echo '</div>' . "\n";
221
 
228
  {
229
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_themes", get_defined_vars ());
230
 
231
+ echo '<div class="ws-menu-page-group" title="Choosing The Perfect WordPress Theme" default-state="open">' . "\n";
232
 
233
  echo '<div class="ws-menu-page-section ws-plugin--s2member-themes">' . "\n";
234
+ echo '<p>We recommend <a href="http://s2member.com/r/themeforest/" target="_blank" rel="external">ThemeForest</a>. This is a great place to find the perfect theme for your installation of WordPress—at very affordable prices.</p>' . "\n";
 
235
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_themes", get_defined_vars ());
236
  echo '</div>' . "\n";
237
  echo '</div>' . "\n";
243
  {
244
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_pro", get_defined_vars ());
245
 
246
+ echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
247
 
248
  echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
249
  echo '<h3>s2Member Pro—A Recommended Upgrade</h3>' . "\n";
250
+ echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular; also supports Bitcoin), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
251
+ echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
252
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
253
  echo '</div>' . "\n";
254
 
261
  {
262
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_help", get_defined_vars ());
263
 
264
+ echo '<div class="ws-menu-page-group" title="Getting Help w/ s2Member" default-state="open">' . "\n";
265
 
266
  echo '<div class="ws-menu-page-section ws-plugin--s2member-help">' . "\n";
267
+ echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://s2member.com/r/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>' . "\n";
268
+ echo '<p><strong>See also:</strong> <a href="http://s2member.com/r/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
 
269
 
270
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
271
 
272
  echo '<h3 style="margin-bottom:0;">Testing Server Compatibility</h3>'."\n";
273
+ echo '<p>Please download the <a href="http://s2member.com/r/server-scanner-info/">s2Member Server Scanner</a>. Unzip, upload via FTP; then open in a browser for a full report.</p>'."\n";
274
 
275
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
276
 
279
 
280
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
281
 
282
+ echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles<em>!</em></h3>'."\n";
283
+ echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
284
+ echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
285
  echo '</form>'."\n";
286
 
287
  do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_help", get_defined_vars ());
includes/menu-pages/trk-ops.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Menu page for the s2Member plugin (API Tracking page).
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Menu page for the s2Member plugin (API Tracking page).
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/menu-pages/updates.inc.php CHANGED
@@ -3,7 +3,7 @@
3
  * Newsletter/Updates for Menu Pages.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * Newsletter/Updates for Menu Pages.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
includes/s2member.css CHANGED
@@ -2,7 +2,7 @@
2
  * Core CSS stylesheet for the s2Member plugin.
3
  *
4
  * Copyright: © 2009-2011
5
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
6
  * (coded in the USA)
7
  *
8
  * Released under the terms of the GNU General Public License.
2
  * Core CSS stylesheet for the s2Member plugin.
3
  *
4
  * Copyright: © 2009-2011
5
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
6
  * (coded in the USA)
7
  *
8
  * Released under the terms of the GNU General Public License.
includes/s2member.js CHANGED
@@ -5,7 +5,7 @@
5
  * Which ultimately produces s2member-min.js.
6
  *
7
  * Copyright: © 2009-2011
8
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
9
  * (coded in the USA)
10
  *
11
  * Released under the terms of the GNU General Public License.
5
  * Which ultimately produces s2member-min.js.
6
  *
7
  * Copyright: © 2009-2011
8
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
9
  * (coded in the USA)
10
  *
11
  * Released under the terms of the GNU General Public License.
includes/syscon.inc.php CHANGED
@@ -6,7 +6,7 @@
6
  * Instead, use the plugin options panel in WordPress to override these settings.
7
  *
8
  * Copyright: © 2009-2011
9
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
10
  * (coded in the USA)
11
  *
12
  * Released under the terms of the GNU General Public License.
6
  * Instead, use the plugin options panel in WordPress to override these settings.
7
  *
8
  * Copyright: © 2009-2011
9
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
10
  * (coded in the USA)
11
  *
12
  * Released under the terms of the GNU General Public License.
includes/translations/s2member.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: 150925\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2015-09-25 23:48:25+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -290,7 +290,7 @@ msgctxt "s2member-front"
290
  msgid "as a Member"
291
  msgstr ""
292
 
293
- #: s2member/includes/classes/email-configs.inc.php:254
294
  #: s2member/includes/syscon.inc.php:215
295
  msgctxt "s2member-front"
296
  msgid ""
@@ -1138,217 +1138,197 @@ msgctxt "s2member-front"
1138
  msgid "(for this site)"
1139
  msgstr ""
1140
 
1141
- #: s2member/includes/classes/utils-time.inc.php:55
1142
  msgctxt "s2member-front"
1143
  msgid "less than a minute"
1144
  msgstr ""
1145
 
1146
- #: s2member/includes/classes/utils-time.inc.php:56
1147
  msgctxt "s2member-front"
1148
- msgid "1 minute"
1149
  msgstr ""
1150
 
1151
- #: s2member/includes/classes/utils-time.inc.php:57
1152
  msgctxt "s2member-front"
1153
- msgid "%s minute"
1154
- msgid_plural "%s minutes"
1155
  msgstr[0] ""
1156
  msgstr[1] ""
1157
 
1158
- #: s2member/includes/classes/utils-time.inc.php:58
1159
- msgctxt "s2member-front"
1160
- msgid "about 1 hour"
1161
- msgstr ""
1162
-
1163
  #: s2member/includes/classes/utils-time.inc.php:64
 
1164
  msgctxt "s2member-front"
1165
- msgid "1 hour"
1166
  msgstr ""
1167
 
1168
- #: s2member/includes/classes/utils-time.inc.php:65
1169
  msgctxt "s2member-front"
1170
- msgid "%s hour"
1171
- msgid_plural "%s hours"
1172
  msgstr[0] ""
1173
  msgstr[1] ""
1174
 
1175
- #: s2member/includes/classes/utils-time.inc.php:66
 
1176
  msgctxt "s2member-front"
1177
  msgid "about 1 day"
1178
  msgstr ""
1179
 
1180
- #: s2member/includes/classes/utils-time.inc.php:72
1181
- msgctxt "s2member-front"
1182
- msgid "1 day"
1183
- msgstr ""
1184
-
1185
- #: s2member/includes/classes/utils-time.inc.php:73
1186
  msgctxt "s2member-front"
1187
- msgid "%s day"
1188
- msgid_plural "%s days"
1189
  msgstr[0] ""
1190
  msgstr[1] ""
1191
 
1192
- #: s2member/includes/classes/utils-time.inc.php:74
 
1193
  msgctxt "s2member-front"
1194
  msgid "about 1 week"
1195
  msgstr ""
1196
 
1197
- #: s2member/includes/classes/utils-time.inc.php:80
1198
  msgctxt "s2member-front"
1199
- msgid "1 week"
1200
- msgstr ""
1201
-
1202
- #: s2member/includes/classes/utils-time.inc.php:81
1203
- msgctxt "s2member-front"
1204
- msgid "%s week"
1205
- msgid_plural "%s weeks"
1206
  msgstr[0] ""
1207
  msgstr[1] ""
1208
 
1209
- #: s2member/includes/classes/utils-time.inc.php:82
 
1210
  msgctxt "s2member-front"
1211
  msgid "about 1 month"
1212
  msgstr ""
1213
 
1214
- #: s2member/includes/classes/utils-time.inc.php:88
1215
- msgctxt "s2member-front"
1216
- msgid "1 month"
1217
- msgstr ""
1218
-
1219
- #: s2member/includes/classes/utils-time.inc.php:89
1220
  msgctxt "s2member-front"
1221
- msgid "%s month"
1222
- msgid_plural "%s months"
1223
  msgstr[0] ""
1224
  msgstr[1] ""
1225
 
1226
- #: s2member/includes/classes/utils-time.inc.php:90
 
1227
  msgctxt "s2member-front"
1228
  msgid "about 1 year"
1229
  msgstr ""
1230
 
1231
- #: s2member/includes/classes/utils-time.inc.php:96
1232
  msgctxt "s2member-front"
1233
- msgid "1 year"
1234
- msgstr ""
1235
-
1236
- #: s2member/includes/classes/utils-time.inc.php:97
1237
- msgctxt "s2member-front"
1238
- msgid "%s year"
1239
- msgid_plural "%s years"
1240
  msgstr[0] ""
1241
  msgstr[1] ""
1242
 
1243
- #: s2member/includes/classes/utils-time.inc.php:245
1244
  msgctxt "s2member-front"
1245
  msgid "Daily"
1246
  msgstr ""
1247
 
1248
- #: s2member/includes/classes/utils-time.inc.php:245
1249
  msgctxt "s2member-front"
1250
  msgid "Weekly"
1251
  msgstr ""
1252
 
1253
- #: s2member/includes/classes/utils-time.inc.php:245
1254
  msgctxt "s2member-front"
1255
  msgid "Monthly"
1256
  msgstr ""
1257
 
1258
- #: s2member/includes/classes/utils-time.inc.php:245
1259
  msgctxt "s2member-front"
1260
  msgid "Yearly"
1261
  msgstr ""
1262
 
1263
- #: s2member/includes/classes/utils-time.inc.php:245
1264
- #: s2member/includes/classes/utils-time.inc.php:256
1265
  msgctxt "s2member-front"
1266
  msgid "Lifetime"
1267
  msgstr ""
1268
 
1269
- #: s2member/includes/classes/utils-time.inc.php:249
1270
  msgctxt "s2member-front"
1271
  msgid "Bi-Weekly"
1272
  msgstr ""
1273
 
1274
- #: s2member/includes/classes/utils-time.inc.php:250
1275
  msgctxt "s2member-front"
1276
  msgid "Bi-Monthly"
1277
  msgstr ""
1278
 
1279
- #: s2member/includes/classes/utils-time.inc.php:251
1280
  msgctxt "s2member-front"
1281
  msgid "Quarterly"
1282
  msgstr ""
1283
 
1284
- #: s2member/includes/classes/utils-time.inc.php:252
1285
  msgctxt "s2member-front"
1286
  msgid "Semi-Yearly"
1287
  msgstr ""
1288
 
1289
- #: s2member/includes/classes/utils-time.inc.php:256
1290
  msgctxt "s2member-front"
1291
  msgid "Day"
1292
  msgstr ""
1293
 
1294
- #: s2member/includes/classes/utils-time.inc.php:256
1295
  msgctxt "s2member-front"
1296
  msgid "Week"
1297
  msgstr ""
1298
 
1299
- #: s2member/includes/classes/utils-time.inc.php:256
1300
  msgctxt "s2member-front"
1301
  msgid "Month"
1302
  msgstr ""
1303
 
1304
- #: s2member/includes/classes/utils-time.inc.php:256
1305
  msgctxt "s2member-front"
1306
  msgid "Year"
1307
  msgstr ""
1308
 
1309
- #: s2member/includes/classes/utils-time.inc.php:262
1310
  msgctxt "s2member-front"
1311
  msgid "Days"
1312
  msgstr ""
1313
 
1314
- #: s2member/includes/classes/utils-time.inc.php:262
1315
  msgctxt "s2member-front"
1316
  msgid "Weeks"
1317
  msgstr ""
1318
 
1319
- #: s2member/includes/classes/utils-time.inc.php:262
1320
  msgctxt "s2member-front"
1321
  msgid "Months"
1322
  msgstr ""
1323
 
1324
- #: s2member/includes/classes/utils-time.inc.php:262
1325
  msgctxt "s2member-front"
1326
  msgid "Years"
1327
  msgstr ""
1328
 
1329
- #: s2member/includes/classes/utils-time.inc.php:262
1330
  msgctxt "s2member-front"
1331
  msgid "Lifetimes"
1332
  msgstr ""
1333
 
1334
  #. translators: Each cycle ( i.e., `each day/week/month` or `every 2
1335
  #. days/weeks/months`, etc. ). Cycles are translated elsewhere.
1336
- #: s2member/includes/classes/utils-time.inc.php:299
1337
- #: s2member/includes/classes/utils-time.inc.php:342
1338
  msgctxt "s2member-front"
1339
  msgid "each %2$s"
1340
  msgid_plural "every %1$s %3$s"
1341
  msgstr[0] ""
1342
  msgstr[1] ""
1343
 
1344
- #: s2member/includes/classes/utils-time.inc.php:302
1345
  msgctxt "s2member-front"
1346
  msgid "lifetime"
1347
  msgstr ""
1348
 
1349
  #. translators: Membership cycle ( i.e., `1 day/week/month` or `2
1350
  #. days/weeks/months`, etc. ). Most of this is translated elsewhere.
1351
- #: s2member/includes/classes/utils-time.inc.php:306
1352
  msgctxt "s2member-front"
1353
  msgid "%1$s %2$s"
1354
  msgid_plural "%1$s %3$s"
@@ -1357,7 +1337,7 @@ msgstr[1] ""
1357
 
1358
  #. translators: Cycle ( i.e., `for 1 day/week/month` or `for 2
1359
  #. days/weeks/months`, etc. ). Most of this is translated elsewhere.
1360
- #: s2member/includes/classes/utils-time.inc.php:349
1361
  msgctxt "s2member-front"
1362
  msgid "for %1$s %2$s"
1363
  msgid_plural "for %1$s %3$s"
@@ -1540,13 +1520,13 @@ msgstr ""
1540
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
1541
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
1542
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:207
1543
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:321
1544
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:326
1545
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:624
1546
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:629
1547
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:634
1548
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:639
1549
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:644
1550
  msgctxt "s2member-front"
1551
  msgid "— Oops, you missed something: —"
1552
  msgstr ""
@@ -1561,7 +1541,7 @@ msgstr ""
1561
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:899
1562
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
1563
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:192
1564
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:629
1565
  msgctxt "s2member-front"
1566
  msgid "Passwords do not match up. Please try again."
1567
  msgstr ""
@@ -1576,7 +1556,7 @@ msgstr ""
1576
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:906
1577
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
1578
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
1579
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:634
1580
  msgctxt "s2member-front"
1581
  msgid "Password MUST be at least %s characters. Please try again."
1582
  msgstr ""
@@ -1591,7 +1571,7 @@ msgstr ""
1591
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:911
1592
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
1593
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
1594
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:639
1595
  msgctxt "s2member-front"
1596
  msgid "Password strength MUST be %s. Please try again."
1597
  msgstr ""
@@ -2685,7 +2665,7 @@ msgstr ""
2685
  #: s2member-pro/s2member-pro/includes/classes/coupons.inc.php:240
2686
  #: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:669
2687
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:311
2688
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:890
2689
  msgctxt "s2member-front percentage-symbol"
2690
  msgid "%"
2691
  msgstr ""
@@ -2890,11 +2870,11 @@ msgstr ""
2890
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:431
2891
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:571
2892
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:784
2893
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:164
2894
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:245
2895
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:318
2896
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:402
2897
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:556
2898
  msgctxt "s2member-front"
2899
  msgid "Security Verification"
2900
  msgstr ""
@@ -2903,8 +2883,8 @@ msgstr ""
2903
  #: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:743
2904
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:246
2905
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:752
2906
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:218
2907
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:529
2908
  msgctxt "s2member-front"
2909
  msgid "Additional Info"
2910
  msgstr ""
@@ -4195,37 +4175,37 @@ msgctxt "s2member-front"
4195
  msgid "<strong>Oops.</strong> No Customer|Subscr. ID. Please contact Support for assistance."
4196
  msgstr ""
4197
 
4198
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:193
4199
  msgctxt "s2member-front"
4200
  msgid "Error: <strong>prepaid</strong> cards not accepted at this time. Please use a different card and try again."
4201
  msgstr ""
4202
 
4203
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:662
4204
  msgctxt "s2member-front"
4205
  msgid "Error code: <code>%1$s</code>. %2$s."
4206
  msgstr ""
4207
 
4208
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:666
4209
  msgctxt "s2member-front"
4210
  msgid "Invalid parameters to Stripe; please contact the site owner."
4211
  msgstr ""
4212
 
4213
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:669
4214
  msgctxt "s2member-front"
4215
  msgid "Invalid Stripe API keys; please contact the site owner."
4216
  msgstr ""
4217
 
4218
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:672
4219
  msgctxt "s2member-front"
4220
  msgid "Network communication failure with Stripe; please try again."
4221
  msgstr ""
4222
 
4223
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:675
4224
  msgctxt "s2member-front"
4225
  msgid "Stripe API error; please try again."
4226
  msgstr ""
4227
 
4228
- #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:677
4229
  msgctxt "s2member-front"
4230
  msgid "Stripe error; please try again."
4231
  msgstr ""
@@ -4285,6 +4265,10 @@ msgctxt "s2member-front"
4285
  msgid "My Profile Summary"
4286
  msgstr ""
4287
 
 
 
 
 
4288
  #: s2member-pro/s2member-pro/includes/classes/sc-gift-codes-in.inc.php:126
4289
  msgctxt "s2member-front"
4290
  msgid "Redemption Code"
@@ -4330,8 +4314,8 @@ msgstr ""
4330
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4331
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:106
4332
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:207
4333
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:326
4334
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:644
4335
  msgctxt "s2member-front"
4336
  msgid "Security Verification missing. Please try again."
4337
  msgstr ""
@@ -4363,7 +4347,7 @@ msgstr ""
4363
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:354
4364
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:654
4365
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4366
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:481
4367
  msgctxt "s2member-front"
4368
  msgid "calculating sales tax..."
4369
  msgstr ""
@@ -4375,7 +4359,7 @@ msgstr ""
4375
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:365
4376
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:665
4377
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4378
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:498
4379
  msgctxt "s2member-front"
4380
  msgid "<strong>Sales Tax%s:</strong> %s<br /><strong>— Total%s:</strong> %s"
4381
  msgstr ""
@@ -4387,7 +4371,7 @@ msgstr ""
4387
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:365
4388
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:665
4389
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4390
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:498
4391
  msgctxt "s2member-front"
4392
  msgid "Today"
4393
  msgstr ""
@@ -4397,7 +4381,7 @@ msgstr ""
4397
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
4398
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:727
4399
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4400
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:425
4401
  #: s2member-pro/s2member-pro/includes/templates/forms/authnet-checkout-form.php:59
4402
  #: s2member-pro/s2member-pro/includes/templates/forms/authnet-registration-form.php:43
4403
  #: s2member-pro/s2member-pro/includes/templates/forms/paypal-checkout-form.php:59
@@ -4413,7 +4397,7 @@ msgstr ""
4413
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
4414
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:728
4415
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4416
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:426
4417
  msgctxt "s2member-front"
4418
  msgid "Your Profile"
4419
  msgstr ""
@@ -4449,15 +4433,15 @@ msgid "Submit Form"
4449
  msgstr ""
4450
 
4451
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4452
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:285
4453
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:585
4454
  msgctxt "s2member-front"
4455
  msgid "Add"
4456
  msgstr ""
4457
 
4458
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4459
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:305
4460
- #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:609
4461
  msgctxt "s2member-front"
4462
  msgid "No Billing Method; please try again."
4463
  msgstr ""
@@ -4499,7 +4483,28 @@ msgid ""
4499
  "%s"
4500
  msgstr ""
4501
 
4502
- #: s2member-pro/s2member-pro/includes/syscon.inc.php:122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4503
  msgctxt "s2member-front"
4504
  msgid "<div><small style=\"font-size:70%;\">ClickBank is the retailer of products on this site. CLICKBANK® is a registered trademark of Click Sales, Inc., a Delaware corporation located at 917 S. Lusk Street, Suite 200, Boise Idaho, 83706, USA and used by permission. ClickBank's role as retailer does not constitute an endorsement, approval or review of these products or any claim, statement or opinion used in promotion of these products.</small></div><p>%1$s <strong><em>says&hellip;</em></strong></p>"
4505
  msgstr ""
@@ -4757,22 +4762,22 @@ msgctxt "s2member-front"
4757
  msgid "Search"
4758
  msgstr ""
4759
 
4760
- #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:94
4761
  msgctxt "s2member-front"
4762
  msgid "Page:"
4763
  msgstr ""
4764
 
4765
- #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:102
4766
  msgctxt "s2member-front"
4767
  msgid "Sorry, your search returned 0 results."
4768
  msgstr ""
4769
 
4770
- #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:105
4771
  msgctxt "s2member-front"
4772
- msgid "Sorry, search is not allowed here. The shortcode attribute `enable_list_search` is not enabled by the site owner."
4773
  msgstr ""
4774
 
4775
- #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:108
4776
  msgctxt "s2member-front"
4777
  msgid "Sorry, there are no users to list at this time."
4778
  msgstr ""
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: 151210\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
+ "POT-Creation-Date: 2015-12-10 11:40:46+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
290
  msgid "as a Member"
291
  msgstr ""
292
 
293
+ #: s2member/includes/classes/email-configs.inc.php:253
294
  #: s2member/includes/syscon.inc.php:215
295
  msgctxt "s2member-front"
296
  msgid ""
1138
  msgid "(for this site)"
1139
  msgstr ""
1140
 
1141
+ #: s2member/includes/classes/utils-time.inc.php:61
1142
  msgctxt "s2member-front"
1143
  msgid "less than a minute"
1144
  msgstr ""
1145
 
1146
+ #: s2member/includes/classes/utils-time.inc.php:62
1147
  msgctxt "s2member-front"
1148
+ msgid "about 1 minute"
1149
  msgstr ""
1150
 
1151
+ #: s2member/includes/classes/utils-time.inc.php:63
1152
  msgctxt "s2member-front"
1153
+ msgid "about %s minute"
1154
+ msgid_plural "about %s minutes"
1155
  msgstr[0] ""
1156
  msgstr[1] ""
1157
 
 
 
 
 
 
1158
  #: s2member/includes/classes/utils-time.inc.php:64
1159
+ #: s2member/includes/classes/utils-time.inc.php:75
1160
  msgctxt "s2member-front"
1161
+ msgid "about 1 hour"
1162
  msgstr ""
1163
 
1164
+ #: s2member/includes/classes/utils-time.inc.php:76
1165
  msgctxt "s2member-front"
1166
+ msgid "about %s hour"
1167
+ msgid_plural "about %s hours"
1168
  msgstr[0] ""
1169
  msgstr[1] ""
1170
 
1171
+ #: s2member/includes/classes/utils-time.inc.php:77
1172
+ #: s2member/includes/classes/utils-time.inc.php:88
1173
  msgctxt "s2member-front"
1174
  msgid "about 1 day"
1175
  msgstr ""
1176
 
1177
+ #: s2member/includes/classes/utils-time.inc.php:89
 
 
 
 
 
1178
  msgctxt "s2member-front"
1179
+ msgid "about %s day"
1180
+ msgid_plural "about %s days"
1181
  msgstr[0] ""
1182
  msgstr[1] ""
1183
 
1184
+ #: s2member/includes/classes/utils-time.inc.php:90
1185
+ #: s2member/includes/classes/utils-time.inc.php:101
1186
  msgctxt "s2member-front"
1187
  msgid "about 1 week"
1188
  msgstr ""
1189
 
1190
+ #: s2member/includes/classes/utils-time.inc.php:102
1191
  msgctxt "s2member-front"
1192
+ msgid "about %s week"
1193
+ msgid_plural "about %s weeks"
 
 
 
 
 
1194
  msgstr[0] ""
1195
  msgstr[1] ""
1196
 
1197
+ #: s2member/includes/classes/utils-time.inc.php:103
1198
+ #: s2member/includes/classes/utils-time.inc.php:114
1199
  msgctxt "s2member-front"
1200
  msgid "about 1 month"
1201
  msgstr ""
1202
 
1203
+ #: s2member/includes/classes/utils-time.inc.php:115
 
 
 
 
 
1204
  msgctxt "s2member-front"
1205
+ msgid "about %s month"
1206
+ msgid_plural "about %s months"
1207
  msgstr[0] ""
1208
  msgstr[1] ""
1209
 
1210
+ #: s2member/includes/classes/utils-time.inc.php:116
1211
+ #: s2member/includes/classes/utils-time.inc.php:127
1212
  msgctxt "s2member-front"
1213
  msgid "about 1 year"
1214
  msgstr ""
1215
 
1216
+ #: s2member/includes/classes/utils-time.inc.php:128
1217
  msgctxt "s2member-front"
1218
+ msgid "about %s year"
1219
+ msgid_plural "about %s years"
 
 
 
 
 
1220
  msgstr[0] ""
1221
  msgstr[1] ""
1222
 
1223
+ #: s2member/includes/classes/utils-time.inc.php:276
1224
  msgctxt "s2member-front"
1225
  msgid "Daily"
1226
  msgstr ""
1227
 
1228
+ #: s2member/includes/classes/utils-time.inc.php:276
1229
  msgctxt "s2member-front"
1230
  msgid "Weekly"
1231
  msgstr ""
1232
 
1233
+ #: s2member/includes/classes/utils-time.inc.php:276
1234
  msgctxt "s2member-front"
1235
  msgid "Monthly"
1236
  msgstr ""
1237
 
1238
+ #: s2member/includes/classes/utils-time.inc.php:276
1239
  msgctxt "s2member-front"
1240
  msgid "Yearly"
1241
  msgstr ""
1242
 
1243
+ #: s2member/includes/classes/utils-time.inc.php:276
1244
+ #: s2member/includes/classes/utils-time.inc.php:287
1245
  msgctxt "s2member-front"
1246
  msgid "Lifetime"
1247
  msgstr ""
1248
 
1249
+ #: s2member/includes/classes/utils-time.inc.php:280
1250
  msgctxt "s2member-front"
1251
  msgid "Bi-Weekly"
1252
  msgstr ""
1253
 
1254
+ #: s2member/includes/classes/utils-time.inc.php:281
1255
  msgctxt "s2member-front"
1256
  msgid "Bi-Monthly"
1257
  msgstr ""
1258
 
1259
+ #: s2member/includes/classes/utils-time.inc.php:282
1260
  msgctxt "s2member-front"
1261
  msgid "Quarterly"
1262
  msgstr ""
1263
 
1264
+ #: s2member/includes/classes/utils-time.inc.php:283
1265
  msgctxt "s2member-front"
1266
  msgid "Semi-Yearly"
1267
  msgstr ""
1268
 
1269
+ #: s2member/includes/classes/utils-time.inc.php:287
1270
  msgctxt "s2member-front"
1271
  msgid "Day"
1272
  msgstr ""
1273
 
1274
+ #: s2member/includes/classes/utils-time.inc.php:287
1275
  msgctxt "s2member-front"
1276
  msgid "Week"
1277
  msgstr ""
1278
 
1279
+ #: s2member/includes/classes/utils-time.inc.php:287
1280
  msgctxt "s2member-front"
1281
  msgid "Month"
1282
  msgstr ""
1283
 
1284
+ #: s2member/includes/classes/utils-time.inc.php:287
1285
  msgctxt "s2member-front"
1286
  msgid "Year"
1287
  msgstr ""
1288
 
1289
+ #: s2member/includes/classes/utils-time.inc.php:293
1290
  msgctxt "s2member-front"
1291
  msgid "Days"
1292
  msgstr ""
1293
 
1294
+ #: s2member/includes/classes/utils-time.inc.php:293
1295
  msgctxt "s2member-front"
1296
  msgid "Weeks"
1297
  msgstr ""
1298
 
1299
+ #: s2member/includes/classes/utils-time.inc.php:293
1300
  msgctxt "s2member-front"
1301
  msgid "Months"
1302
  msgstr ""
1303
 
1304
+ #: s2member/includes/classes/utils-time.inc.php:293
1305
  msgctxt "s2member-front"
1306
  msgid "Years"
1307
  msgstr ""
1308
 
1309
+ #: s2member/includes/classes/utils-time.inc.php:293
1310
  msgctxt "s2member-front"
1311
  msgid "Lifetimes"
1312
  msgstr ""
1313
 
1314
  #. translators: Each cycle ( i.e., `each day/week/month` or `every 2
1315
  #. days/weeks/months`, etc. ). Cycles are translated elsewhere.
1316
+ #: s2member/includes/classes/utils-time.inc.php:330
1317
+ #: s2member/includes/classes/utils-time.inc.php:373
1318
  msgctxt "s2member-front"
1319
  msgid "each %2$s"
1320
  msgid_plural "every %1$s %3$s"
1321
  msgstr[0] ""
1322
  msgstr[1] ""
1323
 
1324
+ #: s2member/includes/classes/utils-time.inc.php:333
1325
  msgctxt "s2member-front"
1326
  msgid "lifetime"
1327
  msgstr ""
1328
 
1329
  #. translators: Membership cycle ( i.e., `1 day/week/month` or `2
1330
  #. days/weeks/months`, etc. ). Most of this is translated elsewhere.
1331
+ #: s2member/includes/classes/utils-time.inc.php:337
1332
  msgctxt "s2member-front"
1333
  msgid "%1$s %2$s"
1334
  msgid_plural "%1$s %3$s"
1337
 
1338
  #. translators: Cycle ( i.e., `for 1 day/week/month` or `for 2
1339
  #. days/weeks/months`, etc. ). Most of this is translated elsewhere.
1340
+ #: s2member/includes/classes/utils-time.inc.php:380
1341
  msgctxt "s2member-front"
1342
  msgid "for %1$s %2$s"
1343
  msgid_plural "for %1$s %3$s"
1520
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
1521
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
1522
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:207
1523
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:328
1524
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:333
1525
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:638
1526
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:643
1527
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:648
1528
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:653
1529
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:658
1530
  msgctxt "s2member-front"
1531
  msgid "— Oops, you missed something: —"
1532
  msgstr ""
1541
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:899
1542
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
1543
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:192
1544
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:643
1545
  msgctxt "s2member-front"
1546
  msgid "Passwords do not match up. Please try again."
1547
  msgstr ""
1556
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:906
1557
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
1558
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
1559
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:648
1560
  msgctxt "s2member-front"
1561
  msgid "Password MUST be at least %s characters. Please try again."
1562
  msgstr ""
1571
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:911
1572
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
1573
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
1574
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:653
1575
  msgctxt "s2member-front"
1576
  msgid "Password strength MUST be %s. Please try again."
1577
  msgstr ""
2665
  #: s2member-pro/s2member-pro/includes/classes/coupons.inc.php:240
2666
  #: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:669
2667
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:311
2668
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:899
2669
  msgctxt "s2member-front percentage-symbol"
2670
  msgid "%"
2671
  msgstr ""
2870
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:431
2871
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:571
2872
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:784
2873
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:196
2874
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:277
2875
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:350
2876
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:437
2877
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:594
2878
  msgctxt "s2member-front"
2879
  msgid "Security Verification"
2880
  msgstr ""
2883
  #: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:743
2884
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:246
2885
  #: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:752
2886
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:250
2887
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:567
2888
  msgctxt "s2member-front"
2889
  msgid "Additional Info"
2890
  msgstr ""
4175
  msgid "<strong>Oops.</strong> No Customer|Subscr. ID. Please contact Support for assistance."
4176
  msgstr ""
4177
 
4178
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:195
4179
  msgctxt "s2member-front"
4180
  msgid "Error: <strong>prepaid</strong> cards not accepted at this time. Please use a different card and try again."
4181
  msgstr ""
4182
 
4183
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:671
4184
  msgctxt "s2member-front"
4185
  msgid "Error code: <code>%1$s</code>. %2$s."
4186
  msgstr ""
4187
 
4188
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:675
4189
  msgctxt "s2member-front"
4190
  msgid "Invalid parameters to Stripe; please contact the site owner."
4191
  msgstr ""
4192
 
4193
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:678
4194
  msgctxt "s2member-front"
4195
  msgid "Invalid Stripe API keys; please contact the site owner."
4196
  msgstr ""
4197
 
4198
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:681
4199
  msgctxt "s2member-front"
4200
  msgid "Network communication failure with Stripe; please try again."
4201
  msgstr ""
4202
 
4203
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:684
4204
  msgctxt "s2member-front"
4205
  msgid "Stripe API error; please try again."
4206
  msgstr ""
4207
 
4208
+ #: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:686
4209
  msgctxt "s2member-front"
4210
  msgid "Stripe error; please try again."
4211
  msgstr ""
4265
  msgid "My Profile Summary"
4266
  msgstr ""
4267
 
4268
+ #: s2member-pro/s2member-pro/includes/classes/reminders.inc.php:232
4269
+ msgid "0 / non-recurring"
4270
+ msgstr ""
4271
+
4272
  #: s2member-pro/s2member-pro/includes/classes/sc-gift-codes-in.inc.php:126
4273
  msgctxt "s2member-front"
4274
  msgid "Redemption Code"
4314
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4315
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:106
4316
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:207
4317
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:333
4318
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:658
4319
  msgctxt "s2member-front"
4320
  msgid "Security Verification missing. Please try again."
4321
  msgstr ""
4347
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:354
4348
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:654
4349
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4350
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:488
4351
  msgctxt "s2member-front"
4352
  msgid "calculating sales tax..."
4353
  msgstr ""
4359
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:365
4360
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:665
4361
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4362
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:505
4363
  msgctxt "s2member-front"
4364
  msgid "<strong>Sales Tax%s:</strong> %s<br /><strong>— Total%s:</strong> %s"
4365
  msgstr ""
4371
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:365
4372
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:665
4373
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4374
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:505
4375
  msgctxt "s2member-front"
4376
  msgid "Today"
4377
  msgstr ""
4381
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
4382
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:727
4383
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4384
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:432
4385
  #: s2member-pro/s2member-pro/includes/templates/forms/authnet-checkout-form.php:59
4386
  #: s2member-pro/s2member-pro/includes/templates/forms/authnet-registration-form.php:43
4387
  #: s2member-pro/s2member-pro/includes/templates/forms/paypal-checkout-form.php:59
4397
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
4398
  #: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:728
4399
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4400
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:433
4401
  msgctxt "s2member-front"
4402
  msgid "Your Profile"
4403
  msgstr ""
4433
  msgstr ""
4434
 
4435
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4436
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:292
4437
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:599
4438
  msgctxt "s2member-front"
4439
  msgid "Add"
4440
  msgstr ""
4441
 
4442
  #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
4443
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:312
4444
+ #: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:623
4445
  msgctxt "s2member-front"
4446
  msgid "No Billing Method; please try again."
4447
  msgstr ""
4483
  "%s"
4484
  msgstr ""
4485
 
4486
+ #: s2member-pro/s2member-pro/includes/syscon.inc.php:106
4487
+ msgctxt "s2member-front"
4488
+ msgid "Renewal Reminder (Account Expires in %%%%eot_descriptive_time%%%%)"
4489
+ msgstr ""
4490
+
4491
+ #: s2member-pro/s2member-pro/includes/syscon.inc.php:107
4492
+ msgctxt "s2member-front"
4493
+ msgid ""
4494
+ "Hi %%%%first_name%%%%!\n"
4495
+ "\n"
4496
+ "Just a reminder that your account access will expire: %%%%eot_date_time_tz%%%% (%%%%eot_descriptive_time%%%% from now).\n"
4497
+ "\n"
4498
+ "Please log in if you'd like to renew:\n"
4499
+ "%s\n"
4500
+ "\n"
4501
+ "If you have any trouble, feel free to contact us.\n"
4502
+ "\n"
4503
+ "Best Regards,\n"
4504
+ "%s"
4505
+ msgstr ""
4506
+
4507
+ #: s2member-pro/s2member-pro/includes/syscon.inc.php:136
4508
  msgctxt "s2member-front"
4509
  msgid "<div><small style=\"font-size:70%;\">ClickBank is the retailer of products on this site. CLICKBANK® is a registered trademark of Click Sales, Inc., a Delaware corporation located at 917 S. Lusk Street, Suite 200, Boise Idaho, 83706, USA and used by permission. ClickBank's role as retailer does not constitute an endorsement, approval or review of these products or any claim, statement or opinion used in promotion of these products.</small></div><p>%1$s <strong><em>says&hellip;</em></strong></p>"
4510
  msgstr ""
4762
  msgid "Search"
4763
  msgstr ""
4764
 
4765
+ #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:99
4766
  msgctxt "s2member-front"
4767
  msgid "Page:"
4768
  msgstr ""
4769
 
4770
+ #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:107
4771
  msgctxt "s2member-front"
4772
  msgid "Sorry, your search returned 0 results."
4773
  msgstr ""
4774
 
4775
+ #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:110
4776
  msgctxt "s2member-front"
4777
+ msgid "Sorry, search is not allowed here. The shortcode attribute <code>enable_list_search</code> was not enabled by the site owner."
4778
  msgstr ""
4779
 
4780
+ #: s2member-pro/s2member-pro/includes/templates/members/member-list.php:113
4781
  msgctxt "s2member-front"
4782
  msgid "Sorry, there are no users to list at this time."
4783
  msgstr ""
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
- Version: 150925
4
- Stable tag: 150925
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
@@ -17,37 +17,37 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
17
  Google® Checkout Compatible: yes w/s2Member® Pro
18
  ClickBank® Compatible: yes w/s2Member® Pro
19
 
20
- Tested up to: 4.4-alpha
21
  Requires at least: 4.2
22
 
23
  Requires PHP: 5.2+
24
- Tested up to PHP: 5.6
25
 
26
  Copyright: © 2009 WebSharks, Inc.
27
  License: GNU General Public License v2 or later.
28
  Contributors: WebSharks, JasWSInc, anguz, raamdev, sitegeek, kristineds
29
 
30
  Author: s2Member® / WebSharks, Inc.
31
- Author URI: http://www.s2member.com/
32
- Donate link: http://www.s2member.com/donate/
33
- Beta link: http://www.s2member.com/beta-testers/
34
 
35
  Text Domain: s2member
36
  Domain Path: /includes/translations
37
 
38
  Plugin Name: s2Member® Framework
39
- Forum URI: http://www.s2member.com/forums/
40
- Plugin URI: http://www.s2member.com/framework/
41
- Privacy URI: http://www.s2member.com/privacy/
42
- Changelog URI: http://www.s2member.com/changelog/
43
- Video Tutorials: http://www.s2member.com/videos/
44
- Knowledge Base: http://www.s2member.com/kb/
45
- Newsletter: http://www.s2member.com/r/subscribe/
46
- Pro Add-on / Home Page: http://www.s2member.com/
47
- Pro Add-on / Prices: http://www.s2member.com/prices/
48
  Pro Add-on / Auto-Update URL: https://www.s2member.com/
49
- PayPal Pro Integration: http://www.s2member.com/videos/ED70D90C6749DA3D/
50
- Professional Installation URI: http://www.s2member.com/professional-installation/
51
 
52
  Description: s2Member®—a powerful (free) membership plugin for WordPress®. Protect members only content with roles/capabilities.
53
  Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, stripe, bitcoin, paypal, paypal pro, pay pal, authorize, authorize.net, google wallet, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
@@ -117,15 +117,15 @@ Yes. s2Member and s2Member Pro, are also both compatible with Multisite Networki
117
 
118
  = Please Check the Following s2Member® Resources =
119
 
120
- * s2Member® FAQs: <http://www.s2member.com/faqs/>
121
- * Knowledge Base: <http://www.s2member.com/kb/>
122
- * Video Tutorials: <http://www.s2member.com/videos/>
123
- * Community: <http://www.s2member.com/forums/>
124
- * Codex: <http://www.s2member.com/codex/>
125
 
126
  = Translating s2Member® =
127
 
128
- Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
129
 
130
  == License ==
131
 
@@ -169,12 +169,84 @@ Released under the terms of the [GNU General Public License](http://www.gnu.org/
169
 
170
  == Upgrade Notice ==
171
 
172
- = v150925 =
173
 
174
  (Maintenance Release) Upgrade immediately.
175
 
176
  == Changelog ==
177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  = v150925 =
179
 
180
  - (s2Member/s2Member Pro) **WP v4.3 Compat.** This release corrects a minor backward compatibility issue with versions of WordPress before v4.3, and for installations of s2Member that still use the `%%user_pass%%` Replacement Code in their New User Email notification. See [this GitHub issue](https://github.com/websharks/s2member/issues/710) if you'd like additional details.
1
  === s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
+ Version: 151210
4
+ Stable tag: 151210
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
17
  Google® Checkout Compatible: yes w/s2Member® Pro
18
  ClickBank® Compatible: yes w/s2Member® Pro
19
 
20
+ Tested up to: 4.4
21
  Requires at least: 4.2
22
 
23
  Requires PHP: 5.2+
24
+ Tested up to PHP: 7.0
25
 
26
  Copyright: © 2009 WebSharks, Inc.
27
  License: GNU General Public License v2 or later.
28
  Contributors: WebSharks, JasWSInc, anguz, raamdev, sitegeek, kristineds
29
 
30
  Author: s2Member® / WebSharks, Inc.
31
+ Author URI: http://s2member.com/
32
+ Donate link: http://s2member.com/donate/
33
+ Beta link: http://s2member.com/beta-testers/
34
 
35
  Text Domain: s2member
36
  Domain Path: /includes/translations
37
 
38
  Plugin Name: s2Member® Framework
39
+ Forum URI: http://s2member.com/forums/
40
+ Plugin URI: http://s2member.com/
41
+ Privacy URI: http://s2member.com/privacy-policy/
42
+ Changelog URI: http://s2member.com/changelog/
43
+ Video Tutorials: http://s2member.com/videos/
44
+ Knowledge Base: http://s2member.com/kb/
45
+ Newsletter: http://s2member.com/r/subscribe/
46
+ Pro Add-on / Home Page: http://s2member.com/
47
+ Pro Add-on / Prices: http://s2member.com/prices/
48
  Pro Add-on / Auto-Update URL: https://www.s2member.com/
49
+ PayPal Pro Integration: http://s2member.com/r/pp-account-types/
50
+ Professional Installation URI: http://s2member.com/r/professional-installation/
51
 
52
  Description: s2Member®—a powerful (free) membership plugin for WordPress®. Protect members only content with roles/capabilities.
53
  Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, stripe, bitcoin, paypal, paypal pro, pay pal, authorize, authorize.net, google wallet, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
117
 
118
  = Please Check the Following s2Member® Resources =
119
 
120
+ * s2Member® FAQs: <http://s2member.com/faqs/>
121
+ * Knowledge Base: <http://s2member.com/kb/>
122
+ * Video Tutorials: <http://s2member.com/videos/>
123
+ * Community: <http://s2member.com/forums/>
124
+ * Codex: <http://s2member.com/codex/>
125
 
126
  = Translating s2Member® =
127
 
128
+ Please see: <http://s2member.com/r/translations/>
129
 
130
  == License ==
131
 
169
 
170
  == Upgrade Notice ==
171
 
172
+ = v151210 =
173
 
174
  (Maintenance Release) Upgrade immediately.
175
 
176
  == Changelog ==
177
 
178
+ = v151210 =
179
+
180
+ - (s2Member/s2Member Pro) **WP/PHP Compat:** Updated for compatibility with WordPress 4.4 and PHP v7.0. Note that s2Member and s2Member Pro also remain compatible with WordPress 4.3 and PHP 5.2. However, PHP 5.5+ is strongly recommended.
181
+
182
+ - (s2Member Pro) **New Feature! EOT Renewal/Reminder Email Notifications:** This release adds a long-awaited feature which allows you to configure & send EOT Renewal/Reminder Email notifications to your customers; to let them know their account with you will expire soon.
183
+
184
+ It's possible to configure one or more notifications, each with a different set of recipients, and a different subject and message body. Notifications can be sent out X days before the EOT occurs, _the day_ of the EOT, or X days after the EOT has already occurred; e.g., to encourage renewals.
185
+
186
+ See: **Dashboard → s2Member → Stripe Options → EOT Renewal/Reminder Email(s)**
187
+ _Also works with PayPal Pro, Authorize.Net, and ClickBank._
188
+
189
+ Props @clavaque @KTS915 @raamdev @patdumond @kristineds @pagelab @chronicelite @csexplorer17 @radven, and all of our great supporters. See [this GitHub issue](https://github.com/websharks/s2member/issues/122#issuecomment-161531763).
190
+
191
+ - (s2Member/s2Member Pro) **Cleanup:** This release improves the list of Other Gateways; moving deprecated payment gateways to the bottom of the list and improving the display of the list overall. Props @kristineds @clavaque. For further details, see [this GitHub issue](https://github.com/websharks/s2member/issues/715).
192
+
193
+ - (s2Member/s2Member Pro) **Bug Fix:** This release corrects an "Insecure Content Warning" that may have appeared in certain portions of the s2Member Dashboard panels whenever you accessed your Dashboard over the `https` protocol. The issue was seen in Google Chrome and it was simply a `<form>` tag that referenced the s2Member mailing list. This is now hidden by default if you access the Dashboard over SSL, in order to avoid this warning. Props @patdumond for reporting. Props @renzms for fixing. See also [this GitHub issue](https://github.com/websharks/s2member/issues/678) if you'd like additional details.
194
+
195
+ - (s2Member Pro) **Stripe Locale:** This release adjusts the Stripe overlay so that it will automatically display in the language associated with a visitor's country. This was accomplished by setting the Stripe Checkout variable `locale: 'auto'` as suggested in [this GitHub issue](https://github.com/websharks/s2member/issues/728). Props @renzms
196
+
197
+ - (s2Member Pro) **Stripe Bug Fix:** This release improves the way Stripe Image Branding and Stripe Statement Descriptions are applied whenever you intentionally leave them empty. It also changes the default value of Stripe Image Branding to an empty string; which will tell Stripe to use the account-level default value that you configured in your Stripe Dashboard in favor of that which you configure with s2Member. The choice is still yours, but this release sets what others have told us are better default values. See also [this GitHub issue](https://github.com/websharks/s2member/issues/666) if you'd like additional details.
198
+
199
+ - (s2Member Pro) **Stripe Enhancement:** This release makes it possible to configure the Stripe "Remember Me" functionality with s2Member; i.e., it is now possible to turn this on/off if you so desire. See also [this GitHub issue](https://github.com/websharks/s2member/issues/357) for details.
200
+
201
+ - (s2Member Pro) **Stripe Enhancement:** This release makes it possible for you to tell Stripe to collect a customer's full Billing Address and/or full Shipping Address. See [this GitHub issue](https://github.com/websharks/s2member/issues/667) for additional details.
202
+
203
+ - (s2Member/s2Member Pro) **UI Clarity:** This release improves the way the New User Email Notification panel behaves whenever you also have Custom Passwords enabled with s2Member. The New User Email Notification is only sent when Custom Passwords are off, so this panel should disable itself whenever that is the case. Fixed in this release. Props @raamdev See also: [this GitHub issue](https://github.com/websharks/s2member/issues/739) if you'd like additional details.
204
+
205
+ - (s2Member/s2Member Pro) **Bug Fix:** This release resolves a minor issue for developers running Vagrant and VVV with symlink plugins. Props @magbicaleman ~ See [this GitHub issue](https://github.com/websharks/s2member/issues/717) for further details.
206
+
207
+ - (s2Member Pro) **Conflict Resolution:** This release resolves a conflict with the WP Full Stripe plugin and any other plugins that already load an existing copy of the Stripe SDK at runtime; in concert with s2Member Pro. See [this GitHub issue](https://github.com/websharks/s2member/issues/750) if you'd like additional details.
208
+
209
+ - (s2Member/s2Member Pro) **New Log File:** This release of s2Member adds a new log file that keeps track of all automatic EOTs that occur through the underlying CRON job. The new log file is named: `auto-eot-system.log` and you can learn more about this file and view it from: **Dashboard → s2Member → Log Files (Debug) → Log Viewer**. Props @raamdev ~ See [this GitHub issue](https://github.com/websharks/s2member/issues/759) if you'd like additional details.
210
+
211
+ - (s2Member Pro) **`[s2Member-List /]` Bug Fix:** This release resolves a problem in the `[s2Member-List /]` shortcode whenever it is configured to search Custom Fields generated with s2Member. Props @patdumond @renzms. See [this GitHub issue](https://github.com/websharks/s2member/issues/765) if you'd like additional details.
212
+
213
+ - (s2Member Pro) **Stripe Enhancement:** This release updates s2Member's Stripe integration so that any Buy Now transaction spawns a Stripe popup with the amount and full description filled within the popup itself as well. Props @raamdev. See [this GitHub issue](https://github.com/websharks/s2member/issues/749) for further details.
214
+
215
+ - (s2Member/s2Member Pro) **WP v4.3 Compat.** This release addresses a minor conflict between functionality provided by s2Member and that of the WordPress core itself. Whenever you change a user's password by editing their account, you can choose to send them an email about this change (or not). Since WordPress v4.3, the WordPress core will _also_ send a more vague email to notify the user of a password change, which is not customizable. This release disables that default email notification in favor of the more helpful and customizable email message that can be sent by s2Member. Simply tick the "Reset Password & Resend New User Email Notification" checkbox whenever you are editing a user. Props @patdumond for reporting. See also [this GitHub issue](https://github.com/websharks/s2member/issues/777) if you'd like additional details.
216
+
217
+ - (s2Member/s2Member Pro) **PayPal Compat.** This release resolves a conflict between s2Member and a nasty bug at PayPal.com that came to light recently. In some cases, customers reported that clicking the "Continue" button at PayPal.com simply reloaded the page and gave no response. We found that this was attributed to a bug on the PayPal side (see [792](https://github.com/websharks/s2member/issues/792)). To work around this bug, we are using a new default value for the `ns="1"` shortcode attribute in PayPal Pro-Forms and PayPal Buttons. The new default value is `ns="0"`, which seems to work around this bug for the time being. Props @patdumond @raamdev for reporting and testing this fix. See also [full report here](https://github.com/websharks/s2member/issues/792).
218
+
219
+ - `ns="0"` (**new default**) = prompt for a shipping address, but do not require one
220
+ - `ns="1"` (old default) = do not prompt for a shipping address whatsoever
221
+
222
+ See also: **Dashboard → s2Member → PayPal Pro-Forms → PayPal Shortcode Attributes (Explained)**
223
+
224
+ - (s2Member/s2Member Pro) **Getting Started:** The old Quick Start Guide was renamed to "Getting Started" in this release. It was also cleaned up and improved a bit; i.e., brought up-to-date. In addition, there is a new welcome message for first-time users of the software that invites them to read over the Getting Started page before they begin. Props @raamdev. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/655).
225
+
226
+ - (s2Member Pro) **Stripe Bug Fix:** This release corrects a problem with Stripe refund and chargeback notification handling. s2Member Pro will now receive and handle Stripe refund and/or chargeback events (through your existing Webhook) as expected.
227
+
228
+ See: **Dashboard → s2Member → Stripe Options → Automatic EOT Behavior** for options that allow you to control the way in which s2Member should respond whenever a refund is processed, or when a dispute (chargeback) occurs at Stripe.
229
+
230
+ Props @ElizWS and @tubiz w/ AffiliateWP. See also [this GitHub issue](https://github.com/websharks/s2member/issues/706).
231
+
232
+ - (s2Member Pro) **`[s2Member-List /]`** Added the ability to search usermeta data too. For instance, you can now search `first_name`, `last_name`, `nickname`, `description`, `s2member_subscr_id`, `s2member_custom`, etc, etc. See [this GitHub issue](https://github.com/websharks/s2member/issues/596).
233
+
234
+ _**Note:** The `first_name`, `last_name`, and `nickname` columns are now a part of the default value for the `search_columns=""` attribute in the `[s2Member-List /]` shortcode. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/596). Props @patdumond for her ideas._
235
+
236
+ - (s2Member Pro) **`[s2Member-List /]`** There are some new `orderby=""` options. You may now choose to order the list by: `first_name`, `last_name`, or `nickname`.
237
+
238
+ - (s2Member Pro) **`[s2Member-List /]`** It is now possible to search through s2Member Custom Registration/Profile Fields that may contain an array of values; i.e., you can now search _any_ Custom Registration/Profile Field in s2Member. For instance, if a field is designed to accept multiple selections, or you provide a set of multiple checkbox options. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/555).
239
+
240
+ - (s2Member Pro) **`[s2Member-List /]` Bug Fix:** Meta fields that contained a timestamp were being displayed by the `date_i18n()` function in WP core. However, the time offset calculation was wrong; i.e., not a match to the local time configured by your installation of WordPress. Fixed in this release.
241
+
242
+ - (s2Member Pro) **`[s2Member-List /]` Bug Fix:** Minor formatting corrections for replacement codes made available for the `link_*=""` attributes in the `[s2Member-List /]` shortcode.
243
+
244
+ - (s2Member Pro) **`[s2Member-List /]`:** It is now possible to search for an exact match by surrounding your search query with double quotes; e.g., `"john doe"` (in quotes, for an exact match), instead of the default behavior, which is `*john doe*` behind-the-scenes; i.e., a fuzzy match.
245
+
246
+ - (s2Member Pro) **`[s2Member-List /]`:** Several behind-the-scenes performance enhancements.
247
+
248
+ - (s2Member/s2Member Pro) **PHP 7 Compat.** This release of s2Member removes its use of the `/e` modifier in calls to `preg_replace()`, which was deprecated in PHP 5.5 and has been removed in PHP 7. Props @bridgeport. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/415).
249
+
250
  = v150925 =
251
 
252
  - (s2Member/s2Member Pro) **WP v4.3 Compat.** This release corrects a minor backward compatibility issue with versions of WordPress before v4.3, and for installations of s2Member that still use the `%%user_pass%%` Replacement Code in their New User Email notification. See [this GitHub issue](https://github.com/websharks/s2member/issues/710) if you'd like additional details.
s2member-o.php CHANGED
@@ -3,7 +3,7 @@
3
  * WordPress with s2Member only.
4
  *
5
  * Copyright: © 2009-2011
6
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
3
  * WordPress with s2Member only.
4
  *
5
  * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
  * (coded in the USA)
8
  *
9
  * Released under the terms of the GNU General Public License.
s2member.php CHANGED
@@ -6,7 +6,7 @@
6
  * PHP, WordPress and other compatibility requirements.
7
  *
8
  * Copyright: © 2009-2011
9
- * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
10
  * (coded in the USA)
11
  *
12
  * Released under the terms of the GNU General Public License.
@@ -19,8 +19,8 @@
19
  */
20
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
 
22
- Version: 150925
23
- Stable tag: 150925
24
 
25
  SSL Compatible: yes
26
  bbPress Compatible: yes
@@ -35,31 +35,36 @@ Authorize.Net Compatible: yes w/s2Member Pro
35
  Google Wallet Compatible: yes w/s2Member Pro
36
  ClickBank Compatible: yes w/s2Member Pro
37
 
38
- Tested up to: 4.4-alpha
39
  Requires at least: 4.2
40
 
 
 
 
41
  Copyright: © 2009 WebSharks, Inc.
42
  License: GNU General Public License
43
  Contributors: WebSharks, JasWSInc, anguz, raamdev, bruce-caldwell
44
 
45
  Author: s2Member / WebSharks, Inc.
46
- Author URI: http://www.s2member.com/
47
- Donate link: http://www.s2member.com/donate/
48
 
49
  Text Domain: s2member
50
  Domain Path: /includes/translations
51
 
52
  Plugin Name: s2Member Framework
53
- Forum URI: http://www.s2member.com/forums/
54
- Plugin URI: http://www.s2member.com/framework/
55
- Privacy URI: http://www.s2member.com/privacy/
56
- Changelog URI: http://www.s2member.com/changelog/
57
- Video Tutorials: http://www.s2member.com/videos/
58
- Pro Add-on / Home Page: http://www.s2member.com/
59
- Pro Add-on / Prices: http://www.s2member.com/prices/
60
- Pro Add-on / Auto-Update URL: http://www.s2member.com/
61
- PayPal Pro Integration: http://www.s2member.com/videos/ED70D90C6749DA3D/
62
- Professional Installation URI: http://www.s2member.com/professional-installation/
 
 
63
 
64
  Description: s2Member, a powerful (free) membership plugin for WordPress. Protect/secure members only content with roles/capabilities.
65
  Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, paypal pro, pay pal, authorize, authorize.net, google wallet, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
@@ -76,7 +81,7 @@ if(!defined('WPINC')) // MUST have WordPress.
76
  * @var string
77
  */
78
  if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
79
- define('WS_PLUGIN__S2MEMBER_VERSION', '150925' /* !#distro-version#! */);
80
  /**
81
  * Minimum PHP version required to run s2Member.
82
  *
@@ -106,7 +111,7 @@ if(!defined('WS_PLUGIN__S2MEMBER_MIN_WP_VERSION'))
106
  * @var string
107
  */
108
  if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
109
- define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '150925' /* !#distro-version#! */);
110
  /*
111
  Several compatibility checks.
112
  If all pass, load the s2Member plugin.
6
  * PHP, WordPress and other compatibility requirements.
7
  *
8
  * Copyright: © 2009-2011
9
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
10
  * (coded in the USA)
11
  *
12
  * Released under the terms of the GNU General Public License.
19
  */
20
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
 
22
+ Version: 151210
23
+ Stable tag: 151210
24
 
25
  SSL Compatible: yes
26
  bbPress Compatible: yes
35
  Google Wallet Compatible: yes w/s2Member Pro
36
  ClickBank Compatible: yes w/s2Member Pro
37
 
38
+ Tested up to: 4.4
39
  Requires at least: 4.2
40
 
41
+ Requires PHP: 5.2+
42
+ Tested up to PHP: 7.0
43
+
44
  Copyright: © 2009 WebSharks, Inc.
45
  License: GNU General Public License
46
  Contributors: WebSharks, JasWSInc, anguz, raamdev, bruce-caldwell
47
 
48
  Author: s2Member / WebSharks, Inc.
49
+ Author URI: http://s2member.com/
50
+ Donate link: http://s2member.com/donate/
51
 
52
  Text Domain: s2member
53
  Domain Path: /includes/translations
54
 
55
  Plugin Name: s2Member Framework
56
+ Forum URI: http://s2member.com/forums/
57
+ Plugin URI: http://s2member.com/
58
+ Privacy URI: http://s2member.com/privacy-policy/
59
+ Changelog URI: http://s2member.com/changelog/
60
+ Video Tutorials: http://s2member.com/videos/
61
+ Knowledge Base: http://s2member.com/kb/
62
+ Newsletter: http://s2member.com/r/subscribe/
63
+ Pro Add-on / Home Page: http://s2member.com/
64
+ Pro Add-on / Prices: http://s2member.com/prices/
65
+ Pro Add-on / Auto-Update URL: https://www.s2member.com/
66
+ PayPal Pro Integration: http://s2member.com/r/pp-account-types/
67
+ Professional Installation URI: http://s2member.com/r/professional-installation/
68
 
69
  Description: s2Member, a powerful (free) membership plugin for WordPress. Protect/secure members only content with roles/capabilities.
70
  Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, paypal pro, pay pal, authorize, authorize.net, google wallet, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
81
  * @var string
82
  */
83
  if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
84
+ define('WS_PLUGIN__S2MEMBER_VERSION', '151210' /* !#distro-version#! */);
85
  /**
86
  * Minimum PHP version required to run s2Member.
87
  *
111
  * @var string
112
  */
113
  if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
114
+ define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '151210' /* !#distro-version#! */);
115
  /*
116
  Several compatibility checks.
117
  If all pass, load the s2Member plugin.