Version Description
Download this release
Release Info
Developer | PriMoThemes |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 110731 |
Comparing to | |
See all releases |
Code changes from version 110710 to 110731
- includes/classes/constants.inc.php +120 -12
- includes/classes/css-js-in.inc.php +18 -13
- includes/classes/custom-reg-fields-4bp.inc.php +107 -99
- includes/classes/custom-reg-fields.inc.php +33 -33
- includes/classes/files-in.inc.php +7 -4
- includes/classes/login-redirects.inc.php +16 -11
- includes/classes/option-forces.inc.php +5 -5
- includes/classes/paypal-notify-in-cart.inc.php +82 -0
- includes/classes/paypal-notify-in-express-checkout.inc.php +82 -0
- includes/classes/paypal-notify-in-rec-profile-creation-w-level.inc.php +84 -0
- includes/classes/paypal-notify-in-send-money.inc.php +81 -0
- includes/classes/paypal-notify-in-sp-refund-reversal.inc.php +151 -0
- includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php +263 -0
- includes/classes/paypal-notify-in-subscr-or-rp-cancellation-w-level.inc.php +194 -0
- includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php +438 -0
- includes/classes/paypal-notify-in-subscr-or-rp-payment-failed-w-level.inc.php +85 -0
- includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php +224 -0
- includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php +634 -0
- includes/classes/paypal-notify-in-virtual-terminal.inc.php +81 -0
- includes/classes/paypal-notify-in-web-accept-sp.inc.php +241 -0
- includes/classes/paypal-notify-in.inc.php +80 -2008
- includes/classes/paypal-return-in-no-tx-data.inc.php +72 -0
- includes/classes/paypal-return-in-proxy-ty-email.inc.php +70 -0
- includes/classes/paypal-return-in-proxy-x-preview.inc.php +70 -0
- includes/classes/paypal-return-in-subscr-modify-w-level.inc.php +192 -0
- includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php +340 -0
- includes/classes/paypal-return-in-web-accept-sp.inc.php +146 -0
- includes/classes/paypal-return-in.inc.php +66 -492
- includes/classes/paypal-utilities.inc.php +9 -9
- includes/classes/profile-in.inc.php +23 -43
- includes/classes/register-access.inc.php +1 -1
- includes/classes/register-in.inc.php +4 -4
- includes/classes/registrations.inc.php +29 -20
- includes/classes/return-templates.inc.php +82 -0
- includes/classes/ruris.inc.php +4 -2
- includes/classes/sc-paypal-button-in.inc.php +23 -12
- includes/classes/sp-access.inc.php +1 -1
- includes/classes/systematics-sp.inc.php +2 -2
- includes/classes/systematics.inc.php +3 -3
- includes/classes/tracking-codes.inc.php +22 -0
- includes/classes/user-deletions.inc.php +1 -0
- includes/classes/user-new-in.inc.php +1 -1
- includes/classes/users-list-in.inc.php +1 -1
- includes/classes/users-list.inc.php +12 -8
- includes/classes/utilities.inc.php +4 -4
- includes/classes/utils-arrays.inc.php +30 -0
- includes/classes/utils-conds.inc.php +25 -1
- includes/classes/utils-html.inc.php +74 -0
- includes/classes/utils-users.inc.php +6 -6
- includes/functions/api-functions.inc.php +38 -2
- includes/hooks.inc.php +6 -2
- includes/menu-pages/code-samples/current-user-login-counter.php +7 -0
- includes/menu-pages/down-ops.inc.php +1 -1
- includes/menu-pages/els-ops.inc.php +2 -2
- includes/menu-pages/gen-ops.inc.php +25 -7
- includes/menu-pages/menu-pages-s-min.js +1 -1
- includes/menu-pages/menu-pages-s.js +9 -4
- includes/menu-pages/paypal-ops.inc.php +5 -2
- includes/menu-pages/res-ops.inc.php +1 -1
- includes/menu-pages/scripting.inc.php +9 -0
- includes/menu-pages/trk-ops.inc.php +3 -3
- includes/s2member-min.js +1 -1
- includes/s2member.css +108 -0
- includes/s2member.js +2 -2
- includes/syscon.inc.php +5 -3
- includes/templates/buttons/paypal-checkout-button.html +3 -1
- includes/templates/buttons/paypal-sp-checkout-button.html +3 -1
- includes/templates/returns/default-return.html +38 -0
- includes/templates/returns/index.php +0 -0
- readme.txt +23 -3
- s2member.php +5 -5
includes/classes/constants.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_constants"))
|
21 |
{
|
@@ -61,8 +61,9 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
61 |
$registration_ip = ($user) ? get_user_option ("s2member_registration_ip", $user->ID) : "";
|
62 |
$custom_fields = ($user) ? get_user_option ("s2member_custom_fields", $user->ID) : array ();
|
63 |
$paid_registration_times = ($user) ? get_user_option ("s2member_paid_registration_times", $user->ID) : array ();
|
|
|
64 |
/**/
|
65 |
-
eval
|
66 |
do_action ("ws_plugin__s2member_during_constants", get_defined_vars ());
|
67 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
68 |
/**
|
@@ -91,6 +92,37 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
91 |
if (!defined ("S2MEMBER_VERSION"))
|
92 |
define ("S2MEMBER_VERSION", ($c[] = (string)WS_PLUGIN__S2MEMBER_VERSION));
|
93 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
* Is the current User logged-in at all.
|
95 |
*
|
96 |
* True if the current User IS logged-in, else false.
|
@@ -2021,6 +2053,66 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2021 |
if (!defined ("S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN"))
|
2022 |
define ("S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN", ($c[] = (string)$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_identity_token"]));
|
2023 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024 |
* PayPal® value for Payment Buttons with input name: `on0`.
|
2025 |
*
|
2026 |
* Used in PayPal® Modification Buttons *( i.e. upgrades/downgrades )*.
|
@@ -2029,7 +2121,8 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2029 |
* this will auto-fill the value for the `on0` input variable, with the string: "Referencing Customer ID".
|
2030 |
* Otherwise, it will be set to a default value of: "Originating Domain".
|
2031 |
*
|
2032 |
-
* These
|
|
|
2033 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2034 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2035 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
@@ -2037,6 +2130,9 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2037 |
*
|
2038 |
* They are used by the PayPal® Button Generator for s2Member.
|
2039 |
*
|
|
|
|
|
|
|
2040 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2041 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2042 |
*
|
@@ -2047,7 +2143,7 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2047 |
*
|
2048 |
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2049 |
*
|
2050 |
-
* Anyway, these
|
2051 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2052 |
*
|
2053 |
* ———— Quick PHP Code Sample ————
|
@@ -2083,7 +2179,8 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2083 |
* this will auto-fill the value for the `os0` input variable, with the value of {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID}.
|
2084 |
* Otherwise, it will be set to a default value of ``$_SERVER["HTTP_HOST"]`` *( the originating domain name )*.
|
2085 |
*
|
2086 |
-
* These
|
|
|
2087 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2088 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2089 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
@@ -2091,6 +2188,9 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2091 |
*
|
2092 |
* They are used by the PayPal® Button Generator for s2Member.
|
2093 |
*
|
|
|
|
|
|
|
2094 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2095 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2096 |
*
|
@@ -2101,7 +2201,7 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2101 |
*
|
2102 |
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2103 |
*
|
2104 |
-
* Anyway, these
|
2105 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2106 |
*
|
2107 |
* ———— Quick PHP Code Sample ————
|
@@ -2134,7 +2234,8 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2134 |
* This auto-fills the `on1` value in PayPal® Button Codes.
|
2135 |
* This always contains the string: "Customer IP Address".
|
2136 |
*
|
2137 |
-
* These
|
|
|
2138 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2139 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2140 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
@@ -2142,7 +2243,8 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2142 |
*
|
2143 |
* They are used by the PayPal® Button Generator for s2Member.
|
2144 |
*
|
2145 |
-
* The `
|
|
|
2146 |
*
|
2147 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2148 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
@@ -2152,7 +2254,9 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2152 |
* These three Button Code parameters: `on0`, `os0`, `modify`, work together in harmony. If you're using the Shortcode Format for PayPal® Buttons,
|
2153 |
* you won't even see these, because they're added internally by the Shortcode processor.
|
2154 |
*
|
2155 |
-
*
|
|
|
|
|
2156 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2157 |
*
|
2158 |
* ———— Quick PHP Code Sample ————
|
@@ -2185,7 +2289,8 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2185 |
* This auto-fills the `os1` value in PayPal® Button Codes,
|
2186 |
* with the Customer's IP Address, via ``$_SERVER["REMOTE_ADDR"]``.
|
2187 |
*
|
2188 |
-
* These
|
|
|
2189 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2190 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2191 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
@@ -2193,7 +2298,8 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2193 |
*
|
2194 |
* They are used by the PayPal® Button Generator for s2Member.
|
2195 |
*
|
2196 |
-
* The `
|
|
|
2197 |
*
|
2198 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2199 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
@@ -2203,7 +2309,9 @@ if (!class_exists ("c_ws_plugin__s2member_constants"))
|
|
2203 |
* These three Button Code parameters: `on0`, `os0`, `modify`, work together in harmony. If you're using the Shortcode Format for PayPal® Buttons,
|
2204 |
* you won't even see these, because they're added internally by the Shortcode processor.
|
2205 |
*
|
2206 |
-
*
|
|
|
|
|
2207 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2208 |
*
|
2209 |
* ———— Quick PHP Code Sample ————
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_constants"))
|
21 |
{
|
61 |
$registration_ip = ($user) ? get_user_option ("s2member_registration_ip", $user->ID) : "";
|
62 |
$custom_fields = ($user) ? get_user_option ("s2member_custom_fields", $user->ID) : array ();
|
63 |
$paid_registration_times = ($user) ? get_user_option ("s2member_paid_registration_times", $user->ID) : array ();
|
64 |
+
$login_counter = ($user) ? (int)get_user_option ("s2member_login_counter") : -1;
|
65 |
/**/
|
66 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
67 |
do_action ("ws_plugin__s2member_during_constants", get_defined_vars ());
|
68 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
69 |
/**
|
92 |
if (!defined ("S2MEMBER_VERSION"))
|
93 |
define ("S2MEMBER_VERSION", ($c[] = (string)WS_PLUGIN__S2MEMBER_VERSION));
|
94 |
/**
|
95 |
+
* The number of times the current User has logged into your site.
|
96 |
+
*
|
97 |
+
* Negative `-1` through number of times logged-in.
|
98 |
+
* Negative `-1` indicates they are NOT logged-in.
|
99 |
+
*
|
100 |
+
* ———— Quick PHP Code Sample ————
|
101 |
+
* ```
|
102 |
+
* <!php echo S2MEMBER_CURRENT_USER_LOGIN_COUNTER; !>
|
103 |
+
* ```
|
104 |
+
* ———— Shortcode & JavaScript Equivalents ————
|
105 |
+
* ```
|
106 |
+
* [s2Get constant="S2MEMBER_CURRENT_USER_LOGIN_COUNTER" /]
|
107 |
+
*
|
108 |
+
* <script type="text/javascript">
|
109 |
+
* document.write(S2MEMBER_CURRENT_USER_LOGIN_COUNTER);
|
110 |
+
* </script>
|
111 |
+
* ```
|
112 |
+
*
|
113 |
+
* @package s2Member\API_Constants
|
114 |
+
* @since 110720
|
115 |
+
*
|
116 |
+
* @var int
|
117 |
+
*
|
118 |
+
* @see s2Member\API_Functions\get_user_field()
|
119 |
+
* @see `get_user_field("s2member_login_counter")`
|
120 |
+
*
|
121 |
+
* @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
|
122 |
+
*/
|
123 |
+
if (!defined ("S2MEMBER_CURRENT_USER_LOGIN_COUNTER"))
|
124 |
+
define ("S2MEMBER_CURRENT_USER_LOGIN_COUNTER", ($c[] = (int)$login_counter));
|
125 |
+
/**
|
126 |
* Is the current User logged-in at all.
|
127 |
*
|
128 |
* True if the current User IS logged-in, else false.
|
2053 |
if (!defined ("S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN"))
|
2054 |
define ("S2MEMBER_PAYPAL_PDT_IDENTITY_TOKEN", ($c[] = (string)$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_identity_token"]));
|
2055 |
/**
|
2056 |
+
* PayPal® value for Payment Buttons with input name: `invoice`.
|
2057 |
+
*
|
2058 |
+
* This can be used to auto-fill the `invoice` value in PayPal® Button Codes, with a unique Code~IP combination.
|
2059 |
+
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()} function should be used instead.
|
2060 |
+
*
|
2061 |
+
* Note. This API Constant is excluded from the ``$c[]`` hash calculation used in the generation of {@link s2Member\API_Constants\WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5}.
|
2062 |
+
* It MUST be excluded, because the value of this particular API Constant will change too often *( i.e. it changes, depending on microtime )*.
|
2063 |
+
* So, when including this API Constant in the JavaScript API as a Global, care must be taken to build an Invoice, using JavaScript
|
2064 |
+
* to calculate the unique time-based code, with something like: `Math.round (new Date ().getTime ())`.
|
2065 |
+
*
|
2066 |
+
* These five API Constants are special.
|
2067 |
+
* o {@link s2Member\API_Constants\S2MEMBER_VALUE_FOR_PP_INV}
|
2068 |
+
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2069 |
+
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2070 |
+
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
2071 |
+
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1}
|
2072 |
+
*
|
2073 |
+
* They are used by the PayPal® Button Generator for s2Member.
|
2074 |
+
*
|
2075 |
+
* The `INV` value can be used to auto-fill the `invoice` for PayPal® Button Codes, with a unique Code~IP combination.
|
2076 |
+
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()} function should be used instead.
|
2077 |
+
*
|
2078 |
+
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2079 |
+
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2080 |
+
*
|
2081 |
+
* Instead of forcing a Member *( and/or a Free Subscriber )* to re-register for a new account,
|
2082 |
+
* s2Member can identify their existing account, and update it; according to the modified terms in your Button Code.
|
2083 |
+
* These three Button Code parameters: `on0`, `os0`, `modify`, work together in harmony. If you're using the Shortcode Format for PayPal® Buttons,
|
2084 |
+
* you won't even see these, because they're added internally by the Shortcode processor.
|
2085 |
+
*
|
2086 |
+
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2087 |
+
*
|
2088 |
+
* Anyway, these five API Constants are just documented here for clarity;
|
2089 |
+
* you probably won't use any of these directly; the Button Generator pops them in.
|
2090 |
+
*
|
2091 |
+
* ———— Quick PHP Code Sample ————
|
2092 |
+
* ```
|
2093 |
+
* <!php echo S2MEMBER_VALUE_FOR_PP_INV; !>
|
2094 |
+
* ```
|
2095 |
+
* ———— Shortcode & JavaScript Equivalents ————
|
2096 |
+
* ```
|
2097 |
+
* [s2Get constant="S2MEMBER_VALUE_FOR_PP_INV" /]
|
2098 |
+
*
|
2099 |
+
* <script type="text/javascript">
|
2100 |
+
* document.write(S2MEMBER_VALUE_FOR_PP_INV);
|
2101 |
+
* </script>
|
2102 |
+
* ```
|
2103 |
+
*
|
2104 |
+
* @package s2Member\API_Constants
|
2105 |
+
* @since 110720
|
2106 |
+
*
|
2107 |
+
* @var str
|
2108 |
+
*
|
2109 |
+
* @see s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()
|
2110 |
+
*
|
2111 |
+
* @see `Dashboard -> s2Member -> PayPal® Buttons`
|
2112 |
+
*/
|
2113 |
+
if (!defined ("S2MEMBER_VALUE_FOR_PP_INV"))
|
2114 |
+
define ("S2MEMBER_VALUE_FOR_PP_INV", uniqid () . "~" . S2MEMBER_CURRENT_USER_IP);
|
2115 |
+
/**
|
2116 |
* PayPal® value for Payment Buttons with input name: `on0`.
|
2117 |
*
|
2118 |
* Used in PayPal® Modification Buttons *( i.e. upgrades/downgrades )*.
|
2121 |
* this will auto-fill the value for the `on0` input variable, with the string: "Referencing Customer ID".
|
2122 |
* Otherwise, it will be set to a default value of: "Originating Domain".
|
2123 |
*
|
2124 |
+
* These five API Constants are special.
|
2125 |
+
* o {@link s2Member\API_Constants\S2MEMBER_VALUE_FOR_PP_INV}
|
2126 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2127 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2128 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
2130 |
*
|
2131 |
* They are used by the PayPal® Button Generator for s2Member.
|
2132 |
*
|
2133 |
+
* The `INV` value can be used to auto-fill the `invoice` for PayPal® Button Codes, with a unique Code~IP combination.
|
2134 |
+
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()} function should be used instead.
|
2135 |
+
*
|
2136 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2137 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2138 |
*
|
2143 |
*
|
2144 |
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2145 |
*
|
2146 |
+
* Anyway, these five API Constants are just documented here for clarity;
|
2147 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2148 |
*
|
2149 |
* ———— Quick PHP Code Sample ————
|
2179 |
* this will auto-fill the value for the `os0` input variable, with the value of {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID}.
|
2180 |
* Otherwise, it will be set to a default value of ``$_SERVER["HTTP_HOST"]`` *( the originating domain name )*.
|
2181 |
*
|
2182 |
+
* These five API Constants are special.
|
2183 |
+
* o {@link s2Member\API_Constants\S2MEMBER_VALUE_FOR_PP_INV}
|
2184 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2185 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2186 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
2188 |
*
|
2189 |
* They are used by the PayPal® Button Generator for s2Member.
|
2190 |
*
|
2191 |
+
* The `INV` value can be used to auto-fill the `invoice` for PayPal® Button Codes, with a unique Code~IP combination.
|
2192 |
+
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()} function should be used instead.
|
2193 |
+
*
|
2194 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2195 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2196 |
*
|
2201 |
*
|
2202 |
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2203 |
*
|
2204 |
+
* Anyway, these five API Constants are just documented here for clarity;
|
2205 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2206 |
*
|
2207 |
* ———— Quick PHP Code Sample ————
|
2234 |
* This auto-fills the `on1` value in PayPal® Button Codes.
|
2235 |
* This always contains the string: "Customer IP Address".
|
2236 |
*
|
2237 |
+
* These five API Constants are special.
|
2238 |
+
* o {@link s2Member\API_Constants\S2MEMBER_VALUE_FOR_PP_INV}
|
2239 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2240 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2241 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
2243 |
*
|
2244 |
* They are used by the PayPal® Button Generator for s2Member.
|
2245 |
*
|
2246 |
+
* The `INV` value can be used to auto-fill the `invoice` for PayPal® Button Codes, with a unique Code~IP combination.
|
2247 |
+
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()} function should be used instead.
|
2248 |
*
|
2249 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2250 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2254 |
* These three Button Code parameters: `on0`, `os0`, `modify`, work together in harmony. If you're using the Shortcode Format for PayPal® Buttons,
|
2255 |
* you won't even see these, because they're added internally by the Shortcode processor.
|
2256 |
*
|
2257 |
+
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2258 |
+
*
|
2259 |
+
* Anyway, these five API Constants are just documented here for clarity;
|
2260 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2261 |
*
|
2262 |
* ———— Quick PHP Code Sample ————
|
2289 |
* This auto-fills the `os1` value in PayPal® Button Codes,
|
2290 |
* with the Customer's IP Address, via ``$_SERVER["REMOTE_ADDR"]``.
|
2291 |
*
|
2292 |
+
* These five API Constants are special.
|
2293 |
+
* o {@link s2Member\API_Constants\S2MEMBER_VALUE_FOR_PP_INV}
|
2294 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0}
|
2295 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0}
|
2296 |
* o {@link s2Member\API_Constants\S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1}
|
2298 |
*
|
2299 |
* They are used by the PayPal® Button Generator for s2Member.
|
2300 |
*
|
2301 |
+
* The `INV` value can be used to auto-fill the `invoice` for PayPal® Button Codes, with a unique Code~IP combination.
|
2302 |
+
* However, in cases where multiple Buttons are displayed on the same page, the alternative {@link s2Member\API_Functions\S2MEMBER_VALUE_FOR_PP_INV()} function should be used instead.
|
2303 |
*
|
2304 |
* The `ON0/OS0` values, are how s2Member identifies an existing Member *( and/or a Free Subscriber )*, who is already logged-in
|
2305 |
* when they click a PayPal® Modification Button that was generated for you by s2Member's Button Generator.
|
2309 |
* These three Button Code parameters: `on0`, `os0`, `modify`, work together in harmony. If you're using the Shortcode Format for PayPal® Buttons,
|
2310 |
* you won't even see these, because they're added internally by the Shortcode processor.
|
2311 |
*
|
2312 |
+
* The `ON1/OS1` values, are used by s2Member to identify a Customer's IP Address through IPN communications with PayPal®.
|
2313 |
+
*
|
2314 |
+
* Anyway, these five API Constants are just documented here for clarity;
|
2315 |
* you probably won't use any of these directly; the Button Generator pops them in.
|
2316 |
*
|
2317 |
* ———— Quick PHP Code Sample ————
|
includes/classes/css-js-in.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_css_js_in"))
|
21 |
{
|
@@ -43,16 +43,16 @@ if (!class_exists ("c_ws_plugin__s2member_css_js_in"))
|
|
43 |
/**/
|
44 |
if (!empty ($_GET["ws_plugin__s2member_css"]))
|
45 |
{
|
46 |
-
header
|
47 |
-
header
|
48 |
-
header
|
49 |
-
header
|
50 |
-
header
|
51 |
/**/
|
52 |
$u = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"];
|
53 |
$i = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images";
|
54 |
/**/
|
55 |
-
ob_start
|
56 |
/**/
|
57 |
include_once dirname (dirname (__FILE__)) . "/s2member.css";
|
58 |
/**/
|
@@ -81,14 +81,16 @@ if (!class_exists ("c_ws_plugin__s2member_css_js_in"))
|
|
81 |
/**/
|
82 |
if (!empty ($_GET["ws_plugin__s2member_js_w_globals"]))
|
83 |
{
|
84 |
-
header
|
85 |
-
header
|
86 |
-
header
|
87 |
-
header
|
88 |
-
header
|
89 |
/**/
|
90 |
$g = "var S2MEMBER_VERSION = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_VERSION) . "',";
|
91 |
/**/
|
|
|
|
|
92 |
$g .= "S2MEMBER_CURRENT_USER_IS_LOGGED_IN = " . ((S2MEMBER_CURRENT_USER_IS_LOGGED_IN) ? "true" : "false") . ",";
|
93 |
$g .= "S2MEMBER_CURRENT_USER_IS_LOGGED_IN_AS_MEMBER = " . ((S2MEMBER_CURRENT_USER_IS_LOGGED_IN_AS_MEMBER) ? "true" : "false") . ",";
|
94 |
/**/
|
@@ -164,6 +166,9 @@ if (!class_exists ("c_ws_plugin__s2member_css_js_in"))
|
|
164 |
$g .= "S2MEMBER_PAYPAL_ENDPOINT = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_PAYPAL_ENDPOINT) . "',";
|
165 |
$g .= "S2MEMBER_PAYPAL_API_ENDPOINT = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_PAYPAL_API_ENDPOINT) . "',";
|
166 |
/**/
|
|
|
|
|
|
|
167 |
$g .= "S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0 = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0) . "',";
|
168 |
$g .= "S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0 = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0) . "',";
|
169 |
/**/
|
@@ -176,7 +181,7 @@ if (!class_exists ("c_ws_plugin__s2member_css_js_in"))
|
|
176 |
$i = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images";
|
177 |
/**/
|
178 |
echo $g . "\n"; /* Add a line break. */
|
179 |
-
unset
|
180 |
/**/
|
181 |
include_once dirname (dirname (__FILE__)) . "/s2member-min.js";
|
182 |
/**/
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_css_js_in"))
|
21 |
{
|
43 |
/**/
|
44 |
if (!empty ($_GET["ws_plugin__s2member_css"]))
|
45 |
{
|
46 |
+
header("Content-Type: text/css; charset=utf-8");
|
47 |
+
header("Expires: " . gmdate ("D, d M Y H:i:s", strtotime ("+1 week")) . " GMT");
|
48 |
+
header("Last-Modified: " . gmdate ("D, d M Y H:i:s") . " GMT");
|
49 |
+
header("Cache-Control: max-age=604800");
|
50 |
+
header("Pragma: public");
|
51 |
/**/
|
52 |
$u = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"];
|
53 |
$i = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images";
|
54 |
/**/
|
55 |
+
ob_start("c_ws_plugin__s2member_utils_css::compress_css");
|
56 |
/**/
|
57 |
include_once dirname (dirname (__FILE__)) . "/s2member.css";
|
58 |
/**/
|
81 |
/**/
|
82 |
if (!empty ($_GET["ws_plugin__s2member_js_w_globals"]))
|
83 |
{
|
84 |
+
header("Content-Type: text/javascript; charset=utf-8");
|
85 |
+
header("Expires: " . gmdate ("D, d M Y H:i:s", strtotime ("+1 week")) . " GMT");
|
86 |
+
header("Last-Modified: " . gmdate ("D, d M Y H:i:s") . " GMT");
|
87 |
+
header("Cache-Control: max-age=604800");
|
88 |
+
header("Pragma: public");
|
89 |
/**/
|
90 |
$g = "var S2MEMBER_VERSION = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_VERSION) . "',";
|
91 |
/**/
|
92 |
+
$g .= "S2MEMBER_CURRENT_USER_LOGIN_COUNTER = " . S2MEMBER_CURRENT_USER_LOGIN_COUNTER . ",";
|
93 |
+
/**/
|
94 |
$g .= "S2MEMBER_CURRENT_USER_IS_LOGGED_IN = " . ((S2MEMBER_CURRENT_USER_IS_LOGGED_IN) ? "true" : "false") . ",";
|
95 |
$g .= "S2MEMBER_CURRENT_USER_IS_LOGGED_IN_AS_MEMBER = " . ((S2MEMBER_CURRENT_USER_IS_LOGGED_IN_AS_MEMBER) ? "true" : "false") . ",";
|
96 |
/**/
|
166 |
$g .= "S2MEMBER_PAYPAL_ENDPOINT = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_PAYPAL_ENDPOINT) . "',";
|
167 |
$g .= "S2MEMBER_PAYPAL_API_ENDPOINT = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_PAYPAL_API_ENDPOINT) . "',";
|
168 |
/**/
|
169 |
+
$g .= "S2MEMBER_VALUE_FOR_PP_INV = Math.round (new Date ().getTime ()) + '~" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_CURRENT_USER_IP) . "',";
|
170 |
+
$g .= "S2MEMBER_VALUE_FOR_PP_INV_GEN = function(){ var invoice = '', formatSeed = function(seed, reqWidth) { seed = parseInt(seed, 10).toString (16); if (reqWidth < seed.length) return seed.slice (seed.length - reqWidth); else if (reqWidth > seed.length) return Array(1 + (reqWidth - seed.length)).join ('0') + seed; return seed; }; if (typeof S2MEMBER_VALUE_FOR_PP_INV_GEN_UNIQUE_SEED === 'undefined') S2MEMBER_VALUE_FOR_PP_INV_GEN_UNIQUE_SEED = Math.floor (Math.random () * 0x75bcd15); S2MEMBER_VALUE_FOR_PP_INV_GEN_UNIQUE_SEED++; invoice = formatSeed(parseInt(new Date ().getTime () / 1000, 10), 8); invoice += formatSeed(S2MEMBER_VALUE_FOR_PP_INV_GEN_UNIQUE_SEED, 5); invoice += '~' + S2MEMBER_CURRENT_USER_IP; return invoice; },";
|
171 |
+
/**/
|
172 |
$g .= "S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0 = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0) . "',";
|
173 |
$g .= "S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0 = '" . c_ws_plugin__s2member_utils_strings::esc_sq (S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0) . "',";
|
174 |
/**/
|
181 |
$i = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images";
|
182 |
/**/
|
183 |
echo $g . "\n"; /* Add a line break. */
|
184 |
+
unset($g); /* Now unset this variable. */
|
185 |
/**/
|
186 |
include_once dirname (dirname (__FILE__)) . "/s2member-min.js";
|
187 |
/**/
|
includes/classes/custom-reg-fields-4bp.inc.php
CHANGED
@@ -142,61 +142,65 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields_4bp"))
|
|
142 |
*/
|
143 |
public static function custom_profile_fields_4bp ()
|
144 |
{
|
|
|
145 |
static $processed = false; /* Process this routine only one time. */
|
146 |
/**/
|
147 |
do_action ("ws_plugin__s2member_before_custom_profile_fields_4bp", get_defined_vars ());
|
148 |
/**/
|
149 |
if (!$processed && in_array ("profile", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"]))
|
150 |
if (apply_filters ("ws_plugin__s2member_custom_profile_fields_4bp_display", true, get_defined_vars ()))
|
151 |
-
if (bp_is_user_profile () && bp_is_profile_edit () && (int)bp_get_the_profile_group_id () === 1
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
$
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
|
|
|
|
|
|
200 |
/**/
|
201 |
do_action ("ws_plugin__s2member_after_custom_profile_fields_4bp", get_defined_vars ());
|
202 |
/**/
|
@@ -214,62 +218,66 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields_4bp"))
|
|
214 |
*/
|
215 |
public static function custom_profile_field_items_4bp ()
|
216 |
{
|
|
|
217 |
static $processed = false; /* Process this routine only one time. */
|
218 |
/**/
|
219 |
do_action ("ws_plugin__s2member_before_custom_profile_field_items_4bp", get_defined_vars ());
|
220 |
/**/
|
221 |
if (!$processed && in_array ("profile-view", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"]))
|
222 |
if (apply_filters ("ws_plugin__s2member_custom_profile_field_items_4bp_display", true, get_defined_vars ()))
|
223 |
-
if (bp_is_user_profile () && !bp_is_profile_edit () && (int)bp_get_the_profile_group_id () === 1
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
$
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
|
|
|
|
|
|
273 |
/**/
|
274 |
do_action ("ws_plugin__s2member_after_custom_profile_field_items_4bp", get_defined_vars ());
|
275 |
/**/
|
142 |
*/
|
143 |
public static function custom_profile_fields_4bp ()
|
144 |
{
|
145 |
+
global $bp; /* Global BuddyPress object reference. */
|
146 |
static $processed = false; /* Process this routine only one time. */
|
147 |
/**/
|
148 |
do_action ("ws_plugin__s2member_before_custom_profile_fields_4bp", get_defined_vars ());
|
149 |
/**/
|
150 |
if (!$processed && in_array ("profile", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"]))
|
151 |
if (apply_filters ("ws_plugin__s2member_custom_profile_fields_4bp_display", true, get_defined_vars ()))
|
152 |
+
if (bp_is_user_profile () && bp_is_profile_edit () && (int)bp_get_the_profile_group_id () === 1)
|
153 |
+
if (isset ($bp->displayed_user->id) && ($user_id = $bp->displayed_user->id))
|
154 |
+
if (($processed = true)) /* Mark as having been processed now. */
|
155 |
+
{
|
156 |
+
echo '<input type="hidden" name="ws_plugin__s2member_profile_4bp_save" id="ws-plugin--s2member-profile-4bp-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-profile-4bp-save")) . '" />' . "\n";
|
157 |
+
/**/
|
158 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
159 |
+
do_action ("ws_plugin__s2member_during_custom_profile_fields_4bp_before", get_defined_vars ());
|
160 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
161 |
+
/**/
|
162 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
163 |
+
if (($level = c_ws_plugin__s2member_user_access::user_access_level (new WP_User ($user_id))) >= 0)
|
164 |
+
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ($level, "profile"))
|
165 |
+
{
|
166 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* Existing Custom Fields. */
|
167 |
+
/**/
|
168 |
+
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
169 |
+
{
|
170 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
171 |
+
do_action ("ws_plugin__s2member_during_custom_profile_fields_4bp_before_custom_fields", get_defined_vars ());
|
172 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
173 |
+
/**/
|
174 |
+
if (in_array ($field["id"], $fields_applicable)) /* Field applicable? */
|
175 |
+
{
|
176 |
+
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
177 |
+
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
178 |
+
/**/
|
179 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
180 |
+
if (apply_filters ("ws_plugin__s2member_during_custom_profile_fields_4bp_during_custom_fields_display", true, get_defined_vars ()))
|
181 |
+
{
|
182 |
+
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
183 |
+
echo '<div class="ws-plugin--s2member-profile-field-4bp-divider-section' . ((!empty ($field["sectitle"])) ? '-title' : '') . '">' . ((!empty ($field["sectitle"])) ? $field["sectitle"] : '') . '</div>';
|
184 |
+
/**/
|
185 |
+
echo '<div class="ws-plugin--s2member-profile-field-4bp ws-plugin--s2member-profile-4bp-' . esc_attr ($field_id_class) . ' field_' . esc_attr ($field_var) . ' editfield">' . "\n";
|
186 |
+
echo '<label for="ws-plugin--s2member-profile-4bp-' . esc_attr ($field_id_class) . '">' . "\n";
|
187 |
+
echo '<span' . ((preg_match ("/^(checkbox|pre_checkbox)$/", $field["type"])) ? ' style="display:none;"' : '') . '>' . $field["label"] . (($field["required"] === "yes") ? ' *' : '') . '</span></label>' . "\n";
|
188 |
+
echo c_ws_plugin__s2member_custom_reg_fields::custom_field_gen (__FUNCTION__, $field, "ws_plugin__s2member_profile_4bp_", "ws-plugin--s2member-profile-4bp-", "ws-plugin--s2member-profile-field-4bp", "", "", "", $fields, $fields[$field_var], "profile");
|
189 |
+
echo '</div>' . "\n";
|
190 |
+
}
|
191 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
192 |
+
}
|
193 |
+
/**/
|
194 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
195 |
+
do_action ("ws_plugin__s2member_during_custom_profile_fields_4bp_after_custom_fields", get_defined_vars ());
|
196 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
197 |
+
}
|
198 |
+
}
|
199 |
+
/**/
|
200 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
201 |
+
do_action ("ws_plugin__s2member_during_custom_profile_fields_4bp_after", get_defined_vars ());
|
202 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
203 |
+
}
|
204 |
/**/
|
205 |
do_action ("ws_plugin__s2member_after_custom_profile_fields_4bp", get_defined_vars ());
|
206 |
/**/
|
218 |
*/
|
219 |
public static function custom_profile_field_items_4bp ()
|
220 |
{
|
221 |
+
global $bp; /* Global BuddyPress object reference. */
|
222 |
static $processed = false; /* Process this routine only one time. */
|
223 |
/**/
|
224 |
do_action ("ws_plugin__s2member_before_custom_profile_field_items_4bp", get_defined_vars ());
|
225 |
/**/
|
226 |
if (!$processed && in_array ("profile-view", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"]))
|
227 |
if (apply_filters ("ws_plugin__s2member_custom_profile_field_items_4bp_display", true, get_defined_vars ()))
|
228 |
+
if (bp_is_user_profile () && !bp_is_profile_edit () && (int)bp_get_the_profile_group_id () === 1)
|
229 |
+
if (isset ($bp->displayed_user->id) && ($user_id = $bp->displayed_user->id))
|
230 |
+
if (($processed = true)) /* Mark as having been processed now. */
|
231 |
+
{
|
232 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
233 |
+
do_action ("ws_plugin__s2member_during_custom_profile_field_items_4bp_before", get_defined_vars ());
|
234 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
235 |
+
/**/
|
236 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
237 |
+
if (($level = c_ws_plugin__s2member_user_access::user_access_level (new WP_User ($user_id))) >= 0)
|
238 |
+
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ($level, "profile-view"))
|
239 |
+
{
|
240 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* Existing Custom Fields. */
|
241 |
+
/**/
|
242 |
+
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
243 |
+
{
|
244 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
245 |
+
do_action ("ws_plugin__s2member_during_custom_profile_field_items_4bp_before_custom_fields", get_defined_vars ());
|
246 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
247 |
+
/**/
|
248 |
+
if (in_array ($field["id"], $fields_applicable)) /* Field applicable? */
|
249 |
+
{
|
250 |
+
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
251 |
+
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
252 |
+
/**/
|
253 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
254 |
+
if (apply_filters ("ws_plugin__s2member_during_custom_profile_field_items_4bp_during_custom_fields_display", true, get_defined_vars ()))
|
255 |
+
{
|
256 |
+
if (!empty ($field["section"]) && $field["section"] === "yes") /* New section? */
|
257 |
+
{
|
258 |
+
echo '<tr class="ws-plugin--s2member-profile-field-4bp-divider-section">' . "\n";
|
259 |
+
echo '<td colspan="2"><div class="ws-plugin--s2member-profile-field-4bp-divider-section' . ((!empty ($field["sectitle"])) ? '-title' : '') . '">' . ((!empty ($field["sectitle"])) ? $field["sectitle"] : '') . '</div></td>' . "\n";
|
260 |
+
echo '</tr>' . "\n";
|
261 |
+
}
|
262 |
+
/**/
|
263 |
+
echo '<tr class="ws-plugin--s2member-profile-field-4bp ws-plugin--s2member-profile-4bp-' . esc_attr ($field_id_class) . ' field_' . esc_attr ($field_var) . '">' . "\n";
|
264 |
+
echo '<td class="ws-plugin--s2member-profile-field-4bp ws-plugin--s2member-profile-4bp-' . esc_attr ($field_id_class) . ' field_' . esc_attr ($field_var) . ' label"><span>' . $field["label"] . '</span></td>' . "\n";
|
265 |
+
echo '<td class="ws-plugin--s2member-profile-field-4bp ws-plugin--s2member-profile-4bp-' . esc_attr ($field_id_class) . ' field_' . esc_attr ($field_var) . ' data">' . c_ws_plugin__s2member_custom_reg_fields::custom_field_gen (__FUNCTION__, $field, "ws_plugin__s2member_profile_4bp_", "ws-plugin--s2member-profile-4bp-", "ws-plugin--s2member-profile-field-4bp", "", "", "", $fields, $fields[$field_var], "profile-view") . '</td>' . "\n";
|
266 |
+
echo '</tr>' . "\n";
|
267 |
+
}
|
268 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
269 |
+
}
|
270 |
+
/**/
|
271 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
272 |
+
do_action ("ws_plugin__s2member_during_custom_profile_field_items_4bp_after_custom_fields", get_defined_vars ());
|
273 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
274 |
+
}
|
275 |
+
}
|
276 |
+
/**/
|
277 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
278 |
+
do_action ("ws_plugin__s2member_during_custom_profile_field_items_4bp_after", get_defined_vars ());
|
279 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
280 |
+
}
|
281 |
/**/
|
282 |
do_action ("ws_plugin__s2member_after_custom_profile_field_items_4bp", get_defined_vars ());
|
283 |
/**/
|
includes/classes/custom-reg-fields.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
21 |
{
|
@@ -48,13 +48,13 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
48 |
*/
|
49 |
public static function custom_field_gen ($_function = FALSE, $_field = FALSE, $_name_prefix = FALSE, $_id_prefix = FALSE, $_classes = FALSE, $_styles = FALSE, $_tabindex = FALSE, $_attrs = FALSE, $_submission = FALSE, $_value = FALSE, $_editable_context = FALSE)
|
50 |
{
|
51 |
-
eval
|
52 |
do_action ("ws_plugin__s2member_before_custom_field_gen", get_defined_vars ());
|
53 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
54 |
/**/
|
55 |
if (!($gen = "") && $_function && is_array ($field = $_field) && !empty ($field["type"]) && !empty ($field["id"]) && $_name_prefix && $_id_prefix)
|
56 |
{
|
57 |
-
eval
|
58 |
do_action ("ws_plugin__s2member_during_custom_field_gen_before", get_defined_vars ());
|
59 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
60 |
/**/
|
@@ -258,7 +258,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
258 |
}
|
259 |
}
|
260 |
/**/
|
261 |
-
eval
|
262 |
do_action ("ws_plugin__s2member_during_custom_field_gen_after", get_defined_vars ());
|
263 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
264 |
}
|
@@ -278,12 +278,12 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
278 |
*/
|
279 |
public static function custom_fields_configured_at_level ($_level = "auto-detection", $_editable_context = FALSE)
|
280 |
{
|
281 |
-
eval
|
282 |
do_action ("ws_plugin__s2member_before_custom_fields_configured_at_level", get_defined_vars ());
|
283 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
284 |
/**/
|
285 |
$level = ($_level === "auto-detection") ? c_ws_plugin__s2member_user_access::user_access_level () : $_level;
|
286 |
-
if ($_level === "auto-detection" && $level < 0 && ($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok ()) && extract ($reg_cookies) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["
|
287 |
$level = $m[1]; /* A numeric Membership Level # . */
|
288 |
/**/
|
289 |
$level = ($level !== "any" && (!is_numeric ($level) || $level < 0)) ? 0 : $level; /* Default. */
|
@@ -291,7 +291,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
291 |
if (($level === "any" || (is_numeric ($level) && $level >= 0)) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
292 |
{
|
293 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
294 |
-
if ($level === "any" || $field["levels"] === "all" || in_array ($level, preg_split ("/[;,]+/", preg_replace ("/[^0-9
|
295 |
if (empty ($_editable_context) || $_editable_context === "administrative" || ($_editable_context === "registration" && $field["editable"] !== "yes-invisible") || (($_editable_context === "profile" || $_editable_context === "profile-view") && $field["editable"] !== "no-invisible"))
|
296 |
$configured[] = $field["id"]; /* Add this to the array. */
|
297 |
}
|
@@ -322,7 +322,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
322 |
/**/
|
323 |
echo '<input type="hidden" name="ws_plugin__s2member_registration" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-registration")) . '" />' . "\n";
|
324 |
/**/
|
325 |
-
eval
|
326 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before", get_defined_vars ());
|
327 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
328 |
/**/
|
@@ -330,7 +330,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
330 |
{
|
331 |
echo '<div class="ws-plugin--s2member-custom-reg-field-divider-section"></div>' . "\n";
|
332 |
/**/
|
333 |
-
eval
|
334 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_first_name", get_defined_vars ());
|
335 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
336 |
/**/
|
@@ -338,11 +338,11 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
338 |
echo '<input aria-required="true" type="text" maxlength="100" name="ws_plugin__s2member_custom_reg_field_first_name" id="ws-plugin--s2member-custom-reg-field-first-name" class="ws-plugin--s2member-custom-reg-field" value="' . format_to_edit ($_p["ws_plugin__s2member_custom_reg_field_first_name"]) . '" />' . "\n";
|
339 |
echo '<br />' . "\n";
|
340 |
/**/
|
341 |
-
eval
|
342 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_first_name", get_defined_vars ());
|
343 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
344 |
/**/
|
345 |
-
eval
|
346 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_last_name", get_defined_vars ());
|
347 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
348 |
/**/
|
@@ -350,7 +350,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
350 |
echo '<input aria-required="true" type="text" maxlength="100" name="ws_plugin__s2member_custom_reg_field_last_name" id="ws-plugin--s2member-custom-reg-field-last-name" class="ws-plugin--s2member-custom-reg-field" value="' . format_to_edit ($_p["ws_plugin__s2member_custom_reg_field_last_name"]) . '" />' . "\n";
|
351 |
echo '<br />' . "\n";
|
352 |
/**/
|
353 |
-
eval
|
354 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_last_name", get_defined_vars ());
|
355 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
356 |
}
|
@@ -359,7 +359,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
359 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "registration"))
|
360 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
361 |
{
|
362 |
-
eval
|
363 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_custom_fields", get_defined_vars ());
|
364 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
365 |
/**/
|
@@ -368,7 +368,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
368 |
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
369 |
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
370 |
/**/
|
371 |
-
eval
|
372 |
if (apply_filters ("ws_plugin__s2member_during_ms_custom_registration_fields_during_custom_fields_display", true, get_defined_vars ()))
|
373 |
{
|
374 |
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
@@ -381,14 +381,14 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
381 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
382 |
}
|
383 |
/**/
|
384 |
-
eval
|
385 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_custom_fields", get_defined_vars ());
|
386 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
387 |
}
|
388 |
/**/
|
389 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] && c_ws_plugin__s2member_list_servers::list_servers_integrated ())
|
390 |
{
|
391 |
-
eval
|
392 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_opt_in", get_defined_vars ());
|
393 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
394 |
/**/
|
@@ -398,17 +398,17 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
398 |
echo '</label>' . "\n";
|
399 |
echo '<br />' . "\n";
|
400 |
/**/
|
401 |
-
eval
|
402 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_opt_in", get_defined_vars ());
|
403 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
404 |
}
|
405 |
/**/
|
406 |
-
eval
|
407 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after", get_defined_vars ());
|
408 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
409 |
}
|
410 |
/**/
|
411 |
-
eval
|
412 |
do_action ("ws_plugin__s2member_after_ms_custom_registration_fields", get_defined_vars ());
|
413 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
414 |
/**/
|
@@ -436,13 +436,13 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
436 |
/**/
|
437 |
$tabindex = 20; /* Incremented tabindex starting with 20. */
|
438 |
/**/
|
439 |
-
eval
|
440 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before", get_defined_vars ());
|
441 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
442 |
/**/
|
443 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"])
|
444 |
{
|
445 |
-
eval
|
446 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_user_pass", get_defined_vars ());
|
447 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
448 |
/**/
|
@@ -461,7 +461,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
461 |
/**/
|
462 |
echo '</p>' . "\n";
|
463 |
/**/
|
464 |
-
eval
|
465 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_user_pass", get_defined_vars ());
|
466 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
467 |
}
|
@@ -470,7 +470,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
470 |
{
|
471 |
echo '<div class="ws-plugin--s2member-custom-reg-field-divider-section"></div>' . "\n";
|
472 |
/**/
|
473 |
-
eval
|
474 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_first_name", get_defined_vars ());
|
475 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
476 |
/**/
|
@@ -481,11 +481,11 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
481 |
echo '</label>' . "\n";
|
482 |
echo '</p>' . "\n";
|
483 |
/**/
|
484 |
-
eval
|
485 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_first_name", get_defined_vars ());
|
486 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
487 |
/**/
|
488 |
-
eval
|
489 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_last_name", get_defined_vars ());
|
490 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
491 |
/**/
|
@@ -496,7 +496,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
496 |
echo '</label>' . "\n";
|
497 |
echo '</p>' . "\n";
|
498 |
/**/
|
499 |
-
eval
|
500 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_last_name", get_defined_vars ());
|
501 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
502 |
}
|
@@ -505,7 +505,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
505 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "registration"))
|
506 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
507 |
{
|
508 |
-
eval
|
509 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_custom_fields", get_defined_vars ());
|
510 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
511 |
/**/
|
@@ -514,7 +514,7 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
514 |
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
515 |
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
516 |
/**/
|
517 |
-
eval
|
518 |
if (apply_filters ("ws_plugin__s2member_during_custom_registration_fields_during_custom_fields_display", true, get_defined_vars ()))
|
519 |
{
|
520 |
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
@@ -529,14 +529,14 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
529 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
530 |
}
|
531 |
/**/
|
532 |
-
eval
|
533 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_custom_fields", get_defined_vars ());
|
534 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
535 |
}
|
536 |
/**/
|
537 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] && c_ws_plugin__s2member_list_servers::list_servers_integrated ())
|
538 |
{
|
539 |
-
eval
|
540 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_opt_in", get_defined_vars ());
|
541 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
542 |
/**/
|
@@ -547,16 +547,16 @@ if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
|
547 |
echo '</label>' . "\n";
|
548 |
echo '</p>' . "\n";
|
549 |
/**/
|
550 |
-
eval
|
551 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_opt_in", get_defined_vars ());
|
552 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
553 |
}
|
554 |
/**/
|
555 |
-
eval
|
556 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after", get_defined_vars ());
|
557 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
558 |
/**/
|
559 |
-
eval
|
560 |
do_action ("ws_plugin__s2member_after_custom_registration_fields", get_defined_vars ());
|
561 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
562 |
/**/
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_custom_reg_fields"))
|
21 |
{
|
48 |
*/
|
49 |
public static function custom_field_gen ($_function = FALSE, $_field = FALSE, $_name_prefix = FALSE, $_id_prefix = FALSE, $_classes = FALSE, $_styles = FALSE, $_tabindex = FALSE, $_attrs = FALSE, $_submission = FALSE, $_value = FALSE, $_editable_context = FALSE)
|
50 |
{
|
51 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
52 |
do_action ("ws_plugin__s2member_before_custom_field_gen", get_defined_vars ());
|
53 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
54 |
/**/
|
55 |
if (!($gen = "") && $_function && is_array ($field = $_field) && !empty ($field["type"]) && !empty ($field["id"]) && $_name_prefix && $_id_prefix)
|
56 |
{
|
57 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
58 |
do_action ("ws_plugin__s2member_during_custom_field_gen_before", get_defined_vars ());
|
59 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
60 |
/**/
|
258 |
}
|
259 |
}
|
260 |
/**/
|
261 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
262 |
do_action ("ws_plugin__s2member_during_custom_field_gen_after", get_defined_vars ());
|
263 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
264 |
}
|
278 |
*/
|
279 |
public static function custom_fields_configured_at_level ($_level = "auto-detection", $_editable_context = FALSE)
|
280 |
{
|
281 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
282 |
do_action ("ws_plugin__s2member_before_custom_fields_configured_at_level", get_defined_vars ());
|
283 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
284 |
/**/
|
285 |
$level = ($_level === "auto-detection") ? c_ws_plugin__s2member_user_access::user_access_level () : $_level;
|
286 |
+
if ($_level === "auto-detection" && $level < 0 && ($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok ()) && extract ($reg_cookies) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $item_number, $m) && !empty ($m[1]) && is_numeric ($m[1]))
|
287 |
$level = $m[1]; /* A numeric Membership Level # . */
|
288 |
/**/
|
289 |
$level = ($level !== "any" && (!is_numeric ($level) || $level < 0)) ? 0 : $level; /* Default. */
|
291 |
if (($level === "any" || (is_numeric ($level) && $level >= 0)) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
292 |
{
|
293 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
294 |
+
if ($level === "any" || $field["levels"] === "all" || in_array ($level, preg_split ("/[;,]+/", preg_replace ("/[^0-9;,]/", "", $field["levels"]))))
|
295 |
if (empty ($_editable_context) || $_editable_context === "administrative" || ($_editable_context === "registration" && $field["editable"] !== "yes-invisible") || (($_editable_context === "profile" || $_editable_context === "profile-view") && $field["editable"] !== "no-invisible"))
|
296 |
$configured[] = $field["id"]; /* Add this to the array. */
|
297 |
}
|
322 |
/**/
|
323 |
echo '<input type="hidden" name="ws_plugin__s2member_registration" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-registration")) . '" />' . "\n";
|
324 |
/**/
|
325 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
326 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before", get_defined_vars ());
|
327 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
328 |
/**/
|
330 |
{
|
331 |
echo '<div class="ws-plugin--s2member-custom-reg-field-divider-section"></div>' . "\n";
|
332 |
/**/
|
333 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
334 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_first_name", get_defined_vars ());
|
335 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
336 |
/**/
|
338 |
echo '<input aria-required="true" type="text" maxlength="100" name="ws_plugin__s2member_custom_reg_field_first_name" id="ws-plugin--s2member-custom-reg-field-first-name" class="ws-plugin--s2member-custom-reg-field" value="' . format_to_edit ($_p["ws_plugin__s2member_custom_reg_field_first_name"]) . '" />' . "\n";
|
339 |
echo '<br />' . "\n";
|
340 |
/**/
|
341 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
342 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_first_name", get_defined_vars ());
|
343 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
344 |
/**/
|
345 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
346 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_last_name", get_defined_vars ());
|
347 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
348 |
/**/
|
350 |
echo '<input aria-required="true" type="text" maxlength="100" name="ws_plugin__s2member_custom_reg_field_last_name" id="ws-plugin--s2member-custom-reg-field-last-name" class="ws-plugin--s2member-custom-reg-field" value="' . format_to_edit ($_p["ws_plugin__s2member_custom_reg_field_last_name"]) . '" />' . "\n";
|
351 |
echo '<br />' . "\n";
|
352 |
/**/
|
353 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
354 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_last_name", get_defined_vars ());
|
355 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
356 |
}
|
359 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "registration"))
|
360 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
361 |
{
|
362 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
363 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_custom_fields", get_defined_vars ());
|
364 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
365 |
/**/
|
368 |
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
369 |
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
370 |
/**/
|
371 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
372 |
if (apply_filters ("ws_plugin__s2member_during_ms_custom_registration_fields_during_custom_fields_display", true, get_defined_vars ()))
|
373 |
{
|
374 |
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
381 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
382 |
}
|
383 |
/**/
|
384 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
385 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_custom_fields", get_defined_vars ());
|
386 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
387 |
}
|
388 |
/**/
|
389 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] && c_ws_plugin__s2member_list_servers::list_servers_integrated ())
|
390 |
{
|
391 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
392 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_before_opt_in", get_defined_vars ());
|
393 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
394 |
/**/
|
398 |
echo '</label>' . "\n";
|
399 |
echo '<br />' . "\n";
|
400 |
/**/
|
401 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
402 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after_opt_in", get_defined_vars ());
|
403 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
404 |
}
|
405 |
/**/
|
406 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
407 |
do_action ("ws_plugin__s2member_during_ms_custom_registration_fields_after", get_defined_vars ());
|
408 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
409 |
}
|
410 |
/**/
|
411 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
412 |
do_action ("ws_plugin__s2member_after_ms_custom_registration_fields", get_defined_vars ());
|
413 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
414 |
/**/
|
436 |
/**/
|
437 |
$tabindex = 20; /* Incremented tabindex starting with 20. */
|
438 |
/**/
|
439 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
440 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before", get_defined_vars ());
|
441 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
442 |
/**/
|
443 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"])
|
444 |
{
|
445 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
446 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_user_pass", get_defined_vars ());
|
447 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
448 |
/**/
|
461 |
/**/
|
462 |
echo '</p>' . "\n";
|
463 |
/**/
|
464 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
465 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_user_pass", get_defined_vars ());
|
466 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
467 |
}
|
470 |
{
|
471 |
echo '<div class="ws-plugin--s2member-custom-reg-field-divider-section"></div>' . "\n";
|
472 |
/**/
|
473 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
474 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_first_name", get_defined_vars ());
|
475 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
476 |
/**/
|
481 |
echo '</label>' . "\n";
|
482 |
echo '</p>' . "\n";
|
483 |
/**/
|
484 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
485 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_first_name", get_defined_vars ());
|
486 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
487 |
/**/
|
488 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
489 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_last_name", get_defined_vars ());
|
490 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
491 |
/**/
|
496 |
echo '</label>' . "\n";
|
497 |
echo '</p>' . "\n";
|
498 |
/**/
|
499 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
500 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_last_name", get_defined_vars ());
|
501 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
502 |
}
|
505 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "registration"))
|
506 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
507 |
{
|
508 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
509 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_custom_fields", get_defined_vars ());
|
510 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
511 |
/**/
|
514 |
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
515 |
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
516 |
/**/
|
517 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
518 |
if (apply_filters ("ws_plugin__s2member_during_custom_registration_fields_during_custom_fields_display", true, get_defined_vars ()))
|
519 |
{
|
520 |
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
529 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
530 |
}
|
531 |
/**/
|
532 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
533 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_custom_fields", get_defined_vars ());
|
534 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
535 |
}
|
536 |
/**/
|
537 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] && c_ws_plugin__s2member_list_servers::list_servers_integrated ())
|
538 |
{
|
539 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
540 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_before_opt_in", get_defined_vars ());
|
541 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
542 |
/**/
|
547 |
echo '</label>' . "\n";
|
548 |
echo '</p>' . "\n";
|
549 |
/**/
|
550 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
551 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after_opt_in", get_defined_vars ());
|
552 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
553 |
}
|
554 |
/**/
|
555 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
556 |
do_action ("ws_plugin__s2member_during_custom_registration_fields_after", get_defined_vars ());
|
557 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
558 |
/**/
|
559 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
560 |
do_action ("ws_plugin__s2member_after_custom_registration_fields", get_defined_vars ());
|
561 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
562 |
/**/
|
includes/classes/files-in.inc.php
CHANGED
@@ -45,10 +45,10 @@ if (!class_exists ("c_ws_plugin__s2member_files_in"))
|
|
45 |
{
|
46 |
$excluded = apply_filters ("ws_plugin__s2member_check_file_download_access_excluded", false, get_defined_vars ());
|
47 |
/**/
|
48 |
-
if (!
|
49 |
$using_amazon_s3_storage = true; /* Amazon® S3 storage has been configured! */
|
50 |
/**/
|
51 |
-
if (!$excluded && (empty ($_GET["s2member_file_download_key"]) || (!empty ($_GET["s2member_file_download_key"]) && !
|
52 |
{
|
53 |
$_GET["s2member_file_download"] = trim ($_GET["s2member_file_download"], "/"); /* Trim slashes after Key comparison. */
|
54 |
/**/
|
@@ -76,7 +76,7 @@ if (!class_exists ("c_ws_plugin__s2member_files_in"))
|
|
76 |
exit ("503: Sorry, File Downloads are NOT enabled yet. Please contact Support for assistance. If you are the site owner, please configure: `s2Member -> Download Options -> Basic Download Restrictions`.");
|
77 |
}
|
78 |
/**/
|
79 |
-
else if (!is_object ($user = apply_filters ("ws_plugin__s2member_check_file_download_access_user", (
|
80 |
{
|
81 |
if (preg_match ("/^access[_\-]s2member[_\-]level([0-9]+)\//", $_GET["s2member_file_download"], $m))
|
82 |
{
|
@@ -184,6 +184,9 @@ if (!class_exists ("c_ws_plugin__s2member_files_in"))
|
|
184 |
$amazon_s3_signature = base64_encode (c_ws_plugin__s2member_files_in::amazon_s3_sign ("GET\n\n\n" . $amazon_s3_file_expires . "\n" . "/" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"] . $amazon_s3_raw_file));
|
185 |
/**/
|
186 |
$amazon_s3_redirection_url = "http://" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"] . ".s3.amazonaws.com" . $amazon_s3_file;
|
|
|
|
|
|
|
187 |
$amazon_s3_redirection_url .= "&AWSAccessKeyId=" . urlencode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_access_key"]);
|
188 |
$amazon_s3_redirection_url .= "&Expires=" . urlencode ($amazon_s3_file_expires);
|
189 |
$amazon_s3_redirection_url .= "&Signature=" . urlencode ($amazon_s3_signature);
|
@@ -252,7 +255,7 @@ if (!class_exists ("c_ws_plugin__s2member_files_in"))
|
|
252 |
public static function amazon_s3_sign ($data = FALSE)
|
253 |
{
|
254 |
$key = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_secret_key"];
|
255 |
-
$key = str_pad ((
|
256 |
return pack ('H*', sha1 (($key ^ str_repeat (chr (0x5c), 64)) . pack ('H*', sha1 (($key ^ str_repeat (chr (0x36), 64)) . $data))));
|
257 |
}
|
258 |
/**
|
45 |
{
|
46 |
$excluded = apply_filters ("ws_plugin__s2member_check_file_download_access_excluded", false, get_defined_vars ());
|
47 |
/**/
|
48 |
+
if (!($using_amazon_s3_storage = 0) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"] && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_access_key"] && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_secret_key"])
|
49 |
$using_amazon_s3_storage = true; /* Amazon® S3 storage has been configured! */
|
50 |
/**/
|
51 |
+
if (!$excluded && (empty ($_GET["s2member_file_download_key"]) || (!empty ($_GET["s2member_file_download_key"]) && !($file_download_key_is_valid = ($_GET["s2member_file_download_key"] === c_ws_plugin__s2member_files::file_download_key ($_GET["s2member_file_download"]) || $_GET["s2member_file_download_key"] === c_ws_plugin__s2member_files::file_download_key ($_GET["s2member_file_download"], "ip-forever") || $_GET["s2member_file_download_key"] === c_ws_plugin__s2member_files::file_download_key ($_GET["s2member_file_download"], "universal"))))))
|
52 |
{
|
53 |
$_GET["s2member_file_download"] = trim ($_GET["s2member_file_download"], "/"); /* Trim slashes after Key comparison. */
|
54 |
/**/
|
76 |
exit ("503: Sorry, File Downloads are NOT enabled yet. Please contact Support for assistance. If you are the site owner, please configure: `s2Member -> Download Options -> Basic Download Restrictions`.");
|
77 |
}
|
78 |
/**/
|
79 |
+
else if (!is_object ($user = apply_filters ("ws_plugin__s2member_check_file_download_access_user", ((is_user_logged_in ()) ? wp_get_current_user () : false), get_defined_vars ())) || !($user_id = $user->ID))
|
80 |
{
|
81 |
if (preg_match ("/^access[_\-]s2member[_\-]level([0-9]+)\//", $_GET["s2member_file_download"], $m))
|
82 |
{
|
184 |
$amazon_s3_signature = base64_encode (c_ws_plugin__s2member_files_in::amazon_s3_sign ("GET\n\n\n" . $amazon_s3_file_expires . "\n" . "/" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"] . $amazon_s3_raw_file));
|
185 |
/**/
|
186 |
$amazon_s3_redirection_url = "http://" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"] . ".s3.amazonaws.com" . $amazon_s3_file;
|
187 |
+
if (strtolower ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"]) !== $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"])
|
188 |
+
$amazon_s3_redirection_url = "http://s3.amazonaws.com/" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"] . $amazon_s3_file;
|
189 |
+
/**/
|
190 |
$amazon_s3_redirection_url .= "&AWSAccessKeyId=" . urlencode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_access_key"]);
|
191 |
$amazon_s3_redirection_url .= "&Expires=" . urlencode ($amazon_s3_file_expires);
|
192 |
$amazon_s3_redirection_url .= "&Signature=" . urlencode ($amazon_s3_signature);
|
255 |
public static function amazon_s3_sign ($data = FALSE)
|
256 |
{
|
257 |
$key = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_secret_key"];
|
258 |
+
$key = str_pad (((strlen ($key) > 64) ? pack ('H*', sha1 ($key)) : $key), 64, chr (0x00));
|
259 |
return pack ('H*', sha1 (($key ^ str_repeat (chr (0x5c), 64)) . pack ('H*', sha1 (($key ^ str_repeat (chr (0x36), 64)) . $data))));
|
260 |
}
|
261 |
/**
|
includes/classes/login-redirects.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
21 |
{
|
@@ -40,7 +40,7 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
40 |
*/
|
41 |
public static function login_redirect ($username = FALSE)
|
42 |
{
|
43 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
44 |
do_action ("ws_plugin__s2member_before_login_redirect", get_defined_vars ());
|
45 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
46 |
/**/
|
@@ -51,8 +51,11 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
51 |
if (!get_user_option ("s2member_registration_ip", $user_id)) /* Have we got this yet? */
|
52 |
update_user_option ($user_id, "s2member_registration_ip", $_SERVER["REMOTE_ADDR"]);
|
53 |
/**/
|
|
|
|
|
|
|
54 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) /* Nag em? */
|
55 |
-
delete_user_setting("default_password_nag") . update_user_option ($user_id, "default_password_nag", false, true);
|
56 |
/**/
|
57 |
$disable_login_ip_restrictions = apply_filters ("ws_plugin__s2member_disable_login_ip_restrictions", false, get_defined_vars ());
|
58 |
/**/
|
@@ -65,25 +68,25 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
65 |
/**/
|
66 |
if (!$obey_redirect_to || empty ($_REQUEST["redirect_to"]) || $_REQUEST["redirect_to"] === "wp-admin/" || $_REQUEST["redirect_to"] === admin_url ())
|
67 |
{
|
68 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
69 |
do_action ("ws_plugin__s2member_during_login_redirect", get_defined_vars ());
|
70 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
71 |
/**/
|
72 |
if ($redirect && is_string ($redirect)) /* Is this a string? */
|
73 |
-
wp_redirect($redirect); /* Dynamic URL introduced by a Filter. */
|
74 |
/**/
|
75 |
else if ($special_redirection_url = c_ws_plugin__s2member_login_redirects::login_redirection_url ($user))
|
76 |
-
wp_redirect($special_redirection_url); /* Special Redirection URL configured with s2Member. */
|
77 |
/**/
|
78 |
else /* Else we use the Login Welcome Page configured for s2Member. */
|
79 |
-
wp_redirect(get_page_link ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"]));
|
80 |
/**/
|
81 |
exit (); /* Clean exit. */
|
82 |
}
|
83 |
}
|
84 |
}
|
85 |
/**/
|
86 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
87 |
do_action ("ws_plugin__s2member_after_login_redirect", get_defined_vars ());
|
88 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
89 |
/**/
|
@@ -101,7 +104,7 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
101 |
*/
|
102 |
public static function login_redirection_url ($user = FALSE, $root_returns_false = FALSE)
|
103 |
{
|
104 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
105 |
do_action ("ws_plugin__s2member_before_login_redirection_url", get_defined_vars ());
|
106 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
107 |
/**/
|
@@ -122,7 +125,7 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
122 |
*/
|
123 |
public static function login_redirection_uri ($user = FALSE, $root_returns_false = FALSE)
|
124 |
{
|
125 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
126 |
do_action ("ws_plugin__s2member_before_login_redirection_uri", get_defined_vars ());
|
127 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
128 |
/**/
|
@@ -144,7 +147,7 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
144 |
*/
|
145 |
public static function fill_login_redirect_rc_vars ($url = FALSE, $user = FALSE, $root_returns_false = FALSE)
|
146 |
{
|
147 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
148 |
do_action ("ws_plugin__s2member_before_fill_login_redirect_rc_vars", get_defined_vars ());
|
149 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
150 |
/**/
|
@@ -158,12 +161,14 @@ if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
|
158 |
$user_level = (string)c_ws_plugin__s2member_user_access::user_access_level ($user);
|
159 |
$user_role = (string)c_ws_plugin__s2member_user_access::user_access_role ($user);
|
160 |
$user_ccaps = (string)implode ("-", c_ws_plugin__s2member_user_access::user_access_ccaps ($user));
|
|
|
161 |
/**/
|
162 |
$url = preg_replace ("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_login), $url);
|
163 |
$url = preg_replace ("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $url);
|
164 |
$url = preg_replace ("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_level), $url);
|
165 |
$url = preg_replace ("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_role), $url);
|
166 |
$url = preg_replace ("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_ccaps), $url);
|
|
|
167 |
/**/
|
168 |
if ( /* Only if s2Member's fault » */$url !== $orig_url && (!($parse = @parse_url ($url)) || strpos ($parse["path"], "//") !== false))
|
169 |
$url = site_url ("/"); /* Defaults to home page. We don't return invalid URLs produced by empty Replacement Codes ( i.e. // ). */
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_login_redirects"))
|
21 |
{
|
40 |
*/
|
41 |
public static function login_redirect ($username = FALSE)
|
42 |
{
|
43 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
44 |
do_action ("ws_plugin__s2member_before_login_redirect", get_defined_vars ());
|
45 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
46 |
/**/
|
51 |
if (!get_user_option ("s2member_registration_ip", $user_id)) /* Have we got this yet? */
|
52 |
update_user_option ($user_id, "s2member_registration_ip", $_SERVER["REMOTE_ADDR"]);
|
53 |
/**/
|
54 |
+
if (($logins = (int)get_user_option ("s2member_login_counter", $user_id) + 1) >= 1 || ($logins = 1))
|
55 |
+
update_user_option ($user_id, "s2member_login_counter", $logins);
|
56 |
+
/**/
|
57 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) /* Nag em? */
|
58 |
+
delete_user_setting ("default_password_nag") . update_user_option ($user_id, "default_password_nag", false, true);
|
59 |
/**/
|
60 |
$disable_login_ip_restrictions = apply_filters ("ws_plugin__s2member_disable_login_ip_restrictions", false, get_defined_vars ());
|
61 |
/**/
|
68 |
/**/
|
69 |
if (!$obey_redirect_to || empty ($_REQUEST["redirect_to"]) || $_REQUEST["redirect_to"] === "wp-admin/" || $_REQUEST["redirect_to"] === admin_url ())
|
70 |
{
|
71 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
72 |
do_action ("ws_plugin__s2member_during_login_redirect", get_defined_vars ());
|
73 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
74 |
/**/
|
75 |
if ($redirect && is_string ($redirect)) /* Is this a string? */
|
76 |
+
wp_redirect ($redirect); /* Dynamic URL introduced by a Filter. */
|
77 |
/**/
|
78 |
else if ($special_redirection_url = c_ws_plugin__s2member_login_redirects::login_redirection_url ($user))
|
79 |
+
wp_redirect ($special_redirection_url); /* Special Redirection URL configured with s2Member. */
|
80 |
/**/
|
81 |
else /* Else we use the Login Welcome Page configured for s2Member. */
|
82 |
+
wp_redirect (get_page_link ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"]));
|
83 |
/**/
|
84 |
exit (); /* Clean exit. */
|
85 |
}
|
86 |
}
|
87 |
}
|
88 |
/**/
|
89 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
90 |
do_action ("ws_plugin__s2member_after_login_redirect", get_defined_vars ());
|
91 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
92 |
/**/
|
104 |
*/
|
105 |
public static function login_redirection_url ($user = FALSE, $root_returns_false = FALSE)
|
106 |
{
|
107 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
108 |
do_action ("ws_plugin__s2member_before_login_redirection_url", get_defined_vars ());
|
109 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
110 |
/**/
|
125 |
*/
|
126 |
public static function login_redirection_uri ($user = FALSE, $root_returns_false = FALSE)
|
127 |
{
|
128 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
129 |
do_action ("ws_plugin__s2member_before_login_redirection_uri", get_defined_vars ());
|
130 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
131 |
/**/
|
147 |
*/
|
148 |
public static function fill_login_redirect_rc_vars ($url = FALSE, $user = FALSE, $root_returns_false = FALSE)
|
149 |
{
|
150 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
151 |
do_action ("ws_plugin__s2member_before_fill_login_redirect_rc_vars", get_defined_vars ());
|
152 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
153 |
/**/
|
161 |
$user_level = (string)c_ws_plugin__s2member_user_access::user_access_level ($user);
|
162 |
$user_role = (string)c_ws_plugin__s2member_user_access::user_access_role ($user);
|
163 |
$user_ccaps = (string)implode ("-", c_ws_plugin__s2member_user_access::user_access_ccaps ($user));
|
164 |
+
$user_logins = ($user) ? (string)(int)get_user_option ("s2member_login_counter", $user_id) : "-1";
|
165 |
/**/
|
166 |
$url = preg_replace ("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_login), $url);
|
167 |
$url = preg_replace ("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $url);
|
168 |
$url = preg_replace ("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_level), $url);
|
169 |
$url = preg_replace ("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_role), $url);
|
170 |
$url = preg_replace ("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_ccaps), $url);
|
171 |
+
$url = preg_replace ("/%%current_user_logins%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_logins), $url);
|
172 |
/**/
|
173 |
if ( /* Only if s2Member's fault » */$url !== $orig_url && (!($parse = @parse_url ($url)) || strpos ($parse["path"], "//") !== false))
|
174 |
$url = site_url ("/"); /* Defaults to home page. We don't return invalid URLs produced by empty Replacement Codes ( i.e. // ). */
|
includes/classes/option-forces.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_option_forces"))
|
21 |
{
|
@@ -131,7 +131,7 @@ if (!class_exists ("c_ws_plugin__s2member_option_forces"))
|
|
131 |
{
|
132 |
global $wpdb; /* Global database object reference */
|
133 |
/**/
|
134 |
-
eval
|
135 |
do_action ("ws_plugin__s2member_before_check_register_access", get_defined_vars ());
|
136 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
137 |
/**/
|
@@ -167,13 +167,13 @@ if (!class_exists ("c_ws_plugin__s2member_option_forces"))
|
|
167 |
global $wpdb; /* Global database object reference */
|
168 |
global $current_site, $current_blog; /* For Multisite support. */
|
169 |
/**/
|
170 |
-
eval
|
171 |
do_action ("ws_plugin__s2member_before_check_register_access", get_defined_vars ());
|
172 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
173 |
/**/
|
174 |
$by_default = $users_can_register = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mms_registration_grants"];
|
175 |
/**/
|
176 |
-
if (
|
177 |
return apply_filters ("ws_plugin__s2member_check_mms_register_access", ($users_can_register = ((c_ws_plugin__s2member_option_forces::check_register_access ()) ? "user" : "none")), get_defined_vars ());
|
178 |
/**/
|
179 |
else if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || !is_main_site ()) /* Blog Farm? */
|
@@ -187,7 +187,7 @@ if (!class_exists ("c_ws_plugin__s2member_option_forces"))
|
|
187 |
{
|
188 |
return apply_filters ("ws_plugin__s2member_check_mms_register_access", ($users_can_register = "all"), get_defined_vars ());
|
189 |
}
|
190 |
-
else if (!empty ($reg_cookies) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["
|
191 |
{
|
192 |
if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mms_registration_blogs_level" . $level])) /* Blog(s)? */
|
193 |
{
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_option_forces"))
|
21 |
{
|
131 |
{
|
132 |
global $wpdb; /* Global database object reference */
|
133 |
/**/
|
134 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
135 |
do_action ("ws_plugin__s2member_before_check_register_access", get_defined_vars ());
|
136 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
137 |
/**/
|
167 |
global $wpdb; /* Global database object reference */
|
168 |
global $current_site, $current_blog; /* For Multisite support. */
|
169 |
/**/
|
170 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
171 |
do_action ("ws_plugin__s2member_before_check_register_access", get_defined_vars ());
|
172 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
173 |
/**/
|
174 |
$by_default = $users_can_register = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mms_registration_grants"];
|
175 |
/**/
|
176 |
+
if (c_ws_plugin__s2member_utils_conds::bp_is_installed () && is_multisite () && /* BP Multisite / but NOT offering Blogs? */ !c_ws_plugin__s2member_utils_conds::is_multisite_farm ())
|
177 |
return apply_filters ("ws_plugin__s2member_check_mms_register_access", ($users_can_register = ((c_ws_plugin__s2member_option_forces::check_register_access ()) ? "user" : "none")), get_defined_vars ());
|
178 |
/**/
|
179 |
else if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || !is_main_site ()) /* Blog Farm? */
|
187 |
{
|
188 |
return apply_filters ("ws_plugin__s2member_check_mms_register_access", ($users_can_register = "all"), get_defined_vars ());
|
189 |
}
|
190 |
+
else if (!empty ($reg_cookies) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $item_number, $m) && !empty ($m[1]) && is_numeric ($level = $m[1]))
|
191 |
{
|
192 |
if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mms_registration_blogs_level" . $level])) /* Blog(s)? */
|
193 |
{
|
includes/classes/paypal-notify-in-cart.inc.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_cart"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_cart
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract ($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^cart$/i", $paypal["txn_type"]))/**/
|
44 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
45 |
+
&& (!empty ($paypal["txn_id"]))/**/)
|
46 |
+
{
|
47 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
48 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_cart", get_defined_vars ());
|
49 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
50 |
+
/**/
|
51 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
52 |
+
{
|
53 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `cart` ).";
|
54 |
+
/**/
|
55 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
56 |
+
/**/
|
57 |
+
$paypal["s2member_log"][] = "The `txn_type` does not require any action on the part of s2Member.";
|
58 |
+
$paypal["s2member_log"][] = "s2Member Pro handles Cart events on-site, with an IPN proxy.";
|
59 |
+
/**/
|
60 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
61 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_cart", get_defined_vars ());
|
62 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
63 |
+
}
|
64 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
65 |
+
{
|
66 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
67 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `cart` ).";
|
68 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
69 |
+
}
|
70 |
+
/**/
|
71 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
72 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_cart", get_defined_vars ());
|
73 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
74 |
+
/**/
|
75 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_cart", $paypal, get_defined_vars ());
|
76 |
+
}
|
77 |
+
else
|
78 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_cart", false, get_defined_vars ());
|
79 |
+
}
|
80 |
+
}
|
81 |
+
}
|
82 |
+
?>
|
includes/classes/paypal-notify-in-express-checkout.inc.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_express_checkout"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_express_checkout
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^express_checkout$/i", $paypal["txn_type"]))/**/
|
44 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
45 |
+
&& (!empty ($paypal["txn_id"]))/**/)
|
46 |
+
{
|
47 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
48 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_express_checkout", get_defined_vars ());
|
49 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
50 |
+
/**/
|
51 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
52 |
+
{
|
53 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `express_checkout` ).";
|
54 |
+
/**/
|
55 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
56 |
+
/**/
|
57 |
+
$paypal["s2member_log"][] = "The `txn_type` does not require any action on the part of s2Member.";
|
58 |
+
$paypal["s2member_log"][] = "s2Member Pro handles Express Checkout events on-site, with an IPN proxy.";
|
59 |
+
/**/
|
60 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
61 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_express_checkout", get_defined_vars ());
|
62 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
63 |
+
}
|
64 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
65 |
+
{
|
66 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
67 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `express_checkout` ).";
|
68 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
69 |
+
}
|
70 |
+
/**/
|
71 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
72 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_express_checkout", get_defined_vars ());
|
73 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
74 |
+
/**/
|
75 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_express_checkout", $paypal, get_defined_vars ());
|
76 |
+
}
|
77 |
+
else
|
78 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_express_checkout", false, get_defined_vars ());
|
79 |
+
}
|
80 |
+
}
|
81 |
+
}
|
82 |
+
?>
|
includes/classes/paypal-notify-in-rec-profile-creation-w-level.inc.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_rec_profile_creation_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_rec_profile_creation_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^recurring_payment_profile_created$/i", $paypal["txn_type"]))/**/
|
44 |
+
&& ((!empty ($paypal["item_number"]) || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
45 |
+
&& (!empty ($paypal["subscr_id"]) || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
46 |
+
&& (!empty ($paypal["item_name"]) || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
47 |
+
&& (!empty ($paypal["payer_email"]) || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
48 |
+
{
|
49 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_recurring_payment_profile_created", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
54 |
+
{
|
55 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `recurring_payment_profile_created` ).";
|
56 |
+
/**/
|
57 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
58 |
+
/**/
|
59 |
+
$paypal["s2member_log"][] = "The `txn_type` does not require any action on the part of s2Member.";
|
60 |
+
$paypal["s2member_log"][] = "s2Member Pro handles this event on-site, with an IPN proxy.";
|
61 |
+
/**/
|
62 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
63 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_recurring_payment_profile_created", get_defined_vars ());
|
64 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
65 |
+
}
|
66 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
67 |
+
{
|
68 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
69 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `recurring_payment_profile_created` ).";
|
70 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
71 |
+
}
|
72 |
+
/**/
|
73 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
74 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_recurring_payment_profile_created", get_defined_vars ());
|
75 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
76 |
+
/**/
|
77 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_rec_profile_creation_w_level", $paypal, get_defined_vars ());
|
78 |
+
}
|
79 |
+
else
|
80 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_rec_profile_creation_w_level", false, get_defined_vars ());
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
?>
|
includes/classes/paypal-notify-in-send-money.inc.php
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_send_money"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_send_money
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^send_money$/i", $paypal["txn_type"]))/**/
|
44 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
45 |
+
&& (!empty ($paypal["txn_id"]))/**/)
|
46 |
+
{
|
47 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
48 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_send_money", get_defined_vars ());
|
49 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
50 |
+
/**/
|
51 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
52 |
+
{
|
53 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `send_money` ).";
|
54 |
+
/**/
|
55 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
56 |
+
/**/
|
57 |
+
$paypal["s2member_log"][] = "The `txn_type` does not require any action on the part of s2Member.";
|
58 |
+
/**/
|
59 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
60 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_send_money", get_defined_vars ());
|
61 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
62 |
+
}
|
63 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
64 |
+
{
|
65 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
66 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `send_money` ).";
|
67 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
68 |
+
}
|
69 |
+
/**/
|
70 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
71 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_send_money", get_defined_vars ());
|
72 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
73 |
+
/**/
|
74 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_send_money", $paypal, get_defined_vars ());
|
75 |
+
}
|
76 |
+
else
|
77 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_send_money", false, get_defined_vars ());
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
81 |
+
?>
|
includes/classes/paypal-notify-in-sp-refund-reversal.inc.php
ADDED
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract ($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(/**/(!empty ($paypal["txn_type"]) && preg_match ("/^new_case$/i", $paypal["txn_type"]) && !empty ($paypal["case_type"]) && preg_match ("/^chargeback$/i", $paypal["case_type"]))/**/
|
46 |
+
|| (!empty ($paypal["payment_status"]) && preg_match ("/^(refunded|reversed|reversal)$/i", $paypal["payment_status"])) /* The "txn_type" is irrelevant in these special situations. */)/**/
|
47 |
+
&& ((!empty ($paypal["item_number"]) || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $paypal["item_number"]))/**/
|
48 |
+
&& (!empty ($paypal["item_name"]) || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)) || ($paypal["item_name"] = $_SERVER["HTTP_HOST"]))/**/
|
49 |
+
&& (!empty ($paypal["payer_email"])) && (!empty ($paypal["parent_txn_id"]))/**/)
|
50 |
+
{
|
51 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
52 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_sp_refund_reversal", get_defined_vars ());
|
53 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
54 |
+
/**/
|
55 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
56 |
+
{
|
57 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `[empty or irrelevant]` ) w/ `payment_status` ( `refunded|reversed|reversal` ) - or - `new_case` w/ `case_type` ( `chargeback` ).";
|
58 |
+
/**/
|
59 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
60 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
61 |
+
/**/
|
62 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
63 |
+
/*
|
64 |
+
Refunds and chargeback reversals. This is excluded from the processing check.
|
65 |
+
In other words, s2Member sends `Refund/Reversal` Notifications ANYTIME a Refund/Reversal occurs; even if s2Member did not process it otherwise.
|
66 |
+
Since this routine ignores the processing check, it is *possible* that Refund/Reversal Notification URLs will be contacted more than once.
|
67 |
+
If you're writing scripts that depend on Refund/Reversal Notifications, please keep this in mind.
|
68 |
+
*/
|
69 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
70 |
+
{
|
71 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_urls"]) as $url)
|
72 |
+
/**/
|
73 |
+
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_ds (urlencode ($paypal["parent_txn_id"])), $url)))
|
74 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
75 |
+
if (($url = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_fee"])), $url)))
|
76 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
77 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
78 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
79 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
80 |
+
/**/
|
81 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
82 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
83 |
+
/**/
|
84 |
+
$paypal["s2member_log"][] = "Specific Post/Page ~ Refund/Reversal Notification URLs have been processed.";
|
85 |
+
}
|
86 |
+
/**/
|
87 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
88 |
+
{
|
89 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Specific Post/Page ~ Refund/Reversal";
|
90 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
91 |
+
/**/
|
92 |
+
$msg .= "parent_txn_id: %%parent_txn_id%%\n";
|
93 |
+
$msg .= "item_number: %%item_number%%\n";
|
94 |
+
$msg .= "item_name: %%item_name%%\n";
|
95 |
+
$msg .= "-amount: %%-amount%%\n";
|
96 |
+
$msg .= "-fee: %%-fee%%\n";
|
97 |
+
$msg .= "first_name: %%first_name%%\n";
|
98 |
+
$msg .= "last_name: %%last_name%%\n";
|
99 |
+
$msg .= "full_name: %%full_name%%\n";
|
100 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
101 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
102 |
+
/**/
|
103 |
+
$msg .= "cv0: %%cv0%%\n";
|
104 |
+
$msg .= "cv1: %%cv1%%\n";
|
105 |
+
$msg .= "cv2: %%cv2%%\n";
|
106 |
+
$msg .= "cv3: %%cv3%%\n";
|
107 |
+
$msg .= "cv4: %%cv4%%\n";
|
108 |
+
$msg .= "cv5: %%cv5%%\n";
|
109 |
+
$msg .= "cv6: %%cv6%%\n";
|
110 |
+
$msg .= "cv7: %%cv7%%\n";
|
111 |
+
$msg .= "cv8: %%cv8%%\n";
|
112 |
+
$msg .= "cv9: %%cv9%%";
|
113 |
+
/**/
|
114 |
+
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_ds ($paypal["parent_txn_id"]), $msg)))
|
115 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
116 |
+
if (($msg = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_fee"]), $msg)))
|
117 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
118 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
119 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
120 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
121 |
+
/**/
|
122 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
123 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_recipients"])) as $recipient)
|
124 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_sp_ref_rev_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_sp_ref_rev_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
125 |
+
/**/
|
126 |
+
$paypal["s2member_log"][] = "Specific Post/Page ~ Refund/Reversal Notification Emails have been processed.";
|
127 |
+
}
|
128 |
+
/**/
|
129 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
130 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_sp_refund_reversal", get_defined_vars ());
|
131 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
132 |
+
}
|
133 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
134 |
+
{
|
135 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
136 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `[empty or irrelevant]` ) w/ `payment_status` ( `refunded|reversed|reversal` ) - or - `new_case` w/ `case_type` ( `chargeback` ).";
|
137 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
138 |
+
}
|
139 |
+
/**/
|
140 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
141 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_sp_refund_reversal", get_defined_vars ());
|
142 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
143 |
+
/**/
|
144 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal", $paypal, get_defined_vars ());
|
145 |
+
}
|
146 |
+
else
|
147 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal", false, get_defined_vars ());
|
148 |
+
}
|
149 |
+
}
|
150 |
+
}
|
151 |
+
?>
|
includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php
ADDED
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^subscr_modify$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& (!empty ($paypal["item_number"]) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (!empty ($paypal["subscr_id"])) && (!empty ($paypal["payer_email"]))/**/)
|
48 |
+
{
|
49 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_modify", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
54 |
+
{
|
55 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_modify` ).";
|
56 |
+
/**/
|
57 |
+
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
58 |
+
/**/
|
59 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
60 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
61 |
+
/**/
|
62 |
+
$paypal["period1"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
63 |
+
$paypal["mc_amount1"] = (strlen ($paypal["mc_amount1"]) && $paypal["mc_amount1"] > 0) ? $paypal["mc_amount1"] : "0.00"; /* "0.00". */
|
64 |
+
/**/
|
65 |
+
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
66 |
+
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
67 |
+
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
68 |
+
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
69 |
+
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
70 |
+
/**/
|
71 |
+
eval('$ipn_signup_vars = $paypal; unset($ipn_signup_vars["s2member_log"]);'); /* Create array of IPN signup vars w/o s2member_log. */
|
72 |
+
/**/
|
73 |
+
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
74 |
+
{
|
75 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
76 |
+
{
|
77 |
+
$processing = $modifying = $during = true; /* Yes, we ARE processing this. */
|
78 |
+
/**/
|
79 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
80 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_before_subscr_modify", get_defined_vars ());
|
81 |
+
do_action ("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars (), "ipn-upgrade-downgrade", "modification", "s2member_level" . $paypal["level"]);
|
82 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
83 |
+
/**/
|
84 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
85 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
86 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
87 |
+
/**/
|
88 |
+
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
89 |
+
{
|
90 |
+
add_existing_user_to_blog(array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
91 |
+
$user = new WP_User ($user_id);
|
92 |
+
}
|
93 |
+
/**/
|
94 |
+
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
95 |
+
/**/
|
96 |
+
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
97 |
+
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
98 |
+
/**/
|
99 |
+
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
100 |
+
foreach ($user->allcaps as $cap => $cap_enabled)
|
101 |
+
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
102 |
+
$user->remove_cap ($ccap = $cap);
|
103 |
+
/**/
|
104 |
+
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
105 |
+
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
106 |
+
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
107 |
+
/**/
|
108 |
+
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
109 |
+
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
110 |
+
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
111 |
+
/**/
|
112 |
+
if (!get_user_option ("s2member_registration_ip", $user_id))
|
113 |
+
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
114 |
+
/**/
|
115 |
+
update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars);
|
116 |
+
/**/
|
117 |
+
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
118 |
+
delete_user_option ($user_id, "s2member_file_download_access_log");
|
119 |
+
/**/
|
120 |
+
delete_user_option ($user_id, "s2member_auto_eot_time");
|
121 |
+
/**/
|
122 |
+
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
123 |
+
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
124 |
+
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
125 |
+
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
126 |
+
/**/
|
127 |
+
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
128 |
+
/**/
|
129 |
+
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated on Subscription modification.";
|
130 |
+
/**/
|
131 |
+
wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_modification_email_sbj", "Thank you! Your account has been updated.", get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", "Thank you! You've been updated to:\n" . $paypal["item_name"] . "\n\nPlease log back in now.\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8");
|
132 |
+
/**/
|
133 |
+
$paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
|
134 |
+
/**/
|
135 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
136 |
+
{
|
137 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
|
138 |
+
/**/
|
139 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
140 |
+
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
141 |
+
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
142 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
143 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
144 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
145 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
146 |
+
/**/
|
147 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
148 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
149 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
150 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
151 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
152 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
153 |
+
{
|
154 |
+
if (is_array ($fields) && !empty ($fields))
|
155 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
156 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
157 |
+
break;
|
158 |
+
/**/
|
159 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
160 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
161 |
+
}
|
162 |
+
/**/
|
163 |
+
$paypal["s2member_log"][] = "Modification Notification URLs have been processed.";
|
164 |
+
}
|
165 |
+
/**/
|
166 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
167 |
+
{
|
168 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Modification";
|
169 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
170 |
+
/**/
|
171 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
172 |
+
$msg .= "initial: %%initial%%\n";
|
173 |
+
$msg .= "regular: %%regular%%\n";
|
174 |
+
$msg .= "recurring: %%recurring%%\n";
|
175 |
+
$msg .= "initial_term: %%initial_term%%\n";
|
176 |
+
$msg .= "regular_term: %%regular_term%%\n";
|
177 |
+
$msg .= "item_number: %%item_number%%\n";
|
178 |
+
$msg .= "item_name: %%item_name%%\n";
|
179 |
+
$msg .= "first_name: %%first_name%%\n";
|
180 |
+
$msg .= "last_name: %%last_name%%\n";
|
181 |
+
$msg .= "full_name: %%full_name%%\n";
|
182 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
183 |
+
/**/
|
184 |
+
$msg .= "user_first_name: %%user_first_name%%\n";
|
185 |
+
$msg .= "user_last_name: %%user_last_name%%\n";
|
186 |
+
$msg .= "user_full_name: %%user_full_name%%\n";
|
187 |
+
$msg .= "user_email: %%user_email%%\n";
|
188 |
+
$msg .= "user_login: %%user_login%%\n";
|
189 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
190 |
+
$msg .= "user_id: %%user_id%%\n";
|
191 |
+
/**/
|
192 |
+
if (is_array ($fields) && !empty ($fields))
|
193 |
+
foreach ($fields as $var => $val)
|
194 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
195 |
+
/**/
|
196 |
+
$msg .= "cv0: %%cv0%%\n";
|
197 |
+
$msg .= "cv1: %%cv1%%\n";
|
198 |
+
$msg .= "cv2: %%cv2%%\n";
|
199 |
+
$msg .= "cv3: %%cv3%%\n";
|
200 |
+
$msg .= "cv4: %%cv4%%\n";
|
201 |
+
$msg .= "cv5: %%cv5%%\n";
|
202 |
+
$msg .= "cv6: %%cv6%%\n";
|
203 |
+
$msg .= "cv7: %%cv7%%\n";
|
204 |
+
$msg .= "cv8: %%cv8%%\n";
|
205 |
+
$msg .= "cv9: %%cv9%%";
|
206 |
+
/**/
|
207 |
+
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_ds ($paypal["subscr_id"]), $msg)))
|
208 |
+
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)) && ($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)))
|
209 |
+
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
210 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
211 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
212 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
213 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
214 |
+
/**/
|
215 |
+
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
216 |
+
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
217 |
+
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
218 |
+
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
219 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
220 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
221 |
+
{
|
222 |
+
if (is_array ($fields) && !empty ($fields))
|
223 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
224 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
225 |
+
break;
|
226 |
+
/**/
|
227 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
228 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"])) as $recipient)
|
229 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_modification_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
230 |
+
}
|
231 |
+
/**/
|
232 |
+
$paypal["s2member_log"][] = "Modification Notification Emails have been processed.";
|
233 |
+
}
|
234 |
+
/**/
|
235 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
236 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_modify", get_defined_vars ());
|
237 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
238 |
+
}
|
239 |
+
else
|
240 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
241 |
+
}
|
242 |
+
else
|
243 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
|
244 |
+
}
|
245 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
246 |
+
{
|
247 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
248 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_modify` ).";
|
249 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
250 |
+
}
|
251 |
+
/**/
|
252 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
253 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_modify", get_defined_vars ());
|
254 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
255 |
+
/**/
|
256 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level", $paypal, get_defined_vars ());
|
257 |
+
}
|
258 |
+
else
|
259 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level", false, get_defined_vars ());
|
260 |
+
}
|
261 |
+
}
|
262 |
+
}
|
263 |
+
?>
|
includes/classes/paypal-notify-in-subscr-or-rp-cancellation-w-level.inc.php
ADDED
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^(subscr_cancel|recurring_payment_profile_cancel)$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& !(preg_match ("/^recurring_payment_profile_cancel$/i", $paypal["txn_type"]) && !empty ($paypal["initial_payment_status"]) && preg_match ("/^failed$/i", $paypal["initial_payment_status"]))/**/
|
47 |
+
&& ((!empty ($paypal["item_number"]) || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
48 |
+
&& (!empty ($paypal["period1"]) || ($paypal["period1"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period1 ($paypal)) || ($paypal["period1"] = "0 D"))/**/
|
49 |
+
&& (!empty ($paypal["period3"]) || ($paypal["period3"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period3 ($paypal)))/**/
|
50 |
+
&& (!empty ($paypal["subscr_id"]) || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
51 |
+
&& (!empty ($paypal["item_name"]) || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
52 |
+
&& (!empty ($paypal["payer_email"]) || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
53 |
+
{
|
54 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
55 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_cancel", get_defined_vars ());
|
56 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
57 |
+
/**/
|
58 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
59 |
+
{
|
60 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_cancel|recurring_payment_profile_cancel` ).";
|
61 |
+
/**/
|
62 |
+
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
63 |
+
/**/
|
64 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
65 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
66 |
+
/**/
|
67 |
+
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
68 |
+
{
|
69 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
70 |
+
{
|
71 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
72 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
73 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
74 |
+
/**/
|
75 |
+
if (!get_user_option ("s2member_auto_eot_time", $user_id)) /* Respect existing. */
|
76 |
+
{
|
77 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
78 |
+
/**/
|
79 |
+
$auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ($user_id, $paypal["period1"], $paypal["period3"]);
|
80 |
+
/**/
|
81 |
+
update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time); /* s2Member follows-up later. */
|
82 |
+
/**/
|
83 |
+
$paypal["s2member_log"][] = "Auto-EOT Time for this account: " . date ("D M j, Y g:i a T", $auto_eot_time);
|
84 |
+
/**/
|
85 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
86 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_cancel", get_defined_vars ());
|
87 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
88 |
+
}
|
89 |
+
else
|
90 |
+
$paypal["s2member_log"][] = "Ignoring Cancellation. An Auto-EOT Time is already set for this Member. An s2Member API Notification will still be processed however.";
|
91 |
+
/**/
|
92 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
93 |
+
{
|
94 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"]) as $url) /* Handle Cancellation Notifications. */
|
95 |
+
/**/
|
96 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
97 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
98 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
99 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
100 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
101 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
102 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
103 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
104 |
+
{
|
105 |
+
if (is_array ($fields) && !empty ($fields))
|
106 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
107 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
108 |
+
break;
|
109 |
+
/**/
|
110 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
111 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
112 |
+
}
|
113 |
+
/**/
|
114 |
+
$paypal["s2member_log"][] = "Cancellation Notification URLs have been processed.";
|
115 |
+
}
|
116 |
+
/**/
|
117 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
118 |
+
{
|
119 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Cancellation";
|
120 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
121 |
+
/**/
|
122 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
123 |
+
$msg .= "item_number: %%item_number%%\n";
|
124 |
+
$msg .= "item_name: %%item_name%%\n";
|
125 |
+
$msg .= "user_first_name: %%user_first_name%%\n";
|
126 |
+
$msg .= "user_last_name: %%user_last_name%%\n";
|
127 |
+
$msg .= "user_full_name: %%user_full_name%%\n";
|
128 |
+
$msg .= "user_email: %%user_email%%\n";
|
129 |
+
$msg .= "user_login: %%user_login%%\n";
|
130 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
131 |
+
$msg .= "user_id: %%user_id%%\n";
|
132 |
+
/**/
|
133 |
+
if (is_array ($fields) && !empty ($fields))
|
134 |
+
foreach ($fields as $var => $val)
|
135 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
136 |
+
/**/
|
137 |
+
$msg .= "cv0: %%cv0%%\n";
|
138 |
+
$msg .= "cv1: %%cv1%%\n";
|
139 |
+
$msg .= "cv2: %%cv2%%\n";
|
140 |
+
$msg .= "cv3: %%cv3%%\n";
|
141 |
+
$msg .= "cv4: %%cv4%%\n";
|
142 |
+
$msg .= "cv5: %%cv5%%\n";
|
143 |
+
$msg .= "cv6: %%cv6%%\n";
|
144 |
+
$msg .= "cv7: %%cv7%%\n";
|
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_ds ($paypal["subscr_id"]), $msg)))
|
149 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
150 |
+
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
151 |
+
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
152 |
+
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
153 |
+
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
154 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
155 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
156 |
+
{
|
157 |
+
if (is_array ($fields) && !empty ($fields))
|
158 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
159 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
160 |
+
break;
|
161 |
+
/**/
|
162 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
163 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_recipients"])) as $recipient)
|
164 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_cancellation_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_cancellation_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
165 |
+
}
|
166 |
+
/**/
|
167 |
+
$paypal["s2member_log"][] = "Cancellation Notification Emails have been processed.";
|
168 |
+
}
|
169 |
+
}
|
170 |
+
else
|
171 |
+
$paypal["s2member_log"][] = "Ignoring Cancellation. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
172 |
+
}
|
173 |
+
else
|
174 |
+
$paypal["s2member_log"][] = "Unable to handle Cancellation. Could not get the existing User ID from the DB.";
|
175 |
+
}
|
176 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
177 |
+
{
|
178 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
179 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_cancel|recurring_payment_profile_cancel` ).";
|
180 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
181 |
+
}
|
182 |
+
/**/
|
183 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
184 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_cancel", get_defined_vars ());
|
185 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
186 |
+
/**/
|
187 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level", $paypal, get_defined_vars ());
|
188 |
+
}
|
189 |
+
else
|
190 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level", false, get_defined_vars ());
|
191 |
+
}
|
192 |
+
}
|
193 |
+
}
|
194 |
+
?>
|
includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php
ADDED
@@ -0,0 +1,438 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(/**/(!empty ($paypal["txn_type"]) && preg_match ("/^(subscr_eot|recurring_payment_expired|recurring_payment_suspended_due_to_max_failed_payment)$/i", $paypal["txn_type"]) && ($recurring = 1))/**/
|
46 |
+
|| (!empty ($paypal["txn_type"]) && preg_match ("/^recurring_payment_profile_cancel$/i", $paypal["txn_type"]) && !empty ($paypal["initial_payment_status"]) && preg_match ("/^failed$/i", $paypal["initial_payment_status"]) && ($recurring = 1))/**/
|
47 |
+
|| (!empty ($paypal["txn_type"]) && preg_match ("/^new_case$/i", $paypal["txn_type"]) && !empty ($paypal["case_type"]) && preg_match ("/^chargeback$/i", $paypal["case_type"]) && !($recurring = 0)) /* ONLY for future compatibility. */
|
48 |
+
|| (!empty ($paypal["payment_status"]) && preg_match ("/^(refunded|reversed|reversal)$/i", $paypal["payment_status"]) && !($recurring = 0)) /* The "txn_type" is irrelevant in all of these cases: refunded|reversed|reversal. */)/**/
|
49 |
+
&& (!empty ($paypal["period1"]) || ($paypal["period1"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period1 ($paypal)) || empty ($recurring) || ($paypal["period1"] = "0 D"))/**/
|
50 |
+
&& (!empty ($paypal["period3"]) || ($paypal["period3"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period3 ($paypal)) || empty ($recurring)) /* Was it even recurring? */
|
51 |
+
&& ((!empty ($paypal["item_number"]) || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
52 |
+
&& (!empty ($paypal["subscr_id"]) || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)) || (!empty ($paypal["parent_txn_id"]) && ($paypal["subscr_id"] = $paypal["parent_txn_id"])))/**/
|
53 |
+
&& (!empty ($paypal["item_name"]) || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)) || ($paypal["item_name"] = $_SERVER["HTTP_HOST"]))/**/
|
54 |
+
&& (!empty ($paypal["payer_email"]) || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
55 |
+
{
|
56 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
57 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_eot", get_defined_vars ());
|
58 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
59 |
+
/**/
|
60 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
61 |
+
{
|
62 |
+
$is_refund = (preg_match ("/^refunded$/i", $paypal["payment_status"]) && $paypal["parent_txn_id"]);
|
63 |
+
$is_reversal = (preg_match ("/^(reversed|reversal)$/i", $paypal["payment_status"]) && $paypal["parent_txn_id"]);
|
64 |
+
$is_reversal = (!$is_reversal) ? (preg_match ("/^new_case$/i", $paypal["txn_type"]) && preg_match ("/^chargeback$/i", $paypal["case_type"])) : $is_reversal;
|
65 |
+
$is_refund_or_reversal = ($is_refund || $is_reversal); /* If either of the previous tests above evaluated to true; then it's obviously a Refund and/or a Reversal. */
|
66 |
+
$is_delayed_eot = (!$is_refund_or_reversal && preg_match ("/^(subscr_eot|recurring_payment_expired)$/i", $paypal["txn_type"]) && preg_match ("/^I-/i", $paypal["subscr_id"]));
|
67 |
+
/**/
|
68 |
+
if ($is_refund_or_reversal)
|
69 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as " . ($identified_as = "( `[empty or irrelevant]` ) w/ `payment_status` ( `refunded|reversed|reversal` ) - or - `new_case` w/ `case_type` ( `chargeback` )") . ".";
|
70 |
+
else
|
71 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as " . ($identified_as = "( `subscr_eot|recurring_payment_expired|recurring_payment_suspended_due_to_max_failed_payment` ) - or - `recurring_payment_profile_cancel` w/ `initial_payment_status` ( `failed` )") . ".";
|
72 |
+
/**/
|
73 |
+
$paypal["s2member_log"][] = "Sleeping for 5 seconds. Waiting for a possible ( `subscr_signup|subscr_modify|recurring_payment_profile_created` ).";
|
74 |
+
sleep(5); /* Sleep here for a moment. PayPal® sometimes sends a subscr_eot before the subscr_signup, subscr_modify. */
|
75 |
+
/* It is NOT a big deal if they do. However, s2Member goes to sleep here, just to help keep the log files in a logical order. */
|
76 |
+
$paypal["s2member_log"][] = "Awake. It's " . date ("D M j, Y g:i:s a T") . ". s2Member `txn_type` identified as " . $identified_as . ".";
|
77 |
+
/**/
|
78 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
79 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
80 |
+
/**/
|
81 |
+
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
82 |
+
{
|
83 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed below. */
|
84 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Needed below. */
|
85 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"];
|
86 |
+
/**/
|
87 |
+
if ( /* Here we take action, BUT based on Auto EOT Behavior options; as configured by the Site Owner. */
|
88 |
+
(!$is_refund_or_reversal && !$is_delayed_eot && !get_user_option ("s2member_auto_eot_time", $user_id))/**/
|
89 |
+
|| ($is_refund_or_reversal && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "refunds,reversals")/**/
|
90 |
+
|| ($is_reversal && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "reversals")/**/
|
91 |
+
|| ($is_refund && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "refunds")/**/)
|
92 |
+
{
|
93 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
94 |
+
{
|
95 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"]) /* EOT enabled? */
|
96 |
+
{
|
97 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_eot_behavior"] === "demote")
|
98 |
+
{
|
99 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
100 |
+
/**/
|
101 |
+
$eot_del_type = ($is_refund_or_reversal) ? /* Set EOT/Del type. */
|
102 |
+
"ipn-refund-reversal-demotion" : "ipn-cancellation-expiration-demotion";
|
103 |
+
/**/
|
104 |
+
$demotion_role = c_ws_plugin__s2member_option_forces::force_demotion_role ("subscriber");
|
105 |
+
$existing_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
106 |
+
/**/
|
107 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
108 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_before_demote", get_defined_vars ());
|
109 |
+
do_action ("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars (), $eot_del_type, "modification", $demotion_role);
|
110 |
+
do_action ("ws_plugin__s2member_during_collective_eots", $user_id, get_defined_vars (), $eot_del_type, "modification");
|
111 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
112 |
+
/**/
|
113 |
+
if ($existing_role !== $demotion_role) /* Only if NOT the existing Role. */
|
114 |
+
$user->set_role ($demotion_role); /* Give User the demotion Role. */
|
115 |
+
/**/
|
116 |
+
foreach ($user->allcaps as $cap => $cap_enabled)
|
117 |
+
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
118 |
+
$user->remove_cap ($ccap = $cap);
|
119 |
+
/**/
|
120 |
+
delete_user_option ($user_id, "s2member_custom");
|
121 |
+
delete_user_option ($user_id, "s2member_subscr_id");
|
122 |
+
delete_user_option ($user_id, "s2member_subscr_gateway");
|
123 |
+
/**/
|
124 |
+
delete_user_option ($user_id, "s2member_ipn_signup_vars");
|
125 |
+
/**/
|
126 |
+
if (!apply_filters ("ws_plugin__s2member_preserve_paid_registration_times", true, get_defined_vars ()))
|
127 |
+
delete_user_option ($user_id, "s2member_paid_registration_times");
|
128 |
+
/**/
|
129 |
+
delete_user_option ($user_id, "s2member_last_status_scan");
|
130 |
+
delete_user_option ($user_id, "s2member_first_payment_txn_id");
|
131 |
+
delete_user_option ($user_id, "s2member_last_payment_time");
|
132 |
+
delete_user_option ($user_id, "s2member_auto_eot_time");
|
133 |
+
/**/
|
134 |
+
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
135 |
+
delete_user_option ($user_id, "s2member_file_download_access_log");
|
136 |
+
/**/
|
137 |
+
c_ws_plugin__s2member_user_notes::append_user_notes ($user_id, "Demoted by s2Member: " . date ("D M j, Y g:i a T"));
|
138 |
+
/**/
|
139 |
+
$paypal["s2member_log"][] = "Member Level/Capabilities demoted to: " . ucwords (preg_replace ("/_/", " ", $demotion_role)) . ".";
|
140 |
+
/**/
|
141 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
142 |
+
{
|
143 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_urls"]) as $url) /* Handle EOT Notifications. */
|
144 |
+
/**/
|
145 |
+
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_ds (urlencode ($eot_del_type)), $url)) && ($url = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["subscr_id"])), $url)))
|
146 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
147 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
148 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
149 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
150 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
151 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
152 |
+
{
|
153 |
+
if (is_array ($fields) && !empty ($fields))
|
154 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
155 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
156 |
+
break;
|
157 |
+
/**/
|
158 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
159 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
160 |
+
}
|
161 |
+
/**/
|
162 |
+
$paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
|
163 |
+
}
|
164 |
+
/**/
|
165 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
166 |
+
{
|
167 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - EOT/Deletion";
|
168 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
169 |
+
/**/
|
170 |
+
$msg .= "eot_del_type: %%eot_del_type%%\n";
|
171 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
172 |
+
$msg .= "user_first_name: %%user_first_name%%\n";
|
173 |
+
$msg .= "user_last_name: %%user_last_name%%\n";
|
174 |
+
$msg .= "user_full_name: %%user_full_name%%\n";
|
175 |
+
$msg .= "user_email: %%user_email%%\n";
|
176 |
+
$msg .= "user_login: %%user_login%%\n";
|
177 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
178 |
+
$msg .= "user_id: %%user_id%%\n";
|
179 |
+
/**/
|
180 |
+
if (is_array ($fields) && !empty ($fields))
|
181 |
+
foreach ($fields as $var => $val)
|
182 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
183 |
+
/**/
|
184 |
+
$msg .= "cv0: %%cv0%%\n";
|
185 |
+
$msg .= "cv1: %%cv1%%\n";
|
186 |
+
$msg .= "cv2: %%cv2%%\n";
|
187 |
+
$msg .= "cv3: %%cv3%%\n";
|
188 |
+
$msg .= "cv4: %%cv4%%\n";
|
189 |
+
$msg .= "cv5: %%cv5%%\n";
|
190 |
+
$msg .= "cv6: %%cv6%%\n";
|
191 |
+
$msg .= "cv7: %%cv7%%\n";
|
192 |
+
$msg .= "cv8: %%cv8%%\n";
|
193 |
+
$msg .= "cv9: %%cv9%%";
|
194 |
+
/**/
|
195 |
+
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_ds ($eot_del_type), $msg)) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $msg)))
|
196 |
+
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
197 |
+
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
198 |
+
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
199 |
+
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
200 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
201 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
202 |
+
{
|
203 |
+
if (is_array ($fields) && !empty ($fields))
|
204 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
205 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
206 |
+
break;
|
207 |
+
/**/
|
208 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
209 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_recipients"])) as $recipient)
|
210 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_eot_del_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_eot_del_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
211 |
+
}
|
212 |
+
/**/
|
213 |
+
$paypal["s2member_log"][] = "EOT/Deletion Notification Emails have been processed.";
|
214 |
+
}
|
215 |
+
/**/
|
216 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
217 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_demote", get_defined_vars ());
|
218 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
219 |
+
}
|
220 |
+
/**/
|
221 |
+
else if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_eot_behavior"] === "delete")
|
222 |
+
{
|
223 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
224 |
+
/**/
|
225 |
+
$eot_del_type = $GLOBALS["ws_plugin__s2member_eot_del_type"] = /* Configure EOT/Del type. */
|
226 |
+
($is_refund_or_reversal) ? "ipn-refund-reversal-deletion" : "ipn-cancellation-expiration-deletion";
|
227 |
+
/**/
|
228 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
229 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_before_delete", get_defined_vars ());
|
230 |
+
do_action ("ws_plugin__s2member_during_collective_eots", $user_id, get_defined_vars (), $eot_del_type, "removal-deletion");
|
231 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
232 |
+
/**/
|
233 |
+
if (is_multisite ()) /* Multisite does NOT actually delete; ONLY removes. */
|
234 |
+
{
|
235 |
+
remove_user_from_blog ($user_id, $current_blog->blog_id);
|
236 |
+
/* This will automatically trigger `eot_del_notification_urls` as well. */
|
237 |
+
c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions ($user_id, $current_blog->blog_id, "s2says");
|
238 |
+
}
|
239 |
+
/**/
|
240 |
+
else /* Otherwise, we can actually delete them. */
|
241 |
+
/* This will automatically trigger `eot_del_notification_urls` as well. */
|
242 |
+
wp_delete_user($user_id); /* `c_ws_plugin__s2member_user_deletions::handle_user_deletions()` */
|
243 |
+
/**/
|
244 |
+
$paypal["s2member_log"][] = "This Member's account has been " . ((is_multisite ()) ? "removed" : "deleted") . ".";
|
245 |
+
/**/
|
246 |
+
$paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
|
247 |
+
/**/
|
248 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
249 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_delete", get_defined_vars ());
|
250 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
251 |
+
}
|
252 |
+
/**/
|
253 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
254 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot", get_defined_vars ());
|
255 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
256 |
+
}
|
257 |
+
/**/
|
258 |
+
else /* Otherwise, treat this as if it were a cancellation. EOTs are currently disabled. */
|
259 |
+
{
|
260 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
261 |
+
/**/
|
262 |
+
update_user_option ($user_id, "s2member_auto_eot_time", ($auto_eot_time = strtotime ("now")));
|
263 |
+
/**/
|
264 |
+
$paypal["s2member_log"][] = "Auto-EOT is currently disabled. Skipping immediate EOT ( demote|delete ), for now.";
|
265 |
+
$paypal["s2member_log"][] = "Recording the Auto-EOT Time for this Member's account: " . date ("D M j, Y g:i a T", $auto_eot_time);
|
266 |
+
/**/
|
267 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
268 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_disabled", get_defined_vars ());
|
269 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
270 |
+
}
|
271 |
+
}
|
272 |
+
else
|
273 |
+
$paypal["s2member_log"][] = "Unable to ( demote|delete ) Member. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
274 |
+
}
|
275 |
+
/**/
|
276 |
+
else if ($is_delayed_eot && !get_user_option ("s2member_auto_eot_time", $user_id))
|
277 |
+
{
|
278 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
279 |
+
{
|
280 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
281 |
+
/**/
|
282 |
+
$auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ($user_id, $paypal["period1"], $paypal["period3"], "", time ());
|
283 |
+
/* We assume the last payment was today, because this is how newer PayPal® accounts function with respect to EOT handling.
|
284 |
+
Newer PayPal® accounts ( i.e. Subscription IDs starting with `I-`, will have their EOT triggered upon the last payment. */
|
285 |
+
update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time); /* s2Member will follow-up on this later. */
|
286 |
+
/**/
|
287 |
+
$paypal["s2member_log"][] = "Auto-EOT Time for this account ( delayed ), set to: " . date ("D M j, Y g:i a T", $auto_eot_time);
|
288 |
+
/**/
|
289 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
290 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_delayed", get_defined_vars ());
|
291 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
292 |
+
}
|
293 |
+
else
|
294 |
+
$paypal["s2member_log"][] = "Ignoring Delayed EOT. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
295 |
+
}
|
296 |
+
/**/
|
297 |
+
else if (!$is_refund_or_reversal || $is_delayed_eot)
|
298 |
+
$paypal["s2member_log"][] = "Skipping ( demote|delete ) Member, for now. An Auto-EOT Time is already set for this account. When an Auto-EOT Time has been recorded, s2Member will handle EOT ( demote|delete ) events using it's own Auto-EOT System - internally.";
|
299 |
+
/**/
|
300 |
+
else if ($is_reversal)
|
301 |
+
$paypal["s2member_log"][] = "Skipping ( demote|delete ) Member. Your configuration dictates that s2Member should NOT take any immediate action on an EOT associated with a Chargeback Reversal. An s2Member API Notification will still be processed however.";
|
302 |
+
/**/
|
303 |
+
else if ($is_refund)
|
304 |
+
$paypal["s2member_log"][] = "Skipping ( demote|delete ) Member. Your configuration dictates that s2Member should NOT take any immediate action on an EOT associated with a Refund. An s2Member API Notification will still be processed however.";
|
305 |
+
}
|
306 |
+
else if ($is_delayed_eot) /* Otherwise, we need to re-generate/store this IPN into a Transient Queue. Then re-process it on registration. */
|
307 |
+
{
|
308 |
+
$paypal["s2member_log"][] = "Skipping this IPN response, for now. The Subscr. ID is not associated with a registered Member.";
|
309 |
+
/**/
|
310 |
+
$ipn = array ("txn_type" => "subscr_eot"); /* Create a simulated IPN response for txn_type=subscr_eot. */
|
311 |
+
/**/
|
312 |
+
foreach ($paypal as $var => $val)
|
313 |
+
if (in_array ($var, array ("subscr_gateway", "subscr_id", "custom", "invoice", "payer_email", "first_name", "last_name", "item_name", "item_number", "period1", "period3", "option_name1", "option_selection1", "option_name2", "option_selection2")))
|
314 |
+
$ipn[$var] = $val;
|
315 |
+
/**/
|
316 |
+
$paypal["s2member_log"][] = "Re-generating. This IPN will go into a Transient Queue; and be re-processed during registration.";
|
317 |
+
/**/
|
318 |
+
set_transient ("s2m_" . md5 ("s2member_transient_ipn_subscr_eot_" . $paypal["subscr_id"]), $ipn, 43200);
|
319 |
+
}
|
320 |
+
/**/
|
321 |
+
else
|
322 |
+
$paypal["s2member_log"][] = "Unable to ( demote|delete ) Member. Could not get the existing User ID from the DB. It's possible that it was ALREADY processed through another IPN, removed manually by a Site Administrator, or by s2Member's Auto-EOT Sys.";
|
323 |
+
/*
|
324 |
+
Refunds and chargeback reversals. This is excluded from the processing check, because a Member *could* have already been (demoted|deleted).
|
325 |
+
In other words, s2Member sends `Refund/Reversal` Notifications ANYTIME a Refund/Reversal occurs; even if s2Member did not process it otherwise.
|
326 |
+
Since this routine ignores the processing check, it is *possible* that Refund/Reversal Notification URLs will be contacted more than once.
|
327 |
+
If you're writing scripts that depend on Refund/Reversal Notifications, please keep this in mind.
|
328 |
+
*/
|
329 |
+
if ($is_refund_or_reversal) /* Here we access this variable that was previously assigned as a quick method of Refund/Reversal detection. */
|
330 |
+
{
|
331 |
+
$fields = ($user_id) ? get_user_option ("s2member_custom_fields", $user_id) : array (); /* These will be needed below. */
|
332 |
+
$user_reg_ip = ($user_id) ? get_user_option ("s2member_registration_ip", $user_id) : ""; /* Needed below. */
|
333 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
334 |
+
/**/
|
335 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
336 |
+
{
|
337 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_urls"]) as $url)
|
338 |
+
/**/
|
339 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)) && ($url = preg_replace ("/%%parent_txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["parent_txn_id"])), $url)))
|
340 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
341 |
+
if (($url = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_fee"])), $url)))
|
342 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
343 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
344 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
345 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
346 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
347 |
+
{
|
348 |
+
if (is_array ($fields) && !empty ($fields))
|
349 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
350 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
351 |
+
break;
|
352 |
+
/**/
|
353 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
354 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
355 |
+
}
|
356 |
+
/**/
|
357 |
+
$paypal["s2member_log"][] = "Refund/Reversal Notification URLs have been processed.";
|
358 |
+
}
|
359 |
+
/**/
|
360 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
361 |
+
{
|
362 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Refund/Reversal";
|
363 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
364 |
+
/**/
|
365 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
366 |
+
$msg .= "parent_txn_id: %%parent_txn_id%%\n";
|
367 |
+
$msg .= "item_number: %%item_number%%\n";
|
368 |
+
$msg .= "item_name: %%item_name%%\n";
|
369 |
+
$msg .= "-amount: %%-amount%%\n";
|
370 |
+
$msg .= "-fee: %%-fee%%\n";
|
371 |
+
$msg .= "first_name: %%first_name%%\n";
|
372 |
+
$msg .= "last_name: %%last_name%%\n";
|
373 |
+
$msg .= "full_name: %%full_name%%\n";
|
374 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
375 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
376 |
+
$msg .= "user_id: %%user_id%%\n";
|
377 |
+
/**/
|
378 |
+
if (is_array ($fields) && !empty ($fields))
|
379 |
+
foreach ($fields as $var => $val)
|
380 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
381 |
+
/**/
|
382 |
+
$msg .= "cv0: %%cv0%%\n";
|
383 |
+
$msg .= "cv1: %%cv1%%\n";
|
384 |
+
$msg .= "cv2: %%cv2%%\n";
|
385 |
+
$msg .= "cv3: %%cv3%%\n";
|
386 |
+
$msg .= "cv4: %%cv4%%\n";
|
387 |
+
$msg .= "cv5: %%cv5%%\n";
|
388 |
+
$msg .= "cv6: %%cv6%%\n";
|
389 |
+
$msg .= "cv7: %%cv7%%\n";
|
390 |
+
$msg .= "cv8: %%cv8%%\n";
|
391 |
+
$msg .= "cv9: %%cv9%%";
|
392 |
+
/**/
|
393 |
+
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_ds ($paypal["subscr_id"]), $msg)) && ($msg = preg_replace ("/%%parent_txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["parent_txn_id"]), $msg)))
|
394 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
395 |
+
if (($msg = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_fee"]), $msg)))
|
396 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
397 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
398 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
399 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
400 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
401 |
+
{
|
402 |
+
if (is_array ($fields) && !empty ($fields))
|
403 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
404 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
405 |
+
break;
|
406 |
+
/**/
|
407 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
408 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_recipients"])) as $recipient)
|
409 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_ref_rev_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_ref_rev_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
410 |
+
}
|
411 |
+
/**/
|
412 |
+
$paypal["s2member_log"][] = "Refund/Reversal Notification Emails have been processed.";
|
413 |
+
}
|
414 |
+
/**/
|
415 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
416 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_refund_reversal", get_defined_vars ());
|
417 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
418 |
+
}
|
419 |
+
}
|
420 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
421 |
+
{
|
422 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
423 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as a type of EOT.";
|
424 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
425 |
+
}
|
426 |
+
/**/
|
427 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
428 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_eot", get_defined_vars ());
|
429 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
430 |
+
/**/
|
431 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_level", $paypal, get_defined_vars ());
|
432 |
+
}
|
433 |
+
else
|
434 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_level", false, get_defined_vars ());
|
435 |
+
}
|
436 |
+
}
|
437 |
+
}
|
438 |
+
?>
|
includes/classes/paypal-notify-in-subscr-or-rp-payment-failed-w-level.inc.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_failed_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_failed_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^(subscr_failed|recurring_payment_failed|recurring_payment_skipped)$/i", $paypal["txn_type"]))/**/
|
44 |
+
&& ((!empty ($paypal["item_number"]) || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
45 |
+
&& (!empty ($paypal["subscr_id"]) || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
46 |
+
&& (!empty ($paypal["item_name"]) || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
47 |
+
&& (!empty ($paypal["payer_email"]) || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
48 |
+
{
|
49 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_failed", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
54 |
+
{
|
55 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_failed|recurring_payment_failed|recurring_payment_skipped` ).";
|
56 |
+
/**/
|
57 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
58 |
+
/**/
|
59 |
+
$paypal["s2member_log"][] = "This `txn_type` does not require any action on the part of s2Member.";
|
60 |
+
$paypal["s2member_log"][] = "s2Member does NOT respond to individual failed payments, only multiple consecutive failed payments.";
|
61 |
+
$paypal["s2member_log"][] = "When multiple consecutive payments fail, a special IPN response will be triggered.";
|
62 |
+
/**/
|
63 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
64 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_failed", get_defined_vars ());
|
65 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
66 |
+
}
|
67 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
68 |
+
{
|
69 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
70 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_failed|recurring_payment_failed|recurring_payment_skipped` ).";
|
71 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
72 |
+
}
|
73 |
+
/**/
|
74 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
75 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_failed", get_defined_vars ());
|
76 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
77 |
+
/**/
|
78 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_failed_w_level", $paypal, get_defined_vars ());
|
79 |
+
}
|
80 |
+
else
|
81 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_failed_w_level", false, get_defined_vars ());
|
82 |
+
}
|
83 |
+
}
|
84 |
+
}
|
85 |
+
?>
|
includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^(subscr_payment|recurring_payment)$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& ((!empty ($paypal["item_number"]) || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (!empty ($paypal["subscr_id"]) || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
48 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
49 |
+
&& (!empty ($paypal["item_name"]) || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
50 |
+
&& (!empty ($paypal["payer_email"]) || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/
|
51 |
+
&& (!empty ($paypal["txn_id"])) && (!empty ($paypal["mc_gross"]))/**/)
|
52 |
+
{
|
53 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
54 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_payment", get_defined_vars ());
|
55 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
56 |
+
/**/
|
57 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
58 |
+
{
|
59 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as " . ($identified_as = "( `subscr_payment|recurring_payment` )") . ".";
|
60 |
+
$paypal["s2member_log"][] = "Sleeping for 5 seconds. Waiting for a possible ( `subscr_signup|subscr_modify|recurring_payment_profile_created` ).";
|
61 |
+
sleep(5); /* Sleep here for a moment. PayPal® sometimes sends a subscr_payment before the subscr_signup, subscr_modify. */
|
62 |
+
/* It is NOT a big deal if they do. However, s2Member goes to sleep here, just to help keep the log files in a logical order. */
|
63 |
+
$paypal["s2member_log"][] = "Awake. It's " . date ("D M j, Y g:i:s a T") . ". s2Member `txn_type` identified as " . $identified_as . ".";
|
64 |
+
/**/
|
65 |
+
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
66 |
+
/**/
|
67 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
68 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
69 |
+
/**/
|
70 |
+
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
71 |
+
{
|
72 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
73 |
+
/**/
|
74 |
+
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
75 |
+
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
76 |
+
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
77 |
+
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
78 |
+
/**/
|
79 |
+
if (!get_user_option ("s2member_first_payment_txn_id", $user_id)) /* 1st payment? */
|
80 |
+
update_user_option ($user_id, "s2member_first_payment_txn_id", $paypal["txn_id"]);
|
81 |
+
/**/
|
82 |
+
update_user_option ($user_id, "s2member_last_payment_time", time ()); /* Also update last payment time. */
|
83 |
+
/**/
|
84 |
+
$paypal["s2member_log"][] = "Updated Payment Times for this Member."; /* Flag this action in the log. */
|
85 |
+
/**/
|
86 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
87 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
88 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
89 |
+
/**/
|
90 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
91 |
+
{
|
92 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
|
93 |
+
/**/
|
94 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
95 |
+
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
96 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
97 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
98 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
99 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
100 |
+
{
|
101 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
102 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
103 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
104 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
105 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
106 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
107 |
+
{
|
108 |
+
if (is_array ($fields) && !empty ($fields))
|
109 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
110 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
111 |
+
break;
|
112 |
+
/**/
|
113 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
114 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
115 |
+
}
|
116 |
+
}
|
117 |
+
/**/
|
118 |
+
$paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
|
119 |
+
}
|
120 |
+
/**/
|
121 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
122 |
+
{
|
123 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Payment";
|
124 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
125 |
+
/**/
|
126 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
127 |
+
$msg .= "amount: %%amount%%\n";
|
128 |
+
$msg .= "txn_id: %%txn_id%%\n";
|
129 |
+
$msg .= "item_number: %%item_number%%\n";
|
130 |
+
$msg .= "item_name: %%item_name%%\n";
|
131 |
+
$msg .= "first_name: %%first_name%%\n";
|
132 |
+
$msg .= "last_name: %%last_name%%\n";
|
133 |
+
$msg .= "full_name: %%full_name%%\n";
|
134 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
135 |
+
/**/
|
136 |
+
$msg .= "user_first_name: %%user_first_name%%\n";
|
137 |
+
$msg .= "user_last_name: %%user_last_name%%\n";
|
138 |
+
$msg .= "user_full_name: %%user_full_name%%\n";
|
139 |
+
$msg .= "user_email: %%user_email%%\n";
|
140 |
+
$msg .= "user_login: %%user_login%%\n";
|
141 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
142 |
+
$msg .= "user_id: %%user_id%%\n";
|
143 |
+
/**/
|
144 |
+
if (is_array ($fields) && !empty ($fields))
|
145 |
+
foreach ($fields as $var => $val)
|
146 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
147 |
+
/**/
|
148 |
+
$msg .= "cv0: %%cv0%%\n";
|
149 |
+
$msg .= "cv1: %%cv1%%\n";
|
150 |
+
$msg .= "cv2: %%cv2%%\n";
|
151 |
+
$msg .= "cv3: %%cv3%%\n";
|
152 |
+
$msg .= "cv4: %%cv4%%\n";
|
153 |
+
$msg .= "cv5: %%cv5%%\n";
|
154 |
+
$msg .= "cv6: %%cv6%%\n";
|
155 |
+
$msg .= "cv7: %%cv7%%\n";
|
156 |
+
$msg .= "cv8: %%cv8%%\n";
|
157 |
+
$msg .= "cv9: %%cv9%%";
|
158 |
+
/**/
|
159 |
+
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_ds ($paypal["subscr_id"]), $msg)))
|
160 |
+
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
|
161 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
162 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
163 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
164 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
165 |
+
{
|
166 |
+
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
167 |
+
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
168 |
+
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
169 |
+
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
170 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
171 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
172 |
+
{
|
173 |
+
if (is_array ($fields) && !empty ($fields))
|
174 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
175 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
176 |
+
break;
|
177 |
+
/**/
|
178 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
179 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"])) as $recipient)
|
180 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_payment_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_payment_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
181 |
+
}
|
182 |
+
}
|
183 |
+
/**/
|
184 |
+
$paypal["s2member_log"][] = "Payment Notification Emails have been processed.";
|
185 |
+
}
|
186 |
+
/**/
|
187 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
188 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_payment", get_defined_vars ());
|
189 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
190 |
+
}
|
191 |
+
else /* Otherwise, we need to re-generate/store this IPN into a Transient Queue. Then re-process it on registration. */
|
192 |
+
{
|
193 |
+
$paypal["s2member_log"][] = "Skipping this IPN response, for now. The Subscr. ID is not associated with a registered Member.";
|
194 |
+
/**/
|
195 |
+
$ipn = array ("txn_type" => "subscr_payment"); /* Create a simulated IPN response for txn_type=subscr_payment. */
|
196 |
+
/**/
|
197 |
+
foreach ($paypal as $var => $val)
|
198 |
+
if (in_array ($var, array ("subscr_gateway", "subscr_id", "txn_id", "custom", "invoice", "mc_gross", "mc_currency", "tax", "payer_email", "first_name", "last_name", "item_name", "item_number", "option_name1", "option_selection1", "option_name2", "option_selection2")))
|
199 |
+
$ipn[$var] = $val;
|
200 |
+
/**/
|
201 |
+
$paypal["s2member_log"][] = "Re-generating. This IPN will go into a Transient Queue; and be re-processed during registration.";
|
202 |
+
/**/
|
203 |
+
set_transient ("s2m_" . md5 ("s2member_transient_ipn_subscr_payment_" . $paypal["subscr_id"]), $ipn, 43200);
|
204 |
+
}
|
205 |
+
}
|
206 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
207 |
+
{
|
208 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
209 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_payment|recurring_payment` ).";
|
210 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
211 |
+
}
|
212 |
+
/**/
|
213 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
214 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_payment", get_defined_vars ());
|
215 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
216 |
+
/**/
|
217 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level", $paypal, get_defined_vars ());
|
218 |
+
}
|
219 |
+
else
|
220 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level", false, get_defined_vars ());
|
221 |
+
}
|
222 |
+
}
|
223 |
+
}
|
224 |
+
?>
|
includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php
ADDED
@@ -0,0 +1,634 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract ($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^(web_accept|subscr_signup)$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& (!empty ($paypal["item_number"]) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (!empty ($paypal["subscr_id"]) || (!empty ($paypal["txn_id"]) && ($paypal["subscr_id"] = $paypal["txn_id"])))/**/
|
48 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
49 |
+
&& (!empty ($paypal["payer_email"]))/**/)
|
50 |
+
{
|
51 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
52 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup", get_defined_vars ());
|
53 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
54 |
+
/**/
|
55 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
56 |
+
{
|
57 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup` ).";
|
58 |
+
/**/
|
59 |
+
list ($paypal["level"], $paypal["ccaps"], $paypal["eotper"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
60 |
+
/**/
|
61 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
62 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
63 |
+
/**/
|
64 |
+
$paypal["period1"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
65 |
+
$paypal["mc_amount1"] = (strlen ($paypal["mc_amount1"]) && $paypal["mc_amount1"] > 0) ? $paypal["mc_amount1"] : "0.00"; /* "0.00". */
|
66 |
+
/**/
|
67 |
+
if (preg_match ("/^web_accept$/i", $paypal["txn_type"])) /* Conversions for Lifetime & Fixed-Term sales. */
|
68 |
+
{
|
69 |
+
$paypal["period3"] = ($paypal["eotper"]) ? $paypal["eotper"] : "1 L"; /* 1 Lifetime. */
|
70 |
+
$paypal["mc_amount3"] = $paypal["mc_gross"]; /* The "Buy Now" amount is the full gross. */
|
71 |
+
}
|
72 |
+
/**/
|
73 |
+
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
74 |
+
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
75 |
+
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
76 |
+
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
77 |
+
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
78 |
+
/**/
|
79 |
+
eval ('$ipn_signup_vars = $paypal; unset($ipn_signup_vars["s2member_log"]);'); /* Create array of IPN signup vars w/o s2member_log. */
|
80 |
+
/*
|
81 |
+
New Subscription with advanced update vars ( option_name1, option_selection1 )? These variables are used in Subscr. Modifications.
|
82 |
+
*/
|
83 |
+
if (preg_match ("/(referenc|associat|updat|upgrad)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) /* Advanced way to handle Subscription mods. */
|
84 |
+
/* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified.
|
85 |
+
PayPal® will not allow the `modify=1|2` parameter to be used in those scenarios, because technically there is no billing to update; only the account. */
|
86 |
+
{
|
87 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
88 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_w_update_vars", get_defined_vars ());
|
89 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
90 |
+
/**/
|
91 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup` ) w/ update vars.";
|
92 |
+
/**/
|
93 |
+
/* Check for both the old & new subscr_id's, just in case the Return routine already changed it. */
|
94 |
+
if (($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)
|
95 |
+
{
|
96 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
97 |
+
{
|
98 |
+
$processing = $modifying = $during = true; /* Yes, we ARE processing this. */
|
99 |
+
/**/
|
100 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
101 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_before_subscr_signup_w_update_vars", get_defined_vars ());
|
102 |
+
do_action ("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars (), "ipn-upgrade-downgrade", "modification", "s2member_level" . $paypal["level"]);
|
103 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
104 |
+
/**/
|
105 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
106 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
107 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
108 |
+
/**/
|
109 |
+
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
110 |
+
{
|
111 |
+
add_existing_user_to_blog (array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
112 |
+
$user = new WP_User ($user_id);
|
113 |
+
}
|
114 |
+
/**/
|
115 |
+
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
116 |
+
/**/
|
117 |
+
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
118 |
+
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
119 |
+
/**/
|
120 |
+
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
121 |
+
foreach ($user->allcaps as $cap => $cap_enabled)
|
122 |
+
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
123 |
+
$user->remove_cap ($ccap = $cap);
|
124 |
+
/**/
|
125 |
+
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
126 |
+
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
127 |
+
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
128 |
+
/**/
|
129 |
+
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
130 |
+
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
131 |
+
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
132 |
+
/**/
|
133 |
+
if (!get_user_option ("s2member_registration_ip", $user_id))
|
134 |
+
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
135 |
+
/**/
|
136 |
+
update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars);
|
137 |
+
/**/
|
138 |
+
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
139 |
+
delete_user_option ($user_id, "s2member_file_download_access_log");
|
140 |
+
/**/
|
141 |
+
if (preg_match ("/^web_accept$/i", $paypal["txn_type"]) && $paypal["eotper"])
|
142 |
+
{
|
143 |
+
update_user_option ($user_id, "s2member_auto_eot_time", /* Set exclusively by the IPN handler; to avoid duplicate extensions. */
|
144 |
+
($eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ("", "", "", $paypal["eotper"], "", get_user_option ("s2member_auto_eot_time", $user_id))));
|
145 |
+
$paypal["s2member_log"][] = "Automatic EOT ( End Of Term ) Time set to: " . date ("D M j, Y g:i:s a T", $eot_time) . ".";
|
146 |
+
}
|
147 |
+
else /* Otherwise, we need to clear the Auto-EOT Time. */
|
148 |
+
delete_user_option ($user_id, "s2member_auto_eot_time");
|
149 |
+
/**/
|
150 |
+
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
151 |
+
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
152 |
+
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
153 |
+
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
154 |
+
/**/
|
155 |
+
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
156 |
+
/**/
|
157 |
+
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
|
158 |
+
/**/
|
159 |
+
wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_modification_email_sbj", "Thank you! Your account has been updated.", get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", "Thank you! You've been updated to:\n" . $paypal["item_name"] . "\n\nPlease log back in now.\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8");
|
160 |
+
/**/
|
161 |
+
$paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
|
162 |
+
/**/
|
163 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
164 |
+
{
|
165 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
|
166 |
+
/**/
|
167 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
168 |
+
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
169 |
+
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
170 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
171 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
172 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
173 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
174 |
+
/**/
|
175 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
176 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
177 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
178 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
179 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
180 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
181 |
+
{
|
182 |
+
if (is_array ($fields) && !empty ($fields))
|
183 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
184 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
185 |
+
break;
|
186 |
+
/**/
|
187 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
188 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
189 |
+
}
|
190 |
+
/**/
|
191 |
+
$paypal["s2member_log"][] = "Modification Notification URLs have been processed.";
|
192 |
+
}
|
193 |
+
/**/
|
194 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
195 |
+
{
|
196 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Modification";
|
197 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
198 |
+
/**/
|
199 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
200 |
+
$msg .= "initial: %%initial%%\n";
|
201 |
+
$msg .= "regular: %%regular%%\n";
|
202 |
+
$msg .= "recurring: %%recurring%%\n";
|
203 |
+
$msg .= "initial_term: %%initial_term%%\n";
|
204 |
+
$msg .= "regular_term: %%regular_term%%\n";
|
205 |
+
$msg .= "item_number: %%item_number%%\n";
|
206 |
+
$msg .= "item_name: %%item_name%%\n";
|
207 |
+
$msg .= "first_name: %%first_name%%\n";
|
208 |
+
$msg .= "last_name: %%last_name%%\n";
|
209 |
+
$msg .= "full_name: %%full_name%%\n";
|
210 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
211 |
+
/**/
|
212 |
+
$msg .= "user_first_name: %%user_first_name%%\n";
|
213 |
+
$msg .= "user_last_name: %%user_last_name%%\n";
|
214 |
+
$msg .= "user_full_name: %%user_full_name%%\n";
|
215 |
+
$msg .= "user_email: %%user_email%%\n";
|
216 |
+
$msg .= "user_login: %%user_login%%\n";
|
217 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
218 |
+
$msg .= "user_id: %%user_id%%\n";
|
219 |
+
/**/
|
220 |
+
if (is_array ($fields) && !empty ($fields))
|
221 |
+
foreach ($fields as $var => $val)
|
222 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
223 |
+
/**/
|
224 |
+
$msg .= "cv0: %%cv0%%\n";
|
225 |
+
$msg .= "cv1: %%cv1%%\n";
|
226 |
+
$msg .= "cv2: %%cv2%%\n";
|
227 |
+
$msg .= "cv3: %%cv3%%\n";
|
228 |
+
$msg .= "cv4: %%cv4%%\n";
|
229 |
+
$msg .= "cv5: %%cv5%%\n";
|
230 |
+
$msg .= "cv6: %%cv6%%\n";
|
231 |
+
$msg .= "cv7: %%cv7%%\n";
|
232 |
+
$msg .= "cv8: %%cv8%%\n";
|
233 |
+
$msg .= "cv9: %%cv9%%";
|
234 |
+
/**/
|
235 |
+
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_ds ($paypal["subscr_id"]), $msg)))
|
236 |
+
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)) && ($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)))
|
237 |
+
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
238 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
239 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
240 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
241 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
242 |
+
/**/
|
243 |
+
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
244 |
+
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
245 |
+
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
246 |
+
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
247 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
248 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
249 |
+
{
|
250 |
+
if (is_array ($fields) && !empty ($fields))
|
251 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
252 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
253 |
+
break;
|
254 |
+
/**/
|
255 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
256 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"])) as $recipient)
|
257 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_modification_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
258 |
+
}
|
259 |
+
/**/
|
260 |
+
$paypal["s2member_log"][] = "Modification Notification Emails have been processed.";
|
261 |
+
}
|
262 |
+
/**/
|
263 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
264 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_w_update_vars", get_defined_vars ());
|
265 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
266 |
+
}
|
267 |
+
else
|
268 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
269 |
+
}
|
270 |
+
else
|
271 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB. Please check the on0 and os0 variables in your Button Code.";
|
272 |
+
/**/
|
273 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
274 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_w_update_vars", get_defined_vars ());
|
275 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
276 |
+
}
|
277 |
+
/*
|
278 |
+
New Subscription. Normal Subscription signup, we are not updating anything for a past Subscription.
|
279 |
+
*/
|
280 |
+
else /* Else this is a normal Subscription signup, we are not updating anything. */
|
281 |
+
{
|
282 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
283 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_wo_update_vars", get_defined_vars ());
|
284 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
285 |
+
/**/
|
286 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup` ) w/o update vars.";
|
287 |
+
/**/
|
288 |
+
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"])))
|
289 |
+
{
|
290 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
291 |
+
/**/
|
292 |
+
$sbj = preg_replace ("/%%registration_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($registration_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "signup_email_subject"]);
|
293 |
+
$msg = preg_replace ("/%%registration_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($registration_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "signup_email_message"]);
|
294 |
+
$rec = preg_replace ("/%%registration_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($registration_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "signup_email_recipients"]);
|
295 |
+
/**/
|
296 |
+
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_ds ($paypal["subscr_id"]), $rec)))
|
297 |
+
if (($rec = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $rec)) && ($rec = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $rec)))
|
298 |
+
if (($rec = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $rec)) && ($rec = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $rec)))
|
299 |
+
if (($rec = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $rec)) && ($rec = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $rec)))
|
300 |
+
if (($rec = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $rec)) && ($rec = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $rec)))
|
301 |
+
if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
|
302 |
+
if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
|
303 |
+
if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) /* **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. ( ex. "N\"ame" <email> ). */
|
304 |
+
if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
|
305 |
+
if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $rec)))
|
306 |
+
/**/
|
307 |
+
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_ds ($paypal["subscr_id"]), $sbj)))
|
308 |
+
if (($sbj = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $sbj)) && ($sbj = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $sbj)))
|
309 |
+
if (($sbj = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $sbj)) && ($sbj = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $sbj)))
|
310 |
+
if (($sbj = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $sbj)) && ($sbj = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $sbj)))
|
311 |
+
if (($sbj = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $sbj)) && ($sbj = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $sbj)))
|
312 |
+
if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
|
313 |
+
if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
|
314 |
+
if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
|
315 |
+
if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
|
316 |
+
if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $sbj)))
|
317 |
+
/**/
|
318 |
+
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_ds ($paypal["subscr_id"]), $msg)))
|
319 |
+
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)))
|
320 |
+
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
321 |
+
if (($msg = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $msg)) && ($msg = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $msg)))
|
322 |
+
if (($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)) && ($msg = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $msg)))
|
323 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
324 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
325 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
326 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
327 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
328 |
+
/**/
|
329 |
+
if (($recipients = preg_split ("/;+/", preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
330 |
+
{
|
331 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep ($recipients) as $recipient) /* Go through the full list of recipients. */
|
332 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_signup_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_signup_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
333 |
+
/**/
|
334 |
+
$paypal["s2member_log"][] = "Signup Confirmation Email sent to: " . implode ("; ", $recipients) . ".";
|
335 |
+
}
|
336 |
+
/**/
|
337 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
338 |
+
{
|
339 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_urls"]) as $url)
|
340 |
+
/**/
|
341 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
342 |
+
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
343 |
+
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
344 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
345 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
346 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
347 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
348 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
349 |
+
/**/
|
350 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
351 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
352 |
+
/**/
|
353 |
+
$paypal["s2member_log"][] = "Signup Notification URLs have been processed.";
|
354 |
+
}
|
355 |
+
/**/
|
356 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
357 |
+
{
|
358 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Signup";
|
359 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
360 |
+
/**/
|
361 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
362 |
+
$msg .= "initial: %%initial%%\n";
|
363 |
+
$msg .= "regular: %%regular%%\n";
|
364 |
+
$msg .= "recurring: %%recurring%%\n";
|
365 |
+
$msg .= "initial_term: %%initial_term%%\n";
|
366 |
+
$msg .= "regular_term: %%regular_term%%\n";
|
367 |
+
$msg .= "item_number: %%item_number%%\n";
|
368 |
+
$msg .= "item_name: %%item_name%%\n";
|
369 |
+
$msg .= "first_name: %%first_name%%\n";
|
370 |
+
$msg .= "last_name: %%last_name%%\n";
|
371 |
+
$msg .= "full_name: %%full_name%%\n";
|
372 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
373 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
374 |
+
/**/
|
375 |
+
$msg .= "cv0: %%cv0%%\n";
|
376 |
+
$msg .= "cv1: %%cv1%%\n";
|
377 |
+
$msg .= "cv2: %%cv2%%\n";
|
378 |
+
$msg .= "cv3: %%cv3%%\n";
|
379 |
+
$msg .= "cv4: %%cv4%%\n";
|
380 |
+
$msg .= "cv5: %%cv5%%\n";
|
381 |
+
$msg .= "cv6: %%cv6%%\n";
|
382 |
+
$msg .= "cv7: %%cv7%%\n";
|
383 |
+
$msg .= "cv8: %%cv8%%\n";
|
384 |
+
$msg .= "cv9: %%cv9%%";
|
385 |
+
/**/
|
386 |
+
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_ds ($paypal["subscr_id"]), $msg)))
|
387 |
+
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)) && ($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)))
|
388 |
+
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
389 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
390 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
391 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
392 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
393 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
394 |
+
/**/
|
395 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
396 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_recipients"])) as $recipient)
|
397 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_signup_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_signup_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
398 |
+
/**/
|
399 |
+
$paypal["s2member_log"][] = "Signup Notification Emails have been processed.";
|
400 |
+
}
|
401 |
+
/**/
|
402 |
+
if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
403 |
+
{
|
404 |
+
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_ds ($paypal["subscr_id"]), $code)))
|
405 |
+
if (($code = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $code)) && ($code = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $code)) && ($code = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $code)))
|
406 |
+
if (($code = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $code)) && ($code = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $code)))
|
407 |
+
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
408 |
+
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
409 |
+
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
410 |
+
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
411 |
+
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
412 |
+
/**/
|
413 |
+
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
414 |
+
{
|
415 |
+
$paypal["s2member_log"][] = "Storing Signup Tracking Codes into a Transient Queue. These will be processed on-site.";
|
416 |
+
set_transient ("s2m_" . md5 ("s2member_transient_signup_tracking_codes_" . $paypal["subscr_id"]), $code, 43200);
|
417 |
+
}
|
418 |
+
}
|
419 |
+
/**/
|
420 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
421 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_wo_update_vars", get_defined_vars ());
|
422 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
423 |
+
}
|
424 |
+
else
|
425 |
+
$paypal["s2member_log"][] = "Unable to generate Registration URL for Membership Access. Possible data corruption within the IPN response.";
|
426 |
+
/**/
|
427 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
428 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_wo_update_vars", get_defined_vars ());
|
429 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
430 |
+
}
|
431 |
+
/**/
|
432 |
+
if ($processing && $_GET["s2member_paypal_proxy"] && ($url = $_GET["s2member_paypal_proxy_return_url"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"]))) /* A Proxy is requesting a Return URL? */
|
433 |
+
{
|
434 |
+
if (($user_id && 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))
|
435 |
+
{
|
436 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
437 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
438 |
+
/**/
|
439 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
440 |
+
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
441 |
+
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
442 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
443 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
444 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
445 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
446 |
+
if (($url = preg_replace ("/%%modification%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ((int)$modifying)), $url)))
|
447 |
+
{
|
448 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
449 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
450 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
451 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
452 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
453 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
454 |
+
{
|
455 |
+
if (is_array ($fields) && !empty ($fields))
|
456 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
457 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
458 |
+
break;
|
459 |
+
/**/
|
460 |
+
if (($url = trim ($url))) /* Preserve remaining replacements. */
|
461 |
+
/* Because the parent routine may perform replacements too. */
|
462 |
+
$paypal["s2member_paypal_proxy_return_url"] = $url;
|
463 |
+
}
|
464 |
+
}
|
465 |
+
}
|
466 |
+
/**/
|
467 |
+
$paypal["s2member_log"][] = "Subscr. Return ( `modification=" . (int)$modifying . "` ), a Proxy Return URL is ready.";
|
468 |
+
}
|
469 |
+
/**/
|
470 |
+
if ($processing /* Process a payment now? Special cases for web_accept and/or Proxy requests with `subscr-signup-as-subscr-payment`. */
|
471 |
+
&& (preg_match ("/^web_accept$/i", $paypal["txn_type"]) || ($_GET["s2member_paypal_proxy"] && preg_match ("/subscr-signup-as-subscr-payment/", $_GET["s2member_paypal_proxy_use"]) && $paypal["txn_id"] && $paypal["mc_gross"] > 0))/**/
|
472 |
+
&& (($user_id && 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)))
|
473 |
+
{
|
474 |
+
$paypal["s2member_log"][] = "User exists. Handling `payment` for Subscription via ( `" . ((preg_match ("/^web_accept$/i", $paypal["txn_type"])) ? "web_accept" : "subscr-signup-as-subscr-payment") . "` ).";
|
475 |
+
/**/
|
476 |
+
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
477 |
+
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
478 |
+
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
479 |
+
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
480 |
+
/**/
|
481 |
+
if (!get_user_option ("s2member_first_payment_txn_id", $user_id)) /* 1st payment? */
|
482 |
+
update_user_option ($user_id, "s2member_first_payment_txn_id", $paypal["txn_id"]);
|
483 |
+
/**/
|
484 |
+
update_user_option ($user_id, "s2member_last_payment_time", time ()); /* Update the last payment time. */
|
485 |
+
/**/
|
486 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
487 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
488 |
+
/**/
|
489 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
490 |
+
{
|
491 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
|
492 |
+
/**/
|
493 |
+
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
494 |
+
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
495 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
496 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
497 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
498 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
499 |
+
{
|
500 |
+
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
501 |
+
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
502 |
+
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
503 |
+
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
504 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
505 |
+
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
506 |
+
{
|
507 |
+
if (is_array ($fields) && !empty ($fields))
|
508 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
509 |
+
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
510 |
+
break;
|
511 |
+
/**/
|
512 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
513 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
514 |
+
}
|
515 |
+
}
|
516 |
+
/**/
|
517 |
+
$paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
|
518 |
+
}
|
519 |
+
/**/
|
520 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
521 |
+
{
|
522 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Payment";
|
523 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
524 |
+
/**/
|
525 |
+
$msg .= "subscr_id: %%subscr_id%%\n";
|
526 |
+
$msg .= "amount: %%amount%%\n";
|
527 |
+
$msg .= "txn_id: %%txn_id%%\n";
|
528 |
+
$msg .= "item_number: %%item_number%%\n";
|
529 |
+
$msg .= "item_name: %%item_name%%\n";
|
530 |
+
$msg .= "first_name: %%first_name%%\n";
|
531 |
+
$msg .= "last_name: %%last_name%%\n";
|
532 |
+
$msg .= "full_name: %%full_name%%\n";
|
533 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
534 |
+
/**/
|
535 |
+
$msg .= "user_first_name: %%user_first_name%%\n";
|
536 |
+
$msg .= "user_last_name: %%user_last_name%%\n";
|
537 |
+
$msg .= "user_full_name: %%user_full_name%%\n";
|
538 |
+
$msg .= "user_email: %%user_email%%\n";
|
539 |
+
$msg .= "user_login: %%user_login%%\n";
|
540 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
541 |
+
$msg .= "user_id: %%user_id%%\n";
|
542 |
+
/**/
|
543 |
+
if (is_array ($fields) && !empty ($fields))
|
544 |
+
foreach ($fields as $var => $val)
|
545 |
+
$msg .= $var . ": %%" . $var . "%%\n";
|
546 |
+
/**/
|
547 |
+
$msg .= "cv0: %%cv0%%\n";
|
548 |
+
$msg .= "cv1: %%cv1%%\n";
|
549 |
+
$msg .= "cv2: %%cv2%%\n";
|
550 |
+
$msg .= "cv3: %%cv3%%\n";
|
551 |
+
$msg .= "cv4: %%cv4%%\n";
|
552 |
+
$msg .= "cv5: %%cv5%%\n";
|
553 |
+
$msg .= "cv6: %%cv6%%\n";
|
554 |
+
$msg .= "cv7: %%cv7%%\n";
|
555 |
+
$msg .= "cv8: %%cv8%%\n";
|
556 |
+
$msg .= "cv9: %%cv9%%";
|
557 |
+
/**/
|
558 |
+
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_ds ($paypal["subscr_id"]), $msg)))
|
559 |
+
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
|
560 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
561 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
562 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
563 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
564 |
+
{
|
565 |
+
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
566 |
+
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
567 |
+
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
568 |
+
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
569 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
570 |
+
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
571 |
+
{
|
572 |
+
if (is_array ($fields) && !empty ($fields))
|
573 |
+
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
574 |
+
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
575 |
+
break;
|
576 |
+
/**/
|
577 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
578 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"])) as $recipient)
|
579 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_payment_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_payment_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
580 |
+
}
|
581 |
+
}
|
582 |
+
/**/
|
583 |
+
$paypal["s2member_log"][] = "Payment Notification Emails have been processed.";
|
584 |
+
}
|
585 |
+
}
|
586 |
+
else if ($processing /* Process a payment now? Special cases for web_accept and/or Proxy requests with `subscr-signup-as-subscr-payment`. */
|
587 |
+
&& (preg_match ("/^web_accept$/i", $paypal["txn_type"]) || ($_GET["s2member_paypal_proxy"] && preg_match ("/subscr-signup-as-subscr-payment/", $_GET["s2member_paypal_proxy_use"]) && $paypal["txn_id"] && $paypal["mc_gross"] > 0)))
|
588 |
+
{
|
589 |
+
$paypal["s2member_log"][] = "Storing `payment` for Subscription via ( `" . ((preg_match ("/^web_accept$/i", $paypal["txn_type"])) ? "web_accept" : "subscr-signup-as-subscr-payment") . "` ).";
|
590 |
+
/**/
|
591 |
+
$ipn = array ("txn_type" => "subscr_payment"); /* Create a simulated IPN response for txn_type=subscr_payment. */
|
592 |
+
/**/
|
593 |
+
foreach ($paypal as $var => $val)
|
594 |
+
if (in_array ($var, array ("subscr_gateway", "subscr_id", "txn_id", "custom", "invoice", "mc_gross", "mc_currency", "tax", "payer_email", "first_name", "last_name", "item_name", "item_number", "option_name1", "option_selection1", "option_name2", "option_selection2")))
|
595 |
+
$ipn[$var] = $val;
|
596 |
+
/**/
|
597 |
+
$paypal["s2member_log"][] = "Creating an IPN response for `subscr_payment`. This will go into a Transient Queue; and be processed during registration.";
|
598 |
+
/**/
|
599 |
+
set_transient ("s2m_" . md5 ("s2member_transient_ipn_subscr_payment_" . $paypal["subscr_id"]), $ipn, 43200);
|
600 |
+
}
|
601 |
+
/**/
|
602 |
+
if ($processing /* Store signup vars now? If the User already exists in the database, we can go ahead and store these right now. */
|
603 |
+
&& (($user_id && 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 |
+
$paypal["s2member_log"][] = "Storing IPN signup vars now. These are associated with a User's account record; for future reference.";
|
606 |
+
/**/
|
607 |
+
update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars);
|
608 |
+
}
|
609 |
+
else if ($processing) /* Otherwise, we can store these into a Transient Queue for registration processing. */
|
610 |
+
{
|
611 |
+
$paypal["s2member_log"][] = "Storing IPN signup vars into a Transient Queue. These will be processed on registration.";
|
612 |
+
/**/
|
613 |
+
set_transient ("s2m_" . md5 ("s2member_transient_ipn_signup_vars_" . $paypal["subscr_id"]), $ipn_signup_vars, 43200);
|
614 |
+
}
|
615 |
+
}
|
616 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
617 |
+
{
|
618 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
619 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup` ).";
|
620 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
621 |
+
}
|
622 |
+
/**/
|
623 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
624 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup", get_defined_vars ());
|
625 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
626 |
+
/**/
|
627 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level", $paypal, get_defined_vars ());
|
628 |
+
}
|
629 |
+
else
|
630 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level", false, get_defined_vars ());
|
631 |
+
}
|
632 |
+
}
|
633 |
+
}
|
634 |
+
?>
|
includes/classes/paypal-notify-in-virtual-terminal.inc.php
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_virtual_terminal"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_virtual_terminal
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^virtual_terminal$/i", $paypal["txn_type"]))/**/
|
44 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
45 |
+
&& (!empty ($paypal["txn_id"]))/**/)
|
46 |
+
{
|
47 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
48 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_virtual_terminal", get_defined_vars ());
|
49 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
50 |
+
/**/
|
51 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
52 |
+
{
|
53 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `virtual_terminal` ).";
|
54 |
+
/**/
|
55 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
56 |
+
/**/
|
57 |
+
$paypal["s2member_log"][] = "The `txn_type` does not require any action on the part of s2Member.";
|
58 |
+
/**/
|
59 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
60 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_virtual_terminal", get_defined_vars ());
|
61 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
62 |
+
}
|
63 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
64 |
+
{
|
65 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
66 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `virtual_terminal` ).";
|
67 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
68 |
+
}
|
69 |
+
/**/
|
70 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
71 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_virtual_terminal", get_defined_vars ());
|
72 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
73 |
+
/**/
|
74 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_virtual_terminal", $paypal, get_defined_vars ());
|
75 |
+
}
|
76 |
+
else
|
77 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_virtual_terminal", false, get_defined_vars ());
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
81 |
+
?>
|
includes/classes/paypal-notify-in-web-accept-sp.inc.php
ADDED
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_web_accept_sp"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_notify_in_web_accept_sp
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® IPN handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_notify_in::paypal_notify()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^web_accept$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& (!empty ($paypal["item_number"]) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
48 |
+
&& (!empty ($paypal["payer_email"])) && (!empty ($paypal["txn_id"]))/**/)
|
49 |
+
{
|
50 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
51 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_before_sp_access", get_defined_vars ());
|
52 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
53 |
+
/**/
|
54 |
+
if (!get_transient ($transient_ipn = "s2m_ipn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_ipn, time (), 31556926 * 10))
|
55 |
+
{
|
56 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.";
|
57 |
+
/**/
|
58 |
+
list (, $paypal["sp_ids"], $paypal["hours"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
59 |
+
/**/
|
60 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
61 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
62 |
+
/**/
|
63 |
+
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"])))
|
64 |
+
{
|
65 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
66 |
+
/**/
|
67 |
+
if (preg_match ("/(referenc|associat)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) /* Associating this purchase with a Member? */
|
68 |
+
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["option_selection1"], $paypal["option_selection1"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
69 |
+
{
|
70 |
+
$sp_references = (array)get_user_option ("s2member_sp_references", $user_id);
|
71 |
+
$_sp_reference = array ("time" => time (), "ids" => $paypal["sp_ids"], "hours" => $paypal["hours"], "url" => $sp_access_url);
|
72 |
+
$sp_references = c_ws_plugin__s2member_utils_arrays::array_unique (array_merge ($sp_references, $_sp_reference));
|
73 |
+
update_user_option ($user_id, "s2member_sp_references", $sp_references);
|
74 |
+
/**/
|
75 |
+
$paypal["s2member_log"][] = "Specific Post/Page ~ Sale associated with User ID: " . $user_id . ".";
|
76 |
+
}
|
77 |
+
/**/
|
78 |
+
$sbj = preg_replace ("/%%sp_access_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($sp_access_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "sp_email_subject"]);
|
79 |
+
$sbj = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $sbj);
|
80 |
+
/**/
|
81 |
+
$msg = preg_replace ("/%%sp_access_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($sp_access_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "sp_email_message"]);
|
82 |
+
$msg = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $msg);
|
83 |
+
/**/
|
84 |
+
$rec = preg_replace ("/%%sp_access_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($sp_access_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "sp_email_recipients"]);
|
85 |
+
$rec = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $rec);
|
86 |
+
/**/
|
87 |
+
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_ds ($paypal["txn_id"]), $rec)))
|
88 |
+
if (($rec = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $rec))) /* Full amount of the payment, before fee is subtracted. */
|
89 |
+
if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
|
90 |
+
if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
|
91 |
+
if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) /* **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. ( ex. "N\"ame" <email> ). */
|
92 |
+
if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
|
93 |
+
if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $rec)))
|
94 |
+
/**/
|
95 |
+
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_ds ($paypal["txn_id"]), $sbj)))
|
96 |
+
if (($sbj = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $sbj))) /* Full amount of the payment, before fee is subtracted. */
|
97 |
+
if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
|
98 |
+
if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
|
99 |
+
if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
|
100 |
+
if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
|
101 |
+
if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $sbj)))
|
102 |
+
/**/
|
103 |
+
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_ds ($paypal["txn_id"]), $msg)))
|
104 |
+
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg))) /* Full amount of the payment, before fee is subtracted. */
|
105 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
106 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
107 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
108 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
109 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
110 |
+
/**/
|
111 |
+
if (($recipients = preg_split ("/;+/", preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
112 |
+
{
|
113 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep ($recipients) as $recipient) /* Go through the full list of recipients. */
|
114 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_sp_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_sp_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
115 |
+
/**/
|
116 |
+
$paypal["s2member_log"][] = "Specific Post/Page Confirmation Email sent to: " . implode ("; ", $recipients) . ".";
|
117 |
+
}
|
118 |
+
/**/
|
119 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_urls"])
|
120 |
+
{
|
121 |
+
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_urls"]) as $url)
|
122 |
+
/**/
|
123 |
+
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_ds (rawurlencode ($sp_access_url)), $url)))
|
124 |
+
if (($url = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours")))), $url)))
|
125 |
+
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
126 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
127 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
128 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
129 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
130 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
131 |
+
/**/
|
132 |
+
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
133 |
+
c_ws_plugin__s2member_utils_urls::remote ($url);
|
134 |
+
/**/
|
135 |
+
$paypal["s2member_log"][] = "Specific Post/Page ~ Sale Notification URLs have been processed.";
|
136 |
+
}
|
137 |
+
/**/
|
138 |
+
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_recipients"])
|
139 |
+
{
|
140 |
+
$msg = $sbj = "( s2Member / API Notification Email ) - Specific Post/Page ~ Sale";
|
141 |
+
$msg .= "\n\n"; /* Spacing in the message body. */
|
142 |
+
/**/
|
143 |
+
$msg .= "sp_access_url: %%sp_access_url%%\n";
|
144 |
+
$msg .= "sp_access_exp: %%sp_access_exp%%\n";
|
145 |
+
$msg .= "amount: %%amount%%\n";
|
146 |
+
$msg .= "txn_id: %%txn_id%%\n";
|
147 |
+
$msg .= "item_number: %%item_number%%\n";
|
148 |
+
$msg .= "item_name: %%item_name%%\n";
|
149 |
+
$msg .= "first_name: %%first_name%%\n";
|
150 |
+
$msg .= "last_name: %%last_name%%\n";
|
151 |
+
$msg .= "full_name: %%full_name%%\n";
|
152 |
+
$msg .= "payer_email: %%payer_email%%\n";
|
153 |
+
$msg .= "user_ip: %%user_ip%%\n";
|
154 |
+
/**/
|
155 |
+
$msg .= "cv0: %%cv0%%\n";
|
156 |
+
$msg .= "cv1: %%cv1%%\n";
|
157 |
+
$msg .= "cv2: %%cv2%%\n";
|
158 |
+
$msg .= "cv3: %%cv3%%\n";
|
159 |
+
$msg .= "cv4: %%cv4%%\n";
|
160 |
+
$msg .= "cv5: %%cv5%%\n";
|
161 |
+
$msg .= "cv6: %%cv6%%\n";
|
162 |
+
$msg .= "cv7: %%cv7%%\n";
|
163 |
+
$msg .= "cv8: %%cv8%%\n";
|
164 |
+
$msg .= "cv9: %%cv9%%";
|
165 |
+
/**/
|
166 |
+
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_ds ($sp_access_url), $msg)))
|
167 |
+
if (($msg = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $msg)))
|
168 |
+
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
|
169 |
+
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
170 |
+
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
171 |
+
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
172 |
+
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
173 |
+
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
174 |
+
/**/
|
175 |
+
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
176 |
+
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_recipients"])) as $recipient)
|
177 |
+
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_sp_sale_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_sp_sale_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
178 |
+
/**/
|
179 |
+
$paypal["s2member_log"][] = "Specific Post/Page ~ Sale Notification Emails have been processed.";
|
180 |
+
}
|
181 |
+
/**/
|
182 |
+
if ($processing && $_GET["s2member_paypal_proxy"] && ($url = $_GET["s2member_paypal_proxy_return_url"])) /* A Proxy is requesting a Return URL for this transaction? */
|
183 |
+
{
|
184 |
+
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_ds (rawurlencode ($sp_access_url)), $url)))
|
185 |
+
if (($url = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours")))), $url)))
|
186 |
+
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
187 |
+
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
188 |
+
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
189 |
+
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
190 |
+
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
191 |
+
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
192 |
+
/**/
|
193 |
+
if (($url = trim ($url))) /* Preserve Remaining replacements. */
|
194 |
+
/* Because the parent routine may perform replacements too. */
|
195 |
+
$paypal["s2member_paypal_proxy_return_url"] = $url;
|
196 |
+
/**/
|
197 |
+
$paypal["s2member_log"][] = "Specific Post/Page Return, a Proxy Return URL is ready.";
|
198 |
+
}
|
199 |
+
/**/
|
200 |
+
if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_tracking_codes"]))
|
201 |
+
{
|
202 |
+
if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $code)) && ($code = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $code)))
|
203 |
+
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
204 |
+
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
205 |
+
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
206 |
+
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
207 |
+
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
208 |
+
/**/
|
209 |
+
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
210 |
+
{
|
211 |
+
$paypal["s2member_log"][] = "Storing Specific Post/Page Tracking Codes into a Transient Queue. These will be processed on-site.";
|
212 |
+
set_transient ("s2m_" . md5 ("s2member_transient_sp_tracking_codes_" . $paypal["txn_id"]), $code, 43200);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
/**/
|
216 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
217 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_during_sp_access", get_defined_vars ());
|
218 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
219 |
+
}
|
220 |
+
else
|
221 |
+
$paypal["s2member_log"][] = "Unable to generate Access Link for Specific Post/Page Access. Does your Leading Post/Page still exist?";
|
222 |
+
}
|
223 |
+
else /* Else, this is a duplicate IPN. Must stop here. */
|
224 |
+
{
|
225 |
+
$paypal["s2member_log"][] = "Not processing. Duplicate IPN.";
|
226 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.";
|
227 |
+
$paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
|
228 |
+
}
|
229 |
+
/**/
|
230 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
231 |
+
do_action ("ws_plugin__s2member_during_paypal_notify_after_sp_access", get_defined_vars ());
|
232 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
233 |
+
/**/
|
234 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_web_accept_sp", $paypal, get_defined_vars ());
|
235 |
+
}
|
236 |
+
else
|
237 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_notify_in_web_accept_sp", false, get_defined_vars ());
|
238 |
+
}
|
239 |
+
}
|
240 |
+
}
|
241 |
+
?>
|
includes/classes/paypal-notify-in.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in"))
|
21 |
{
|
@@ -46,9 +46,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in"))
|
|
46 |
* @attaches-to: ``add_action("init");``
|
47 |
*
|
48 |
* @return null Or exits script execution after handling IPN procesing.
|
49 |
-
*
|
50 |
-
* @todo Break this HUGE routine apart into logical class methods.
|
51 |
-
* @todo Optimize with ``empty()`` and ``isset()``.
|
52 |
*/
|
53 |
public static function paypal_notify ()
|
54 |
{
|
@@ -56,2044 +53,119 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in"))
|
|
56 |
/**/
|
57 |
do_action ("ws_plugin__s2member_before_paypal_notify", get_defined_vars ());
|
58 |
/**/
|
59 |
-
if (!empty ($_GET["s2member_paypal_notify"]) && ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"] || $_GET["s2member_paypal_proxy"]))
|
60 |
{
|
61 |
-
@ignore_user_abort(true); /* Important. Continue processing even if/when the connection is broken by the sending party. */
|
62 |
/**/
|
63 |
include_once ABSPATH . "wp-admin/includes/admin.php"; /* Get administrative functions. Needed for `wp_delete_user()`. */
|
64 |
/**/
|
65 |
c_ws_plugin__s2member_email_configs::email_config_release (); /* Release Filters on wp_mail() / From: headers. */
|
66 |
/**/
|
67 |
-
if (is_array ($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars ()) && ($_paypal = $paypal))
|
68 |
{
|
69 |
$paypal["s2member_log"][] = "IPN received on: " . date ("D M j, Y g:i:s a T");
|
70 |
-
$paypal["s2member_log"][] = "s2Member POST vars verified " . (($paypal["proxy_verified"]) ? "with a Proxy Key" : "through a POST back to PayPal®.");
|
71 |
/**/
|
72 |
$payment_status_issues = "/^(failed|denied|expired|refunded|partially_refunded|reversed|reversal|canceled_reversal|voided)$/i";
|
73 |
/**/
|
74 |
-
$paypal["subscr_gateway"] = ($_GET["s2member_paypal_proxy"]) ? $_GET["s2member_paypal_proxy"] : "paypal";
|
|
|
|
|
|
|
75 |
/**/
|
76 |
-
$paypal["custom"]
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
if (preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", $paypal["custom"]))
|
82 |
-
{ /* The business address validation was removed from this routine, because PayPal® always fills that with the primary
|
83 |
-
email address. In cases where an alternate PayPal® address is being paid, validation was not possible. */
|
84 |
-
$paypal["s2member_log"][] = "s2Member originating domain ( _SERVER[HTTP_HOST] ) validated.";
|
85 |
-
/*
|
86 |
-
Custom conditionals can be applied by Filters.
|
87 |
-
*/
|
88 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
89 |
if (!apply_filters ("ws_plugin__s2member_during_paypal_notify_conditionals", false, get_defined_vars ()))
|
90 |
{
|
91 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
else if (
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as express_checkout.";
|
135 |
-
/**/
|
136 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
137 |
-
/**/
|
138 |
-
$paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
|
139 |
-
$paypal["s2member_log"][] = "s2Member Pro handles Express Checkout events on-site, with an IPN proxy.";
|
140 |
-
/**/
|
141 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
142 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_express_checkout", get_defined_vars ());
|
143 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
144 |
-
/**/
|
145 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
146 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_express_checkout", get_defined_vars ());
|
147 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
148 |
-
}
|
149 |
-
/*
|
150 |
-
Cart ( Line Item ) transactions.
|
151 |
-
This is not really necessary. It is only here because this txn_type could
|
152 |
-
be necessary in a future release of s2Member. For now, it's just a fill-in.
|
153 |
-
These Hooks/Filters will remain, so you can use them now; if you need to.
|
154 |
-
*/
|
155 |
-
else if (/**/(preg_match ("/^cart$/i", $paypal["txn_type"]))/**/
|
156 |
-
&& (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
157 |
-
&& ($paypal["txn_id"])/**/)
|
158 |
-
{
|
159 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
160 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_cart", get_defined_vars ());
|
161 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
162 |
-
/**/
|
163 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as cart.";
|
164 |
-
/**/
|
165 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
166 |
-
/**/
|
167 |
-
$paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
|
168 |
-
$paypal["s2member_log"][] = "s2Member Pro handles Cart events on-site, with an IPN proxy.";
|
169 |
-
/**/
|
170 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
171 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_cart", get_defined_vars ());
|
172 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
173 |
-
/**/
|
174 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
175 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_cart", get_defined_vars ());
|
176 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
177 |
-
}
|
178 |
-
/*
|
179 |
-
Send Money / Mobile transactions.
|
180 |
-
This is not really necessary. It is only here because this txn_type could
|
181 |
-
be necessary in a future release of s2Member. For now, it's just a fill-in.
|
182 |
-
These Hooks/Filters will remain, so you can use them now; if you need to.
|
183 |
-
*/
|
184 |
-
else if (/**/(preg_match ("/^send_money$/i", $paypal["txn_type"]))/**/
|
185 |
-
&& (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
186 |
-
&& ($paypal["txn_id"])/**/)
|
187 |
-
{
|
188 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
189 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_send_money", get_defined_vars ());
|
190 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
191 |
-
/**/
|
192 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as send_money.";
|
193 |
-
/**/
|
194 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
195 |
-
/**/
|
196 |
-
$paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
|
197 |
-
/**/
|
198 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
199 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_send_money", get_defined_vars ());
|
200 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
201 |
-
/**/
|
202 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
203 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_send_money", get_defined_vars ());
|
204 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
205 |
-
}
|
206 |
-
/*
|
207 |
-
Specific Post/Page Access ~ Sales.
|
208 |
-
*/
|
209 |
-
else if (/**/(preg_match ("/^web_accept$/i", $paypal["txn_type"]))/**/
|
210 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $paypal["item_number"]))/**/
|
211 |
-
&& (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
212 |
-
&& ($paypal["payer_email"] && $paypal["txn_id"])/**/)
|
213 |
-
{
|
214 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
215 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_sp_access", get_defined_vars ());
|
216 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
217 |
-
/**/
|
218 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept) for Specific Post/Page Access.";
|
219 |
-
/**/
|
220 |
-
list (, $paypal["sp_ids"], $paypal["hours"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
221 |
-
/**/
|
222 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
223 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
224 |
-
/**/
|
225 |
-
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"])))
|
226 |
-
{
|
227 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
228 |
-
/**/
|
229 |
-
if (preg_match ("/(referenc|associat)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) /* Associating this purchase with a Member? */
|
230 |
-
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["option_selection1"], $paypal["option_selection1"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
231 |
-
{
|
232 |
-
$sp_references = (array)get_user_option ("s2member_sp_references", $user_id);
|
233 |
-
$_sp_reference = array ("time" => time (), "ids" => $paypal["sp_ids"], "hours" => $paypal["hours"], "url" => $sp_access_url);
|
234 |
-
$sp_references = c_ws_plugin__s2member_utils_arrays::array_unique (array_merge ($sp_references, $_sp_reference));
|
235 |
-
update_user_option ($user_id, "s2member_sp_references", $sp_references);
|
236 |
-
/**/
|
237 |
-
$paypal["s2member_log"][] = "Specific Post/Page ~ Sale associated with User ID: " . $user_id . ".";
|
238 |
-
}
|
239 |
-
/**/
|
240 |
-
$sbj = preg_replace ("/%%sp_access_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($sp_access_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "sp_email_subject"]);
|
241 |
-
$sbj = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $sbj);
|
242 |
-
/**/
|
243 |
-
$msg = preg_replace ("/%%sp_access_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($sp_access_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "sp_email_message"]);
|
244 |
-
$msg = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $msg);
|
245 |
-
/**/
|
246 |
-
$rec = preg_replace ("/%%sp_access_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($sp_access_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "sp_email_recipients"]);
|
247 |
-
$rec = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $rec);
|
248 |
-
/**/
|
249 |
-
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_ds ($paypal["txn_id"]), $rec)))
|
250 |
-
if (($rec = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $rec))) /* Full amount of the payment, before fee is subtracted. */
|
251 |
-
if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
|
252 |
-
if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
|
253 |
-
if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) /* **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. ( ex. "N\"ame" <email> ). */
|
254 |
-
if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
|
255 |
-
if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $rec)))
|
256 |
-
/**/
|
257 |
-
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_ds ($paypal["txn_id"]), $sbj)))
|
258 |
-
if (($sbj = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $sbj))) /* Full amount of the payment, before fee is subtracted. */
|
259 |
-
if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
|
260 |
-
if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
|
261 |
-
if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
|
262 |
-
if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
|
263 |
-
if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $sbj)))
|
264 |
-
/**/
|
265 |
-
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_ds ($paypal["txn_id"]), $msg)))
|
266 |
-
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg))) /* Full amount of the payment, before fee is subtracted. */
|
267 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
268 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
269 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
270 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
271 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
272 |
-
/**/
|
273 |
-
if (($recipients = preg_split ("/;+/", preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
274 |
-
{
|
275 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep ($recipients) as $recipient) /* Go through the full list of recipients. */
|
276 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_sp_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_sp_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
277 |
-
/**/
|
278 |
-
$paypal["s2member_log"][] = "Specific Post/Page Confirmation Email sent to: " . implode ("; ", $recipients) . ".";
|
279 |
-
}
|
280 |
-
/**/
|
281 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_urls"])
|
282 |
-
{
|
283 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_urls"]) as $url)
|
284 |
-
/**/
|
285 |
-
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_ds (rawurlencode ($sp_access_url)), $url)))
|
286 |
-
if (($url = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours")))), $url)))
|
287 |
-
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
288 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
289 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
290 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
291 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
292 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
293 |
-
/**/
|
294 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
295 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
296 |
-
/**/
|
297 |
-
$paypal["s2member_log"][] = "Specific Post/Page ~ Sale Notification URLs have been processed.";
|
298 |
-
}
|
299 |
-
/**/
|
300 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_recipients"])
|
301 |
-
{
|
302 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Specific Post/Page ~ Sale";
|
303 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
304 |
-
/**/
|
305 |
-
$msg .= "sp_access_url: %%sp_access_url%%\n";
|
306 |
-
$msg .= "sp_access_exp: %%sp_access_exp%%\n";
|
307 |
-
$msg .= "amount: %%amount%%\n";
|
308 |
-
$msg .= "txn_id: %%txn_id%%\n";
|
309 |
-
$msg .= "item_number: %%item_number%%\n";
|
310 |
-
$msg .= "item_name: %%item_name%%\n";
|
311 |
-
$msg .= "first_name: %%first_name%%\n";
|
312 |
-
$msg .= "last_name: %%last_name%%\n";
|
313 |
-
$msg .= "full_name: %%full_name%%\n";
|
314 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
315 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
316 |
-
/**/
|
317 |
-
$msg .= "cv0: %%cv0%%\n";
|
318 |
-
$msg .= "cv1: %%cv1%%\n";
|
319 |
-
$msg .= "cv2: %%cv2%%\n";
|
320 |
-
$msg .= "cv3: %%cv3%%\n";
|
321 |
-
$msg .= "cv4: %%cv4%%\n";
|
322 |
-
$msg .= "cv5: %%cv5%%\n";
|
323 |
-
$msg .= "cv6: %%cv6%%\n";
|
324 |
-
$msg .= "cv7: %%cv7%%\n";
|
325 |
-
$msg .= "cv8: %%cv8%%\n";
|
326 |
-
$msg .= "cv9: %%cv9%%";
|
327 |
-
/**/
|
328 |
-
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_ds ($sp_access_url), $msg)))
|
329 |
-
if (($msg = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours"))), $msg)))
|
330 |
-
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
|
331 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
332 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
333 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
334 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
335 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
336 |
-
/**/
|
337 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
338 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_sale_notification_recipients"])) as $recipient)
|
339 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_sp_sale_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_sp_sale_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
340 |
-
/**/
|
341 |
-
$paypal["s2member_log"][] = "Specific Post/Page ~ Sale Notification Emails have been processed.";
|
342 |
-
}
|
343 |
-
/**/
|
344 |
-
if ($processing && $_GET["s2member_paypal_proxy"] && ($url = $_GET["s2member_paypal_proxy_return_url"])) /* A Proxy is requesting a Return URL for this transaction? */
|
345 |
-
{
|
346 |
-
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_ds (rawurlencode ($sp_access_url)), $url)))
|
347 |
-
if (($url = preg_replace ("/%%sp_access_exp%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (c_ws_plugin__s2member_utils_time::approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours")))), $url)))
|
348 |
-
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
349 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
350 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
351 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
352 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
353 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
354 |
-
/**/
|
355 |
-
if (($url = trim ($url))) /* Preserve Remaining replacements. */
|
356 |
-
/* Because the parent routine may perform replacements too. */
|
357 |
-
$paypal["s2member_paypal_proxy_return_url"] = $url;
|
358 |
-
/**/
|
359 |
-
$paypal["s2member_log"][] = "Specific Post/Page Return, a Proxy Return URL is ready.";
|
360 |
-
}
|
361 |
-
/**/
|
362 |
-
if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_tracking_codes"]))
|
363 |
-
{
|
364 |
-
if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $code)) && ($code = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $code)))
|
365 |
-
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
366 |
-
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
367 |
-
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
368 |
-
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
369 |
-
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
370 |
-
/**/
|
371 |
-
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
372 |
-
{
|
373 |
-
$paypal["s2member_log"][] = "Storing Specific Post/Page Tracking Codes into a Transient Queue. These will be processed on-site.";
|
374 |
-
set_transient ("s2m_" . md5 ("s2member_transient_sp_tracking_codes_" . $paypal["txn_id"]), $code, 43200);
|
375 |
-
}
|
376 |
-
}
|
377 |
-
/**/
|
378 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
379 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_sp_access", get_defined_vars ());
|
380 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
381 |
-
}
|
382 |
-
else
|
383 |
-
$paypal["s2member_log"][] = "Unable to generate Access Link for Specific Post/Page Access. Does your Leading Post/Page still exist?";
|
384 |
-
/**/
|
385 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
386 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_sp_access", get_defined_vars ());
|
387 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
388 |
-
}
|
389 |
-
/*
|
390 |
-
New Subscriptions.
|
391 |
-
Possibly containing advanced update vars
|
392 |
-
( option_name1, option_selection1 ); which allow account modifications.
|
393 |
-
*/
|
394 |
-
else if (/**/(preg_match ("/^(web_accept|subscr_signup)$/i", $paypal["txn_type"]))/**/
|
395 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"]))/**/
|
396 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = $paypal["txn_id"]))/**/
|
397 |
-
&& (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
398 |
-
&& ($paypal["payer_email"])/**/)
|
399 |
-
{
|
400 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
401 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup", get_defined_vars ());
|
402 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
403 |
-
/**/
|
404 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept|subscr_signup).";
|
405 |
-
/**/
|
406 |
-
list ($paypal["level"], $paypal["ccaps"], $paypal["eotper"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
407 |
-
/**/
|
408 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
409 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
410 |
-
/**/
|
411 |
-
$paypal["period1"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
412 |
-
$paypal["mc_amount1"] = (strlen ($paypal["mc_amount1"]) && $paypal["mc_amount1"] > 0) ? $paypal["mc_amount1"] : "0.00"; /* "0.00". */
|
413 |
-
/**/
|
414 |
-
if (preg_match ("/^web_accept$/i", $paypal["txn_type"])) /* Conversions for Lifetime & Fixed-Term sales. */
|
415 |
-
{
|
416 |
-
$paypal["period3"] = ($paypal["eotper"]) ? $paypal["eotper"] : "1 L"; /* 1 Lifetime. */
|
417 |
-
$paypal["mc_amount3"] = $paypal["mc_gross"]; /* The "Buy Now" amount is the full gross. */
|
418 |
-
}
|
419 |
-
/**/
|
420 |
-
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
421 |
-
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
422 |
-
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
423 |
-
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
424 |
-
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
425 |
-
/**/
|
426 |
-
eval('$ipn_signup_vars = $paypal; unset($ipn_signup_vars["s2member_log"]);'); /* Create array of IPN signup vars w/o s2member_log. */
|
427 |
-
/*
|
428 |
-
New Subscription with advanced update vars ( option_name1, option_selection1 )? These variables are used in Subscr. Modifications.
|
429 |
-
*/
|
430 |
-
if (preg_match ("/(referenc|associat|updat|upgrad)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) /* Advanced way to handle Subscription mods. */
|
431 |
-
/* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified.
|
432 |
-
PayPal® will not allow the `modify=1|2` parameter to be used in those scenarios, because technically there is no billing to update; only the account. */
|
433 |
-
{
|
434 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
435 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_w_update_vars", get_defined_vars ());
|
436 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
437 |
-
/**/
|
438 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept|subscr_signup) w/ update vars.";
|
439 |
-
/**/
|
440 |
-
/* Check for both the old & new subscr_id's, just in case the Return routine already changed it. */
|
441 |
-
if (($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)
|
442 |
-
{
|
443 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
444 |
-
{
|
445 |
-
$processing = $modifying = $during = true; /* Yes, we ARE processing this. */
|
446 |
-
/**/
|
447 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
448 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_before_subscr_signup_w_update_vars", get_defined_vars ());
|
449 |
-
do_action ("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars (), "ipn-upgrade-downgrade", "modification", "s2member_level" . $paypal["level"]);
|
450 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
451 |
-
/**/
|
452 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
453 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
454 |
-
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
455 |
-
/**/
|
456 |
-
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
457 |
-
{
|
458 |
-
add_existing_user_to_blog(array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
459 |
-
$user = new WP_User ($user_id);
|
460 |
-
}
|
461 |
-
/**/
|
462 |
-
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
463 |
-
/**/
|
464 |
-
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
465 |
-
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
466 |
-
/**/
|
467 |
-
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
468 |
-
foreach ($user->allcaps as $cap => $cap_enabled)
|
469 |
-
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
470 |
-
$user->remove_cap ($ccap = $cap);
|
471 |
-
/**/
|
472 |
-
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
473 |
-
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
474 |
-
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
475 |
-
/**/
|
476 |
-
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
477 |
-
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
478 |
-
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
479 |
-
/**/
|
480 |
-
if (!get_user_option ("s2member_registration_ip", $user_id))
|
481 |
-
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
482 |
-
/**/
|
483 |
-
update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars);
|
484 |
-
/**/
|
485 |
-
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
486 |
-
delete_user_option ($user_id, "s2member_file_download_access_log");
|
487 |
-
/**/
|
488 |
-
if (preg_match ("/^web_accept$/i", $paypal["txn_type"]) && $paypal["eotper"])
|
489 |
-
{
|
490 |
-
update_user_option ($user_id, "s2member_auto_eot_time", /* Set exclusively by the IPN handler; to avoid duplicate extensions. */
|
491 |
-
($eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ("", "", "", $paypal["eotper"], "", get_user_option ("s2member_auto_eot_time", $user_id))));
|
492 |
-
$paypal["s2member_log"][] = "Automatic EOT ( End Of Term ) Time set to: " . date ("D M j, Y g:i:s a T", $eot_time) . ".";
|
493 |
-
}
|
494 |
-
else /* Otherwise, we need to clear the Auto-EOT Time. */
|
495 |
-
delete_user_option ($user_id, "s2member_auto_eot_time");
|
496 |
-
/**/
|
497 |
-
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
498 |
-
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
499 |
-
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
500 |
-
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
501 |
-
/**/
|
502 |
-
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
503 |
-
/**/
|
504 |
-
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
|
505 |
-
/**/
|
506 |
-
wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_modification_email_sbj", "Thank you! Your account has been updated.", get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", "Thank you! You've been updated to:\n" . $paypal["item_name"] . "\n\nPlease log back in now.\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8");
|
507 |
-
/**/
|
508 |
-
$paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
|
509 |
-
/**/
|
510 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
511 |
-
{
|
512 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
|
513 |
-
/**/
|
514 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
515 |
-
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
516 |
-
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
517 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
518 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
519 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
520 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
521 |
-
/**/
|
522 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
523 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
524 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
525 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
526 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
527 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
528 |
-
{
|
529 |
-
if (is_array ($fields) && !empty ($fields))
|
530 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
531 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
532 |
-
break;
|
533 |
-
/**/
|
534 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
535 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
536 |
-
}
|
537 |
-
/**/
|
538 |
-
$paypal["s2member_log"][] = "Modification Notification URLs have been processed.";
|
539 |
-
}
|
540 |
-
/**/
|
541 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
542 |
-
{
|
543 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Modification";
|
544 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
545 |
-
/**/
|
546 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
547 |
-
$msg .= "initial: %%initial%%\n";
|
548 |
-
$msg .= "regular: %%regular%%\n";
|
549 |
-
$msg .= "recurring: %%recurring%%\n";
|
550 |
-
$msg .= "initial_term: %%initial_term%%\n";
|
551 |
-
$msg .= "regular_term: %%regular_term%%\n";
|
552 |
-
$msg .= "item_number: %%item_number%%\n";
|
553 |
-
$msg .= "item_name: %%item_name%%\n";
|
554 |
-
$msg .= "first_name: %%first_name%%\n";
|
555 |
-
$msg .= "last_name: %%last_name%%\n";
|
556 |
-
$msg .= "full_name: %%full_name%%\n";
|
557 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
558 |
-
/**/
|
559 |
-
$msg .= "user_first_name: %%user_first_name%%\n";
|
560 |
-
$msg .= "user_last_name: %%user_last_name%%\n";
|
561 |
-
$msg .= "user_full_name: %%user_full_name%%\n";
|
562 |
-
$msg .= "user_email: %%user_email%%\n";
|
563 |
-
$msg .= "user_login: %%user_login%%\n";
|
564 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
565 |
-
$msg .= "user_id: %%user_id%%\n";
|
566 |
-
/**/
|
567 |
-
if (is_array ($fields) && !empty ($fields))
|
568 |
-
foreach ($fields as $var => $val)
|
569 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
570 |
-
/**/
|
571 |
-
$msg .= "cv0: %%cv0%%\n";
|
572 |
-
$msg .= "cv1: %%cv1%%\n";
|
573 |
-
$msg .= "cv2: %%cv2%%\n";
|
574 |
-
$msg .= "cv3: %%cv3%%\n";
|
575 |
-
$msg .= "cv4: %%cv4%%\n";
|
576 |
-
$msg .= "cv5: %%cv5%%\n";
|
577 |
-
$msg .= "cv6: %%cv6%%\n";
|
578 |
-
$msg .= "cv7: %%cv7%%\n";
|
579 |
-
$msg .= "cv8: %%cv8%%\n";
|
580 |
-
$msg .= "cv9: %%cv9%%";
|
581 |
-
/**/
|
582 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
583 |
-
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)) && ($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)))
|
584 |
-
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
585 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
586 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
587 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
588 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
589 |
-
/**/
|
590 |
-
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
591 |
-
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
592 |
-
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
593 |
-
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
594 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
595 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
596 |
-
{
|
597 |
-
if (is_array ($fields) && !empty ($fields))
|
598 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
599 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
600 |
-
break;
|
601 |
-
/**/
|
602 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
603 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"])) as $recipient)
|
604 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_modification_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
605 |
-
}
|
606 |
-
/**/
|
607 |
-
$paypal["s2member_log"][] = "Modification Notification Emails have been processed.";
|
608 |
-
}
|
609 |
-
/**/
|
610 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
611 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_w_update_vars", get_defined_vars ());
|
612 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
613 |
-
}
|
614 |
-
else
|
615 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
616 |
-
}
|
617 |
-
else
|
618 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB. Please check the on0 and os0 variables in your Button Code.";
|
619 |
-
/**/
|
620 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
621 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_w_update_vars", get_defined_vars ());
|
622 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
623 |
-
}
|
624 |
-
/*
|
625 |
-
New Subscription. Normal Subscription signup, we are not updating anything for a past Subscription.
|
626 |
-
*/
|
627 |
-
else /* Else this is a normal Subscription signup, we are not updating anything. */
|
628 |
-
{
|
629 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
630 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_wo_update_vars", get_defined_vars ());
|
631 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
632 |
-
/**/
|
633 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept|subscr_signup) w/o update vars.";
|
634 |
-
/**/
|
635 |
-
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"])))
|
636 |
-
{
|
637 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
638 |
-
/**/
|
639 |
-
$sbj = preg_replace ("/%%registration_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($registration_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "signup_email_subject"]);
|
640 |
-
$msg = preg_replace ("/%%registration_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($registration_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "signup_email_message"]);
|
641 |
-
$rec = preg_replace ("/%%registration_url%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($registration_url), $GLOBALS["WS_PLUGIN__"]["s2member"]["o"][(($_GET["s2member_paypal_proxy"] && preg_match ("/pro-emails/", $_GET["s2member_paypal_proxy_use"])) ? "pro_" : "") . "signup_email_recipients"]);
|
642 |
-
/**/
|
643 |
-
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_ds ($paypal["subscr_id"]), $rec)))
|
644 |
-
if (($rec = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $rec)) && ($rec = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $rec)))
|
645 |
-
if (($rec = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $rec)) && ($rec = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $rec)))
|
646 |
-
if (($rec = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $rec)) && ($rec = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $rec)))
|
647 |
-
if (($rec = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $rec)) && ($rec = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $rec)))
|
648 |
-
if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
|
649 |
-
if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
|
650 |
-
if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) /* **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. ( ex. "N\"ame" <email> ). */
|
651 |
-
if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
|
652 |
-
if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $rec)))
|
653 |
-
/**/
|
654 |
-
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_ds ($paypal["subscr_id"]), $sbj)))
|
655 |
-
if (($sbj = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $sbj)) && ($sbj = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $sbj)))
|
656 |
-
if (($sbj = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $sbj)) && ($sbj = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $sbj)))
|
657 |
-
if (($sbj = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $sbj)) && ($sbj = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $sbj)))
|
658 |
-
if (($sbj = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $sbj)) && ($sbj = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $sbj)))
|
659 |
-
if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
|
660 |
-
if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
|
661 |
-
if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
|
662 |
-
if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
|
663 |
-
if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $sbj)))
|
664 |
-
/**/
|
665 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
666 |
-
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)))
|
667 |
-
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
668 |
-
if (($msg = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $msg)) && ($msg = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $msg)))
|
669 |
-
if (($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)) && ($msg = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $msg)))
|
670 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
671 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
672 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
673 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
674 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
675 |
-
/**/
|
676 |
-
if (($recipients = preg_split ("/;+/", preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
677 |
-
{
|
678 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep ($recipients) as $recipient) /* Go through the full list of recipients. */
|
679 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_signup_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_signup_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
680 |
-
/**/
|
681 |
-
$paypal["s2member_log"][] = "Signup Confirmation Email sent to: " . implode ("; ", $recipients) . ".";
|
682 |
-
}
|
683 |
-
/**/
|
684 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
685 |
-
{
|
686 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_urls"]) as $url)
|
687 |
-
/**/
|
688 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
689 |
-
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
690 |
-
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
691 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
692 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
693 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
694 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
695 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
696 |
-
/**/
|
697 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
698 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
699 |
-
/**/
|
700 |
-
$paypal["s2member_log"][] = "Signup Notification URLs have been processed.";
|
701 |
-
}
|
702 |
-
/**/
|
703 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
704 |
-
{
|
705 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Signup";
|
706 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
707 |
-
/**/
|
708 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
709 |
-
$msg .= "initial: %%initial%%\n";
|
710 |
-
$msg .= "regular: %%regular%%\n";
|
711 |
-
$msg .= "recurring: %%recurring%%\n";
|
712 |
-
$msg .= "initial_term: %%initial_term%%\n";
|
713 |
-
$msg .= "regular_term: %%regular_term%%\n";
|
714 |
-
$msg .= "item_number: %%item_number%%\n";
|
715 |
-
$msg .= "item_name: %%item_name%%\n";
|
716 |
-
$msg .= "first_name: %%first_name%%\n";
|
717 |
-
$msg .= "last_name: %%last_name%%\n";
|
718 |
-
$msg .= "full_name: %%full_name%%\n";
|
719 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
720 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
721 |
-
/**/
|
722 |
-
$msg .= "cv0: %%cv0%%\n";
|
723 |
-
$msg .= "cv1: %%cv1%%\n";
|
724 |
-
$msg .= "cv2: %%cv2%%\n";
|
725 |
-
$msg .= "cv3: %%cv3%%\n";
|
726 |
-
$msg .= "cv4: %%cv4%%\n";
|
727 |
-
$msg .= "cv5: %%cv5%%\n";
|
728 |
-
$msg .= "cv6: %%cv6%%\n";
|
729 |
-
$msg .= "cv7: %%cv7%%\n";
|
730 |
-
$msg .= "cv8: %%cv8%%\n";
|
731 |
-
$msg .= "cv9: %%cv9%%";
|
732 |
-
/**/
|
733 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
734 |
-
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)) && ($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)))
|
735 |
-
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
736 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
737 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
738 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
739 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
740 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
741 |
-
/**/
|
742 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
743 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_notification_recipients"])) as $recipient)
|
744 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_signup_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_signup_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
745 |
-
/**/
|
746 |
-
$paypal["s2member_log"][] = "Signup Notification Emails have been processed.";
|
747 |
-
}
|
748 |
-
/**/
|
749 |
-
if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
750 |
-
{
|
751 |
-
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_ds ($paypal["subscr_id"]), $code)))
|
752 |
-
if (($code = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $code)) && ($code = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $code)) && ($code = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $code)))
|
753 |
-
if (($code = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $code)) && ($code = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $code)))
|
754 |
-
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
755 |
-
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
756 |
-
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
757 |
-
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
758 |
-
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
759 |
-
/**/
|
760 |
-
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
761 |
-
{
|
762 |
-
$paypal["s2member_log"][] = "Storing Signup Tracking Codes into a Transient Queue. These will be processed on-site.";
|
763 |
-
set_transient ("s2m_" . md5 ("s2member_transient_signup_tracking_codes_" . $paypal["subscr_id"]), $code, 43200);
|
764 |
-
}
|
765 |
-
}
|
766 |
-
/**/
|
767 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
768 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_wo_update_vars", get_defined_vars ());
|
769 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
770 |
-
}
|
771 |
-
else
|
772 |
-
$paypal["s2member_log"][] = "Unable to generate Registration URL for Membership Access. Possible data corruption within the IPN response.";
|
773 |
-
/**/
|
774 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
775 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_wo_update_vars", get_defined_vars ());
|
776 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
777 |
-
}
|
778 |
-
/**/
|
779 |
-
if ($processing && $_GET["s2member_paypal_proxy"] && ($url = $_GET["s2member_paypal_proxy_return_url"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"]))) /* A Proxy is requesting a Return URL? */
|
780 |
-
{
|
781 |
-
if (($user_id && 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))
|
782 |
-
{
|
783 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
784 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
785 |
-
/**/
|
786 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
787 |
-
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
788 |
-
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
789 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
790 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
791 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
792 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
793 |
-
if (($url = preg_replace ("/%%modification%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ((int)$modifying)), $url)))
|
794 |
-
{
|
795 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
796 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
797 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
798 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
799 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
800 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
801 |
-
{
|
802 |
-
if (is_array ($fields) && !empty ($fields))
|
803 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
804 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
805 |
-
break;
|
806 |
-
/**/
|
807 |
-
if (($url = trim ($url))) /* Preserve remaining replacements. */
|
808 |
-
/* Because the parent routine may perform replacements too. */
|
809 |
-
$paypal["s2member_paypal_proxy_return_url"] = $url;
|
810 |
-
}
|
811 |
-
}
|
812 |
-
}
|
813 |
-
/**/
|
814 |
-
$paypal["s2member_log"][] = "Subscr. Return ( modification=" . (int)$modifying . " ), a Proxy Return URL is ready.";
|
815 |
-
}
|
816 |
-
/**/
|
817 |
-
if ($processing /* Process a payment now? Special cases for web_accept and/or Proxy requests with `subscr-signup-as-subscr-payment`. */
|
818 |
-
&& (preg_match ("/^web_accept$/i", $paypal["txn_type"]) || ($_GET["s2member_paypal_proxy"] && preg_match ("/subscr-signup-as-subscr-payment/", $_GET["s2member_paypal_proxy_use"]) && $paypal["txn_id"] && $paypal["mc_gross"] > 0))/**/
|
819 |
-
&& (($user_id && 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)))
|
820 |
-
{
|
821 |
-
$paypal["s2member_log"][] = "User exists. Handling `payment` for Subscription via (" . ((preg_match ("/^web_accept$/i", $paypal["txn_type"])) ? "web_accept" : "subscr-signup-as-subscr-payment") . ").";
|
822 |
-
/**/
|
823 |
-
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
824 |
-
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
825 |
-
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
826 |
-
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
827 |
-
/**/
|
828 |
-
if (!get_user_option ("s2member_first_payment_txn_id", $user_id)) /* 1st payment? */
|
829 |
-
update_user_option ($user_id, "s2member_first_payment_txn_id", $paypal["txn_id"]);
|
830 |
-
/**/
|
831 |
-
update_user_option ($user_id, "s2member_last_payment_time", time ()); /* Update the last payment time. */
|
832 |
-
/**/
|
833 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
834 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
835 |
-
/**/
|
836 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
837 |
-
{
|
838 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
|
839 |
-
/**/
|
840 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
841 |
-
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
842 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
843 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
844 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
845 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
846 |
-
{
|
847 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
848 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
849 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
850 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
851 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
852 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
853 |
-
{
|
854 |
-
if (is_array ($fields) && !empty ($fields))
|
855 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
856 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
857 |
-
break;
|
858 |
-
/**/
|
859 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
860 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
861 |
-
}
|
862 |
-
}
|
863 |
-
/**/
|
864 |
-
$paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
|
865 |
-
}
|
866 |
-
/**/
|
867 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
868 |
-
{
|
869 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Payment";
|
870 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
871 |
-
/**/
|
872 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
873 |
-
$msg .= "amount: %%amount%%\n";
|
874 |
-
$msg .= "txn_id: %%txn_id%%\n";
|
875 |
-
$msg .= "item_number: %%item_number%%\n";
|
876 |
-
$msg .= "item_name: %%item_name%%\n";
|
877 |
-
$msg .= "first_name: %%first_name%%\n";
|
878 |
-
$msg .= "last_name: %%last_name%%\n";
|
879 |
-
$msg .= "full_name: %%full_name%%\n";
|
880 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
881 |
-
/**/
|
882 |
-
$msg .= "user_first_name: %%user_first_name%%\n";
|
883 |
-
$msg .= "user_last_name: %%user_last_name%%\n";
|
884 |
-
$msg .= "user_full_name: %%user_full_name%%\n";
|
885 |
-
$msg .= "user_email: %%user_email%%\n";
|
886 |
-
$msg .= "user_login: %%user_login%%\n";
|
887 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
888 |
-
$msg .= "user_id: %%user_id%%\n";
|
889 |
-
/**/
|
890 |
-
if (is_array ($fields) && !empty ($fields))
|
891 |
-
foreach ($fields as $var => $val)
|
892 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
893 |
-
/**/
|
894 |
-
$msg .= "cv0: %%cv0%%\n";
|
895 |
-
$msg .= "cv1: %%cv1%%\n";
|
896 |
-
$msg .= "cv2: %%cv2%%\n";
|
897 |
-
$msg .= "cv3: %%cv3%%\n";
|
898 |
-
$msg .= "cv4: %%cv4%%\n";
|
899 |
-
$msg .= "cv5: %%cv5%%\n";
|
900 |
-
$msg .= "cv6: %%cv6%%\n";
|
901 |
-
$msg .= "cv7: %%cv7%%\n";
|
902 |
-
$msg .= "cv8: %%cv8%%\n";
|
903 |
-
$msg .= "cv9: %%cv9%%";
|
904 |
-
/**/
|
905 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
906 |
-
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
|
907 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
908 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
909 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
910 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
911 |
-
{
|
912 |
-
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
913 |
-
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
914 |
-
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
915 |
-
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
916 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
917 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
918 |
-
{
|
919 |
-
if (is_array ($fields) && !empty ($fields))
|
920 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
921 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
922 |
-
break;
|
923 |
-
/**/
|
924 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
925 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"])) as $recipient)
|
926 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_payment_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_payment_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
927 |
-
}
|
928 |
-
}
|
929 |
-
/**/
|
930 |
-
$paypal["s2member_log"][] = "Payment Notification Emails have been processed.";
|
931 |
-
}
|
932 |
-
}
|
933 |
-
else if ($processing /* Process a payment now? Special cases for web_accept and/or Proxy requests with `subscr-signup-as-subscr-payment`. */
|
934 |
-
&& (preg_match ("/^web_accept$/i", $paypal["txn_type"]) || ($_GET["s2member_paypal_proxy"] && preg_match ("/subscr-signup-as-subscr-payment/", $_GET["s2member_paypal_proxy_use"]) && $paypal["txn_id"] && $paypal["mc_gross"] > 0)))
|
935 |
-
{
|
936 |
-
$paypal["s2member_log"][] = "Storing `payment` for Subscription via (" . ((preg_match ("/^web_accept$/i", $paypal["txn_type"])) ? "web_accept" : "subscr-signup-as-subscr-payment") . ").";
|
937 |
-
/**/
|
938 |
-
$ipn = array ("txn_type" => "subscr_payment"); /* Create a simulated IPN response for txn_type=subscr_payment. */
|
939 |
-
/**/
|
940 |
-
foreach ($paypal as $var => $val)
|
941 |
-
if (in_array ($var, array ("subscr_gateway", "subscr_id", "txn_id", "custom", "invoice", "mc_gross", "mc_currency", "tax", "payer_email", "first_name", "last_name", "item_name", "item_number", "option_name1", "option_selection1", "option_name2", "option_selection2")))
|
942 |
-
$ipn[$var] = $val;
|
943 |
-
/**/
|
944 |
-
$paypal["s2member_log"][] = "Creating an IPN response for `subscr_payment`. This will go into a Transient Queue; and be processed during registration.";
|
945 |
-
/**/
|
946 |
-
set_transient ("s2m_" . md5 ("s2member_transient_ipn_subscr_payment_" . $paypal["subscr_id"]), $ipn, 43200);
|
947 |
-
}
|
948 |
-
/**/
|
949 |
-
if ($processing /* Store signup vars now? If the User already exists in the database, we can go ahead and store these right now. */
|
950 |
-
&& (($user_id && 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)))
|
951 |
-
{
|
952 |
-
$paypal["s2member_log"][] = "Storing IPN signup vars now. These are associated with a User's account record; for future reference.";
|
953 |
-
/**/
|
954 |
-
update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars);
|
955 |
-
}
|
956 |
-
else if ($processing) /* Otherwise, we can store these into a Transient Queue for registration processing. */
|
957 |
-
{
|
958 |
-
$paypal["s2member_log"][] = "Storing IPN signup vars into a Transient Queue. These will be processed on registration.";
|
959 |
-
/**/
|
960 |
-
set_transient ("s2m_" . md5 ("s2member_transient_ipn_signup_vars_" . $paypal["subscr_id"]), $ipn_signup_vars, 43200);
|
961 |
-
}
|
962 |
-
/**/
|
963 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
964 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup", get_defined_vars ());
|
965 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
966 |
-
}
|
967 |
-
/*
|
968 |
-
Recurring Payment Profile creation.
|
969 |
-
This is not really necessary. It is only here because this txn_type could
|
970 |
-
be necessary in a future release of s2Member. For now, it's just a fill-in.
|
971 |
-
These Hooks/Filters will remain, so you can use them now; if you need to.
|
972 |
-
*/
|
973 |
-
else if (/**/(preg_match ("/^recurring_payment_profile_created$/i", $paypal["txn_type"]))/**/
|
974 |
-
&& ($paypal["item_number"] || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal)))/**/
|
975 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"])) /* Membership. */
|
976 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
977 |
-
&& ($paypal["item_name"] || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
978 |
-
&& ($paypal["payer_email"] || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
979 |
-
{
|
980 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
981 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_recurring_payment_profile_created", get_defined_vars ());
|
982 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
983 |
-
/**/
|
984 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as recurring_payment_profile_created.";
|
985 |
-
/**/
|
986 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
987 |
-
/**/
|
988 |
-
$paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
|
989 |
-
$paypal["s2member_log"][] = "s2Member Pro handles this event on-site, with an IPN proxy.";
|
990 |
-
/**/
|
991 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
992 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_recurring_payment_profile_created", get_defined_vars ());
|
993 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
994 |
-
/**/
|
995 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
996 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_recurring_payment_profile_created", get_defined_vars ());
|
997 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
998 |
-
}
|
999 |
-
/*
|
1000 |
-
Subscription modifications.
|
1001 |
-
*/
|
1002 |
-
else if (/**/(preg_match ("/^subscr_modify$/i", $paypal["txn_type"]))/**/
|
1003 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"]))/**/
|
1004 |
-
&& ($paypal["subscr_id"] && $paypal["payer_email"])/**/)
|
1005 |
-
{
|
1006 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1007 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_modify", get_defined_vars ());
|
1008 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1009 |
-
/**/
|
1010 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as subscr_modify.";
|
1011 |
-
/**/
|
1012 |
-
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
1013 |
-
/**/
|
1014 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
1015 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
1016 |
-
/**/
|
1017 |
-
$paypal["period1"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
1018 |
-
$paypal["mc_amount1"] = (strlen ($paypal["mc_amount1"]) && $paypal["mc_amount1"] > 0) ? $paypal["mc_amount1"] : "0.00"; /* "0.00". */
|
1019 |
-
/**/
|
1020 |
-
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
1021 |
-
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
1022 |
-
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
1023 |
-
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
1024 |
-
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
1025 |
-
/**/
|
1026 |
-
eval('$ipn_signup_vars = $paypal; unset($ipn_signup_vars["s2member_log"]);'); /* Create array of IPN signup vars w/o s2member_log. */
|
1027 |
-
/**/
|
1028 |
-
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
1029 |
-
{
|
1030 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
1031 |
-
{
|
1032 |
-
$processing = $modifying = $during = true; /* Yes, we ARE processing this. */
|
1033 |
-
/**/
|
1034 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1035 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_before_subscr_modify", get_defined_vars ());
|
1036 |
-
do_action ("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars (), "ipn-upgrade-downgrade", "modification", "s2member_level" . $paypal["level"]);
|
1037 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1038 |
-
/**/
|
1039 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
1040 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
1041 |
-
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
1042 |
-
/**/
|
1043 |
-
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
1044 |
-
{
|
1045 |
-
add_existing_user_to_blog(array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
1046 |
-
$user = new WP_User ($user_id);
|
1047 |
-
}
|
1048 |
-
/**/
|
1049 |
-
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
1050 |
-
/**/
|
1051 |
-
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
1052 |
-
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
1053 |
-
/**/
|
1054 |
-
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
1055 |
-
foreach ($user->allcaps as $cap => $cap_enabled)
|
1056 |
-
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
1057 |
-
$user->remove_cap ($ccap = $cap);
|
1058 |
-
/**/
|
1059 |
-
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
1060 |
-
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
1061 |
-
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
1062 |
-
/**/
|
1063 |
-
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
1064 |
-
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
1065 |
-
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
1066 |
-
/**/
|
1067 |
-
if (!get_user_option ("s2member_registration_ip", $user_id))
|
1068 |
-
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
1069 |
-
/**/
|
1070 |
-
update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars);
|
1071 |
-
/**/
|
1072 |
-
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
1073 |
-
delete_user_option ($user_id, "s2member_file_download_access_log");
|
1074 |
-
/**/
|
1075 |
-
delete_user_option ($user_id, "s2member_auto_eot_time");
|
1076 |
-
/**/
|
1077 |
-
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
1078 |
-
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
1079 |
-
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
1080 |
-
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
1081 |
-
/**/
|
1082 |
-
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
1083 |
-
/**/
|
1084 |
-
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated on Subscription modification.";
|
1085 |
-
/**/
|
1086 |
-
wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_modification_email_sbj", "Thank you! Your account has been updated.", get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", "Thank you! You've been updated to:\n" . $paypal["item_name"] . "\n\nPlease log back in now.\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8");
|
1087 |
-
/**/
|
1088 |
-
$paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
|
1089 |
-
/**/
|
1090 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1091 |
-
{
|
1092 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
|
1093 |
-
/**/
|
1094 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
1095 |
-
if (($url = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["recurring"])), $url)))
|
1096 |
-
if (($url = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["regular_term"])), $url)))
|
1097 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
1098 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
1099 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
1100 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
1101 |
-
/**/
|
1102 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
1103 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
1104 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
1105 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
1106 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
1107 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
1108 |
-
{
|
1109 |
-
if (is_array ($fields) && !empty ($fields))
|
1110 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1111 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
1112 |
-
break;
|
1113 |
-
/**/
|
1114 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
1115 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
1116 |
-
}
|
1117 |
-
/**/
|
1118 |
-
$paypal["s2member_log"][] = "Modification Notification URLs have been processed.";
|
1119 |
-
}
|
1120 |
-
/**/
|
1121 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1122 |
-
{
|
1123 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Modification";
|
1124 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
1125 |
-
/**/
|
1126 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
1127 |
-
$msg .= "initial: %%initial%%\n";
|
1128 |
-
$msg .= "regular: %%regular%%\n";
|
1129 |
-
$msg .= "recurring: %%recurring%%\n";
|
1130 |
-
$msg .= "initial_term: %%initial_term%%\n";
|
1131 |
-
$msg .= "regular_term: %%regular_term%%\n";
|
1132 |
-
$msg .= "item_number: %%item_number%%\n";
|
1133 |
-
$msg .= "item_name: %%item_name%%\n";
|
1134 |
-
$msg .= "first_name: %%first_name%%\n";
|
1135 |
-
$msg .= "last_name: %%last_name%%\n";
|
1136 |
-
$msg .= "full_name: %%full_name%%\n";
|
1137 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
1138 |
-
/**/
|
1139 |
-
$msg .= "user_first_name: %%user_first_name%%\n";
|
1140 |
-
$msg .= "user_last_name: %%user_last_name%%\n";
|
1141 |
-
$msg .= "user_full_name: %%user_full_name%%\n";
|
1142 |
-
$msg .= "user_email: %%user_email%%\n";
|
1143 |
-
$msg .= "user_login: %%user_login%%\n";
|
1144 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
1145 |
-
$msg .= "user_id: %%user_id%%\n";
|
1146 |
-
/**/
|
1147 |
-
if (is_array ($fields) && !empty ($fields))
|
1148 |
-
foreach ($fields as $var => $val)
|
1149 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
1150 |
-
/**/
|
1151 |
-
$msg .= "cv0: %%cv0%%\n";
|
1152 |
-
$msg .= "cv1: %%cv1%%\n";
|
1153 |
-
$msg .= "cv2: %%cv2%%\n";
|
1154 |
-
$msg .= "cv3: %%cv3%%\n";
|
1155 |
-
$msg .= "cv4: %%cv4%%\n";
|
1156 |
-
$msg .= "cv5: %%cv5%%\n";
|
1157 |
-
$msg .= "cv6: %%cv6%%\n";
|
1158 |
-
$msg .= "cv7: %%cv7%%\n";
|
1159 |
-
$msg .= "cv8: %%cv8%%\n";
|
1160 |
-
$msg .= "cv9: %%cv9%%";
|
1161 |
-
/**/
|
1162 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
1163 |
-
if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)) && ($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)))
|
1164 |
-
if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
|
1165 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
1166 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
1167 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
1168 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
1169 |
-
/**/
|
1170 |
-
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
1171 |
-
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
1172 |
-
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
1173 |
-
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
1174 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
1175 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
1176 |
-
{
|
1177 |
-
if (is_array ($fields) && !empty ($fields))
|
1178 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1179 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
1180 |
-
break;
|
1181 |
-
/**/
|
1182 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
1183 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"])) as $recipient)
|
1184 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_modification_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
1185 |
-
}
|
1186 |
-
/**/
|
1187 |
-
$paypal["s2member_log"][] = "Modification Notification Emails have been processed.";
|
1188 |
-
}
|
1189 |
-
/**/
|
1190 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1191 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_modify", get_defined_vars ());
|
1192 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1193 |
-
}
|
1194 |
-
else
|
1195 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
1196 |
-
}
|
1197 |
-
else
|
1198 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
|
1199 |
-
/**/
|
1200 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1201 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_modify", get_defined_vars ());
|
1202 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1203 |
-
}
|
1204 |
-
/*
|
1205 |
-
Subscription payment notifications.
|
1206 |
-
We need these to update: `s2member_last_payment_time`.
|
1207 |
-
*/
|
1208 |
-
else if (/**/(preg_match ("/^(subscr_payment|recurring_payment)$/i", $paypal["txn_type"]))/**/
|
1209 |
-
&& ($paypal["item_number"] || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal)))/**/
|
1210 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"])) /* Membership. */
|
1211 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
1212 |
-
&& (!preg_match ($payment_status_issues, $paypal["payment_status"])) /* Status OK? This goes thru a list of known status issues. */
|
1213 |
-
&& ($paypal["item_name"] || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
1214 |
-
&& ($paypal["payer_email"] || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/
|
1215 |
-
&& ($paypal["txn_id"] && $paypal["mc_gross"])/**/)
|
1216 |
-
{
|
1217 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1218 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_payment", get_defined_vars ());
|
1219 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1220 |
-
/**/
|
1221 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as " . ($identified_as = "subscr_payment|recurring_payment") . ".";
|
1222 |
-
$paypal["s2member_log"][] = "Sleeping for 5 seconds. Waiting for a possible subscr_signup|subscr_modify|recurring_payment_profile_created.";
|
1223 |
-
sleep(5); /* Sleep here for a moment. PayPal® sometimes sends a subscr_payment before the subscr_signup, subscr_modify. */
|
1224 |
-
/* It is NOT a big deal if they do. However, s2Member goes to sleep here, just to help keep the log files in a logical order. */
|
1225 |
-
$paypal["s2member_log"][] = "Awake. It's " . date ("D M j, Y g:i:s a T") . ". s2Member txn_type identified as " . $identified_as . ".";
|
1226 |
-
/**/
|
1227 |
-
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
1228 |
-
/**/
|
1229 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
1230 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
1231 |
-
/**/
|
1232 |
-
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
1233 |
-
{
|
1234 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1235 |
-
/**/
|
1236 |
-
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
1237 |
-
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
1238 |
-
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
1239 |
-
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
1240 |
-
/**/
|
1241 |
-
if (!get_user_option ("s2member_first_payment_txn_id", $user_id)) /* 1st payment? */
|
1242 |
-
update_user_option ($user_id, "s2member_first_payment_txn_id", $paypal["txn_id"]);
|
1243 |
-
/**/
|
1244 |
-
update_user_option ($user_id, "s2member_last_payment_time", time ()); /* Also update last payment time. */
|
1245 |
-
/**/
|
1246 |
-
$paypal["s2member_log"][] = "Updated Payment Times for this Member."; /* Flag this action in the log. */
|
1247 |
-
/**/
|
1248 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
1249 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
1250 |
-
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
1251 |
-
/**/
|
1252 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1253 |
-
{
|
1254 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
|
1255 |
-
/**/
|
1256 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
1257 |
-
if (($url = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["txn_id"])), $url)))
|
1258 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
1259 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
1260 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
1261 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
1262 |
-
{
|
1263 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
1264 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
1265 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
1266 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
1267 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
1268 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
1269 |
-
{
|
1270 |
-
if (is_array ($fields) && !empty ($fields))
|
1271 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1272 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
1273 |
-
break;
|
1274 |
-
/**/
|
1275 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
1276 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
1277 |
-
}
|
1278 |
-
}
|
1279 |
-
/**/
|
1280 |
-
$paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
|
1281 |
-
}
|
1282 |
-
/**/
|
1283 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1284 |
-
{
|
1285 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Payment";
|
1286 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
1287 |
-
/**/
|
1288 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
1289 |
-
$msg .= "amount: %%amount%%\n";
|
1290 |
-
$msg .= "txn_id: %%txn_id%%\n";
|
1291 |
-
$msg .= "item_number: %%item_number%%\n";
|
1292 |
-
$msg .= "item_name: %%item_name%%\n";
|
1293 |
-
$msg .= "first_name: %%first_name%%\n";
|
1294 |
-
$msg .= "last_name: %%last_name%%\n";
|
1295 |
-
$msg .= "full_name: %%full_name%%\n";
|
1296 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
1297 |
-
/**/
|
1298 |
-
$msg .= "user_first_name: %%user_first_name%%\n";
|
1299 |
-
$msg .= "user_last_name: %%user_last_name%%\n";
|
1300 |
-
$msg .= "user_full_name: %%user_full_name%%\n";
|
1301 |
-
$msg .= "user_email: %%user_email%%\n";
|
1302 |
-
$msg .= "user_login: %%user_login%%\n";
|
1303 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
1304 |
-
$msg .= "user_id: %%user_id%%\n";
|
1305 |
-
/**/
|
1306 |
-
if (is_array ($fields) && !empty ($fields))
|
1307 |
-
foreach ($fields as $var => $val)
|
1308 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
1309 |
-
/**/
|
1310 |
-
$msg .= "cv0: %%cv0%%\n";
|
1311 |
-
$msg .= "cv1: %%cv1%%\n";
|
1312 |
-
$msg .= "cv2: %%cv2%%\n";
|
1313 |
-
$msg .= "cv3: %%cv3%%\n";
|
1314 |
-
$msg .= "cv4: %%cv4%%\n";
|
1315 |
-
$msg .= "cv5: %%cv5%%\n";
|
1316 |
-
$msg .= "cv6: %%cv6%%\n";
|
1317 |
-
$msg .= "cv7: %%cv7%%\n";
|
1318 |
-
$msg .= "cv8: %%cv8%%\n";
|
1319 |
-
$msg .= "cv9: %%cv9%%";
|
1320 |
-
/**/
|
1321 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
1322 |
-
if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
|
1323 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
1324 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
1325 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
1326 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
1327 |
-
{
|
1328 |
-
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
1329 |
-
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
1330 |
-
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
1331 |
-
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
1332 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
1333 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
1334 |
-
{
|
1335 |
-
if (is_array ($fields) && !empty ($fields))
|
1336 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1337 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
1338 |
-
break;
|
1339 |
-
/**/
|
1340 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
1341 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"])) as $recipient)
|
1342 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_payment_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_payment_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
1343 |
-
}
|
1344 |
-
}
|
1345 |
-
/**/
|
1346 |
-
$paypal["s2member_log"][] = "Payment Notification Emails have been processed.";
|
1347 |
-
}
|
1348 |
-
/**/
|
1349 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1350 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_payment", get_defined_vars ());
|
1351 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1352 |
-
}
|
1353 |
-
else /* Otherwise, we need to re-generate/store this IPN into a Transient Queue. Then re-process it on registration. */
|
1354 |
-
{
|
1355 |
-
$paypal["s2member_log"][] = "Skipping this IPN response, for now. The Subscr. ID is not associated with a registered Member.";
|
1356 |
-
/**/
|
1357 |
-
$ipn = array ("txn_type" => "subscr_payment"); /* Create a simulated IPN response for txn_type=subscr_payment. */
|
1358 |
-
/**/
|
1359 |
-
foreach ($paypal as $var => $val)
|
1360 |
-
if (in_array ($var, array ("subscr_gateway", "subscr_id", "txn_id", "custom", "invoice", "mc_gross", "mc_currency", "tax", "payer_email", "first_name", "last_name", "item_name", "item_number", "option_name1", "option_selection1", "option_name2", "option_selection2")))
|
1361 |
-
$ipn[$var] = $val;
|
1362 |
-
/**/
|
1363 |
-
$paypal["s2member_log"][] = "Re-generating. This IPN will go into a Transient Queue; and be re-processed during registration.";
|
1364 |
-
/**/
|
1365 |
-
set_transient ("s2m_" . md5 ("s2member_transient_ipn_subscr_payment_" . $paypal["subscr_id"]), $ipn, 43200);
|
1366 |
-
}
|
1367 |
-
/**/
|
1368 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1369 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_payment", get_defined_vars ());
|
1370 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1371 |
-
}
|
1372 |
-
/*
|
1373 |
-
Subscription failed payment notifications.
|
1374 |
-
This is not really necessary. It is only here because this txn_type could
|
1375 |
-
be necessary in a future release of s2Member. For now, it's just a fill-in.
|
1376 |
-
These Hooks/Filters will remain, so you can use them now; if you need to.
|
1377 |
-
*/
|
1378 |
-
else if (/**/(preg_match ("/^(subscr_failed|recurring_payment_failed|recurring_payment_skipped)$/i", $paypal["txn_type"]))/**/
|
1379 |
-
&& ($paypal["item_number"] || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal)))/**/
|
1380 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"])) /* Membership. */
|
1381 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)))/**/
|
1382 |
-
&& ($paypal["item_name"] || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)))/**/
|
1383 |
-
&& ($paypal["payer_email"] || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
1384 |
-
{
|
1385 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1386 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_failed", get_defined_vars ());
|
1387 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1388 |
-
/**/
|
1389 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as subscr_failed|recurring_payment_failed|recurring_payment_skipped.";
|
1390 |
-
/**/
|
1391 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1392 |
-
/**/
|
1393 |
-
$paypal["s2member_log"][] = "This txn_type does not require any action on the part of s2Member.";
|
1394 |
-
$paypal["s2member_log"][] = "s2Member does NOT respond to individual failed payments, only multiple consecutive failed payments.";
|
1395 |
-
$paypal["s2member_log"][] = "When multiple consecutive payments fail, a special IPN response will be triggered.";
|
1396 |
-
/**/
|
1397 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1398 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_failed", get_defined_vars ());
|
1399 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1400 |
-
/**/
|
1401 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1402 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_failed", get_defined_vars ());
|
1403 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1404 |
-
}
|
1405 |
-
/*
|
1406 |
-
Subscription cancellations. s2Member can use this, to determine when/if it should Auto-EOT (demote|delete) a Member's account.
|
1407 |
-
This processing routine for `subscr_cancel` is compatible with newer PayPal® accounts that do NOT send a subscr_eot after cancellation.
|
1408 |
-
This works in conjunction with `s2member_last_payment_time`, and the s2Member Auto-EOT System.
|
1409 |
-
For further details, see: https://www.x.com/thread/41155?start=15&tstart=0
|
1410 |
-
*/
|
1411 |
-
else if (/**/(preg_match ("/^(subscr_cancel|recurring_payment_profile_cancel)$/i", $paypal["txn_type"]))/**/
|
1412 |
-
&& !(preg_match ("/^recurring_payment_profile_cancel$/i", $paypal["txn_type"]) && preg_match ("/^failed$/i", $paypal["initial_payment_status"]))
|
1413 |
-
/* ^^ Bypass this case ( for now ) "recurring_payment_profile_cancel" with an initial failed payment warrants an EOT instead of a cancellation. */
|
1414 |
-
&& ($paypal["item_number"] || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) /* item_number? */
|
1415 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"])) /* Must match Membership Access. */
|
1416 |
-
&& ($paypal["period1"] || ($paypal["period1"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period1 ($paypal)) || ($paypal["period1"] = "0 D"))/**/
|
1417 |
-
&& ($paypal["period3"] || ($paypal["period3"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period3 ($paypal))) /* Must have a period3 value. */
|
1418 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal))) /* Must have this. */
|
1419 |
-
&& ($paypal["item_name"] || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal))) /* Must have this. */
|
1420 |
-
&& ($paypal["payer_email"] || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
1421 |
-
{
|
1422 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1423 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_cancel", get_defined_vars ());
|
1424 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1425 |
-
/**/
|
1426 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as subscr_cancel|recurring_payment_profile_cancel.";
|
1427 |
-
/**/
|
1428 |
-
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
1429 |
-
/**/
|
1430 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
1431 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
1432 |
-
/**/
|
1433 |
-
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
1434 |
-
{
|
1435 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
1436 |
-
{
|
1437 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
1438 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
1439 |
-
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
1440 |
-
/**/
|
1441 |
-
if (!get_user_option ("s2member_auto_eot_time", $user_id)) /* Respect existing. */
|
1442 |
-
{
|
1443 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1444 |
-
/**/
|
1445 |
-
$auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ($user_id, $paypal["period1"], $paypal["period3"]);
|
1446 |
-
/**/
|
1447 |
-
update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time); /* s2Member follows-up later. */
|
1448 |
-
/**/
|
1449 |
-
$paypal["s2member_log"][] = "Auto-EOT Time for this account: " . date ("D M j, Y g:i a T", $auto_eot_time);
|
1450 |
-
/**/
|
1451 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1452 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_cancel", get_defined_vars ());
|
1453 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1454 |
-
}
|
1455 |
-
else
|
1456 |
-
$paypal["s2member_log"][] = "Ignoring Cancellation. An Auto-EOT Time is already set for this Member. An s2Member API Notification will still be processed however.";
|
1457 |
-
/**/
|
1458 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1459 |
-
{
|
1460 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_urls"]) as $url) /* Handle Cancellation Notifications. */
|
1461 |
-
/**/
|
1462 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)))
|
1463 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
1464 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
1465 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
1466 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
1467 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
1468 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
1469 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
1470 |
-
{
|
1471 |
-
if (is_array ($fields) && !empty ($fields))
|
1472 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1473 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
1474 |
-
break;
|
1475 |
-
/**/
|
1476 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
1477 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
1478 |
-
}
|
1479 |
-
/**/
|
1480 |
-
$paypal["s2member_log"][] = "Cancellation Notification URLs have been processed.";
|
1481 |
-
}
|
1482 |
-
/**/
|
1483 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1484 |
-
{
|
1485 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Cancellation";
|
1486 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
1487 |
-
/**/
|
1488 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
1489 |
-
$msg .= "item_number: %%item_number%%\n";
|
1490 |
-
$msg .= "item_name: %%item_name%%\n";
|
1491 |
-
$msg .= "user_first_name: %%user_first_name%%\n";
|
1492 |
-
$msg .= "user_last_name: %%user_last_name%%\n";
|
1493 |
-
$msg .= "user_full_name: %%user_full_name%%\n";
|
1494 |
-
$msg .= "user_email: %%user_email%%\n";
|
1495 |
-
$msg .= "user_login: %%user_login%%\n";
|
1496 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
1497 |
-
$msg .= "user_id: %%user_id%%\n";
|
1498 |
-
/**/
|
1499 |
-
if (is_array ($fields) && !empty ($fields))
|
1500 |
-
foreach ($fields as $var => $val)
|
1501 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
1502 |
-
/**/
|
1503 |
-
$msg .= "cv0: %%cv0%%\n";
|
1504 |
-
$msg .= "cv1: %%cv1%%\n";
|
1505 |
-
$msg .= "cv2: %%cv2%%\n";
|
1506 |
-
$msg .= "cv3: %%cv3%%\n";
|
1507 |
-
$msg .= "cv4: %%cv4%%\n";
|
1508 |
-
$msg .= "cv5: %%cv5%%\n";
|
1509 |
-
$msg .= "cv6: %%cv6%%\n";
|
1510 |
-
$msg .= "cv7: %%cv7%%\n";
|
1511 |
-
$msg .= "cv8: %%cv8%%\n";
|
1512 |
-
$msg .= "cv9: %%cv9%%";
|
1513 |
-
/**/
|
1514 |
-
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_ds ($paypal["subscr_id"]), $msg)))
|
1515 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
1516 |
-
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
1517 |
-
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
1518 |
-
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
1519 |
-
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
1520 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
1521 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
1522 |
-
{
|
1523 |
-
if (is_array ($fields) && !empty ($fields))
|
1524 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1525 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
1526 |
-
break;
|
1527 |
-
/**/
|
1528 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
1529 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["cancellation_notification_recipients"])) as $recipient)
|
1530 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_cancellation_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_cancellation_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
1531 |
-
}
|
1532 |
-
/**/
|
1533 |
-
$paypal["s2member_log"][] = "Cancellation Notification Emails have been processed.";
|
1534 |
-
}
|
1535 |
-
}
|
1536 |
-
else
|
1537 |
-
$paypal["s2member_log"][] = "Ignoring Cancellation. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
1538 |
-
}
|
1539 |
-
else
|
1540 |
-
$paypal["s2member_log"][] = "Unable to handle Cancellation. Could not get the existing User ID from the DB.";
|
1541 |
-
/**/
|
1542 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1543 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_cancel", get_defined_vars ());
|
1544 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1545 |
-
}
|
1546 |
-
/*
|
1547 |
-
Subscription terminations, max failed payments, initial payment failed, chargebacks, refunds, and reversals.
|
1548 |
-
An immediate EOT is necessary under MANY different conditions. However, in some cases, a delayed EOT is required.
|
1549 |
-
Delayed EOTs work in conjunction with `s2member_last_payment_time`, and the s2Member Auto-EOT System.
|
1550 |
-
|
1551 |
-
~ NOTE: newer PayPal® accounts ( i.e. Billing Profiles that start with "I-" ), will trigger a "subscr_eot" upon last payment.
|
1552 |
-
So those are treated as delayed EOTs - ( s2Member was updated at v3.2.3 to deal with this scenario gracefully ).
|
1553 |
-
In the case of "subscr_eot" with "I-", s2Member calculates the EOT Time, and records it for future processing.
|
1554 |
-
|
1555 |
-
~ NOTE: "new_case" with "case_type=chargeback" is NOT actually processed. It's only been integrated for the future compatibility.
|
1556 |
-
At this time, PayPal® doesn't send enough information through "new_case" transactions for s2Member to process anything.
|
1557 |
-
However, that's OK. Refunds and Reversals ( i.e. chargebacks ) are still detected through "payment_status".
|
1558 |
-
|
1559 |
-
~ NOTE: Partial Refunds ( i.e. payment_status=partially_refunded or txn_type=adjustment ) are NOT processed by this routine.
|
1560 |
-
( This is the intended behavior. A Partial Refund does NOT clearly indicate that s2Member should do anything at all. )
|
1561 |
-
HOWEVER. PayPal® does NOT always send payment_status=partially_refunded. This is well documented on their site, but in
|
1562 |
-
practice, it never seems to happen. It's best to check the negative mc_gross amount instead.
|
1563 |
-
*/
|
1564 |
-
else if (/**/( /* Partial Refunds ( i.e. payment_status=partially_refunded or txn_type=adjustment ) are NOT processed by this routine. */
|
1565 |
-
(preg_match ("/^(subscr_eot|recurring_payment_expired|recurring_payment_suspended_due_to_max_failed_payment)$/i", $paypal["txn_type"]) && ($recurring = 1))/**/
|
1566 |
-
|| (preg_match ("/^recurring_payment_profile_cancel$/i", $paypal["txn_type"]) && preg_match ("/^failed$/i", $paypal["initial_payment_status"]) && ($recurring = 1))/**/
|
1567 |
-
|| (preg_match ("/^new_case$/i", $paypal["txn_type"]) && preg_match ("/^chargeback$/i", $paypal["case_type"])) /* ONLY for future compatibility. This does NOT work yet. */
|
1568 |
-
|| (preg_match ("/^(refunded|reversed|reversal)$/i", $paypal["payment_status"])) /* The "txn_type" is irrelevant in all of these cases: refunded|reversed|reversal. */)/**/
|
1569 |
-
&& ($paypal["period1"] || ($paypal["period1"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period1 ($paypal)) || !$recurring || ($paypal["period1"] = "0 D"))/**/
|
1570 |
-
&& ($paypal["period3"] || ($paypal["period3"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_period3 ($paypal)) || !$recurring) /* Was it even recurring? */
|
1571 |
-
&& ($paypal["item_number"] || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) /* Do we have a valid item_number? */
|
1572 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"])) /* Only for "Membership", NOT for Specific Posts/Pages. */
|
1573 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_subscr_id ($paypal)) || ($paypal["subscr_id"] = $paypal["parent_txn_id"]))/**/
|
1574 |
-
&& ($paypal["item_name"] || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)) || ($paypal["item_name"] = $_SERVER["HTTP_HOST"]))/**/
|
1575 |
-
/* The item_name can default to HTTP_HOST because we've seen payment_status=reversed come through WITHOUT a product_name or item_name given. */
|
1576 |
-
&& ($paypal["payer_email"] || ($paypal["payer_email"] = c_ws_plugin__s2member_utils_users::get_user_email_with ($paypal["subscr_id"])))/**/)
|
1577 |
-
{
|
1578 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1579 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_eot", get_defined_vars ());
|
1580 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1581 |
-
/**/
|
1582 |
-
$is_refund = (preg_match ("/^refunded$/i", $paypal["payment_status"]) && $paypal["parent_txn_id"]);
|
1583 |
-
$is_reversal = (preg_match ("/^(reversed|reversal)$/i", $paypal["payment_status"]) && $paypal["parent_txn_id"]);
|
1584 |
-
$is_reversal = (!$is_reversal) ? (preg_match ("/^new_case$/i", $paypal["txn_type"]) && preg_match ("/^chargeback$/i", $paypal["case_type"])) : $is_reversal;
|
1585 |
-
$is_refund_or_reversal = ($is_refund || $is_reversal); /* If either of the previous tests above evaluated to true; then it's obviously a Refund and/or a Reversal. */
|
1586 |
-
$is_delayed_eot = (!$is_refund_or_reversal && preg_match ("/^(subscr_eot|recurring_payment_expired)$/i", $paypal["txn_type"]) && preg_match ("/^I-/i", $paypal["subscr_id"]));
|
1587 |
-
/**/
|
1588 |
-
if ($is_refund_or_reversal)
|
1589 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as " . ($identified_as = "[empty or irrelevant] w/ payment_status (refunded|reversed|reversal) - or - new_case w/ case_type (chargeback)") . ".";
|
1590 |
-
else
|
1591 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as " . ($identified_as = "(subscr_eot|recurring_payment_expired|recurring_payment_suspended_due_to_max_failed_payment) - or - recurring_payment_profile_cancel w/ initial_payment_status (failed)") . ".";
|
1592 |
-
/**/
|
1593 |
-
$paypal["s2member_log"][] = "Sleeping for 5 seconds. Waiting for a possible subscr_signup|subscr_modify|recurring_payment_profile_created.";
|
1594 |
-
sleep(5); /* Sleep here for a moment. PayPal® sometimes sends a subscr_eot before the subscr_signup, subscr_modify. */
|
1595 |
-
/* It is NOT a big deal if they do. However, s2Member goes to sleep here, just to help keep the log files in a logical order. */
|
1596 |
-
$paypal["s2member_log"][] = "Awake. It's " . date ("D M j, Y g:i:s a T") . ". s2Member txn_type identified as " . $identified_as . ".";
|
1597 |
-
/**/
|
1598 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
1599 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
1600 |
-
/**/
|
1601 |
-
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
1602 |
-
{
|
1603 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed below. */
|
1604 |
-
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Needed below. */
|
1605 |
-
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"];
|
1606 |
-
/**/
|
1607 |
-
if ( /* Here we take action, BUT based on Auto EOT Behavior options; as configured by the Site Owner. */
|
1608 |
-
(!$is_refund_or_reversal && !$is_delayed_eot && !get_user_option ("s2member_auto_eot_time", $user_id))/**/
|
1609 |
-
|| ($is_refund_or_reversal && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "refunds,reversals")/**/
|
1610 |
-
|| ($is_reversal && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "reversals")/**/
|
1611 |
-
|| ($is_refund && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "refunds")/**/)
|
1612 |
-
{
|
1613 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
1614 |
-
{
|
1615 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"]) /* EOT enabled? */
|
1616 |
-
{
|
1617 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_eot_behavior"] === "demote")
|
1618 |
-
{
|
1619 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1620 |
-
/**/
|
1621 |
-
$eot_del_type = ($is_refund_or_reversal) ? /* Set EOT/Del type. */
|
1622 |
-
"ipn-refund-reversal-demotion" : "ipn-cancellation-expiration-demotion";
|
1623 |
-
/**/
|
1624 |
-
$demotion_role = c_ws_plugin__s2member_option_forces::force_demotion_role ("subscriber");
|
1625 |
-
$existing_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
1626 |
-
/**/
|
1627 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1628 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_before_demote", get_defined_vars ());
|
1629 |
-
do_action ("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars (), $eot_del_type, "modification", $demotion_role);
|
1630 |
-
do_action ("ws_plugin__s2member_during_collective_eots", $user_id, get_defined_vars (), $eot_del_type, "modification");
|
1631 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1632 |
-
/**/
|
1633 |
-
if ($existing_role !== $demotion_role) /* Only if NOT the existing Role. */
|
1634 |
-
$user->set_role ($demotion_role); /* Give User the demotion Role. */
|
1635 |
-
/**/
|
1636 |
-
foreach ($user->allcaps as $cap => $cap_enabled)
|
1637 |
-
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
1638 |
-
$user->remove_cap ($ccap = $cap);
|
1639 |
-
/**/
|
1640 |
-
delete_user_option ($user_id, "s2member_custom");
|
1641 |
-
delete_user_option ($user_id, "s2member_subscr_id");
|
1642 |
-
delete_user_option ($user_id, "s2member_subscr_gateway");
|
1643 |
-
/**/
|
1644 |
-
delete_user_option ($user_id, "s2member_ipn_signup_vars");
|
1645 |
-
/**/
|
1646 |
-
if (!apply_filters ("ws_plugin__s2member_preserve_paid_registration_times", true, get_defined_vars ()))
|
1647 |
-
delete_user_option ($user_id, "s2member_paid_registration_times");
|
1648 |
-
/**/
|
1649 |
-
delete_user_option ($user_id, "s2member_last_status_scan");
|
1650 |
-
delete_user_option ($user_id, "s2member_first_payment_txn_id");
|
1651 |
-
delete_user_option ($user_id, "s2member_last_payment_time");
|
1652 |
-
delete_user_option ($user_id, "s2member_auto_eot_time");
|
1653 |
-
/**/
|
1654 |
-
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
1655 |
-
delete_user_option ($user_id, "s2member_file_download_access_log");
|
1656 |
-
/**/
|
1657 |
-
c_ws_plugin__s2member_user_notes::append_user_notes ($user_id, "Demoted by s2Member: " . date ("D M j, Y g:i a T"));
|
1658 |
-
/**/
|
1659 |
-
$paypal["s2member_log"][] = "Member Level/Capabilities demoted to: " . ucwords (preg_replace ("/_/", " ", $demotion_role)) . ".";
|
1660 |
-
/**/
|
1661 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1662 |
-
{
|
1663 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_urls"]) as $url) /* Handle EOT Notifications. */
|
1664 |
-
/**/
|
1665 |
-
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_ds (urlencode ($eot_del_type)), $url)) && ($url = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["subscr_id"])), $url)))
|
1666 |
-
if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->first_name)), $url)) && ($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->last_name)), $url)))
|
1667 |
-
if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($user->first_name . " " . $user->last_name))), $url)))
|
1668 |
-
if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_email)), $url)))
|
1669 |
-
if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user->user_login)), $url)))
|
1670 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
1671 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
1672 |
-
{
|
1673 |
-
if (is_array ($fields) && !empty ($fields))
|
1674 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1675 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
1676 |
-
break;
|
1677 |
-
/**/
|
1678 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
1679 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
1680 |
-
}
|
1681 |
-
/**/
|
1682 |
-
$paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
|
1683 |
-
}
|
1684 |
-
/**/
|
1685 |
-
if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1686 |
-
{
|
1687 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - EOT/Deletion";
|
1688 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
1689 |
-
/**/
|
1690 |
-
$msg .= "eot_del_type: %%eot_del_type%%\n";
|
1691 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
1692 |
-
$msg .= "user_first_name: %%user_first_name%%\n";
|
1693 |
-
$msg .= "user_last_name: %%user_last_name%%\n";
|
1694 |
-
$msg .= "user_full_name: %%user_full_name%%\n";
|
1695 |
-
$msg .= "user_email: %%user_email%%\n";
|
1696 |
-
$msg .= "user_login: %%user_login%%\n";
|
1697 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
1698 |
-
$msg .= "user_id: %%user_id%%\n";
|
1699 |
-
/**/
|
1700 |
-
if (is_array ($fields) && !empty ($fields))
|
1701 |
-
foreach ($fields as $var => $val)
|
1702 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
1703 |
-
/**/
|
1704 |
-
$msg .= "cv0: %%cv0%%\n";
|
1705 |
-
$msg .= "cv1: %%cv1%%\n";
|
1706 |
-
$msg .= "cv2: %%cv2%%\n";
|
1707 |
-
$msg .= "cv3: %%cv3%%\n";
|
1708 |
-
$msg .= "cv4: %%cv4%%\n";
|
1709 |
-
$msg .= "cv5: %%cv5%%\n";
|
1710 |
-
$msg .= "cv6: %%cv6%%\n";
|
1711 |
-
$msg .= "cv7: %%cv7%%\n";
|
1712 |
-
$msg .= "cv8: %%cv8%%\n";
|
1713 |
-
$msg .= "cv9: %%cv9%%";
|
1714 |
-
/**/
|
1715 |
-
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_ds ($eot_del_type), $msg)) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $msg)))
|
1716 |
-
if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
|
1717 |
-
if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
|
1718 |
-
if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
|
1719 |
-
if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
|
1720 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
1721 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
1722 |
-
{
|
1723 |
-
if (is_array ($fields) && !empty ($fields))
|
1724 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1725 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
1726 |
-
break;
|
1727 |
-
/**/
|
1728 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
1729 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_del_notification_recipients"])) as $recipient)
|
1730 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_eot_del_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_eot_del_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
1731 |
-
}
|
1732 |
-
/**/
|
1733 |
-
$paypal["s2member_log"][] = "EOT/Deletion Notification Emails have been processed.";
|
1734 |
-
}
|
1735 |
-
/**/
|
1736 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1737 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_demote", get_defined_vars ());
|
1738 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1739 |
-
}
|
1740 |
-
/**/
|
1741 |
-
else if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_eot_behavior"] === "delete")
|
1742 |
-
{
|
1743 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1744 |
-
/**/
|
1745 |
-
$eot_del_type = $GLOBALS["ws_plugin__s2member_eot_del_type"] = /* Configure EOT/Del type. */
|
1746 |
-
($is_refund_or_reversal) ? "ipn-refund-reversal-deletion" : "ipn-cancellation-expiration-deletion";
|
1747 |
-
/**/
|
1748 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1749 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_before_delete", get_defined_vars ());
|
1750 |
-
do_action ("ws_plugin__s2member_during_collective_eots", $user_id, get_defined_vars (), $eot_del_type, "removal-deletion");
|
1751 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1752 |
-
/**/
|
1753 |
-
if (is_multisite ()) /* Multisite does NOT actually delete; ONLY removes. */
|
1754 |
-
{
|
1755 |
-
remove_user_from_blog ($user_id, $current_blog->blog_id);
|
1756 |
-
/* This will automatically trigger `eot_del_notification_urls` as well. */
|
1757 |
-
c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions ($user_id, $current_blog->blog_id, "s2says");
|
1758 |
-
}
|
1759 |
-
/**/
|
1760 |
-
else /* Otherwise, we can actually delete them. */
|
1761 |
-
/* This will automatically trigger `eot_del_notification_urls` as well. */
|
1762 |
-
wp_delete_user($user_id); /* `c_ws_plugin__s2member_user_deletions::handle_user_deletions()` */
|
1763 |
-
/**/
|
1764 |
-
$paypal["s2member_log"][] = "This Member's account has been " . ((is_multisite ()) ? "removed" : "deleted") . ".";
|
1765 |
-
/**/
|
1766 |
-
$paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
|
1767 |
-
/**/
|
1768 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1769 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_delete", get_defined_vars ());
|
1770 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1771 |
-
}
|
1772 |
-
/**/
|
1773 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1774 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot", get_defined_vars ());
|
1775 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1776 |
-
}
|
1777 |
-
/**/
|
1778 |
-
else /* Otherwise, treat this as if it were a cancellation. EOTs are currently disabled. */
|
1779 |
-
{
|
1780 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1781 |
-
/**/
|
1782 |
-
update_user_option ($user_id, "s2member_auto_eot_time", ($auto_eot_time = strtotime ("now")));
|
1783 |
-
/**/
|
1784 |
-
$paypal["s2member_log"][] = "Auto-EOT is currently disabled. Skipping immediate EOT (demote|delete), for now.";
|
1785 |
-
$paypal["s2member_log"][] = "Recording the Auto-EOT Time for this Member's account: " . date ("D M j, Y g:i a T", $auto_eot_time);
|
1786 |
-
/**/
|
1787 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1788 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_disabled", get_defined_vars ());
|
1789 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1790 |
-
}
|
1791 |
-
}
|
1792 |
-
else
|
1793 |
-
$paypal["s2member_log"][] = "Unable to (demote|delete) Member. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
1794 |
-
}
|
1795 |
-
/**/
|
1796 |
-
else if ($is_delayed_eot && !get_user_option ("s2member_auto_eot_time", $user_id))
|
1797 |
-
{
|
1798 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
1799 |
-
{
|
1800 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1801 |
-
/**/
|
1802 |
-
$auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ($user_id, $paypal["period1"], $paypal["period3"], "", time ());
|
1803 |
-
/* We assume the last payment was today, because this is how newer PayPal® accounts function with respect to EOT handling.
|
1804 |
-
Newer PayPal® accounts ( i.e. Subscription IDs starting with `I-`, will have their EOT triggered upon the last payment. */
|
1805 |
-
update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time); /* s2Member will follow-up on this later. */
|
1806 |
-
/**/
|
1807 |
-
$paypal["s2member_log"][] = "Auto-EOT Time for this account ( delayed ), set to: " . date ("D M j, Y g:i a T", $auto_eot_time);
|
1808 |
-
/**/
|
1809 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1810 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_delayed", get_defined_vars ());
|
1811 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1812 |
-
}
|
1813 |
-
else
|
1814 |
-
$paypal["s2member_log"][] = "Ignoring Delayed EOT. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
1815 |
-
}
|
1816 |
-
/**/
|
1817 |
-
else if (!$is_refund_or_reversal || $is_delayed_eot)
|
1818 |
-
$paypal["s2member_log"][] = "Skipping (demote|delete) Member, for now. An Auto-EOT Time is already set for this account. When an Auto-EOT Time has been recorded, s2Member will handle EOT (demote|delete) events using it's own Auto-EOT System - internally.";
|
1819 |
-
/**/
|
1820 |
-
else if ($is_reversal)
|
1821 |
-
$paypal["s2member_log"][] = "Skipping (demote|delete) Member. Your configuration dictates that s2Member should NOT take any immediate action on an EOT associated with a Chargeback Reversal. An s2Member API Notification will still be processed however.";
|
1822 |
-
/**/
|
1823 |
-
else if ($is_refund)
|
1824 |
-
$paypal["s2member_log"][] = "Skipping (demote|delete) Member. Your configuration dictates that s2Member should NOT take any immediate action on an EOT associated with a Refund. An s2Member API Notification will still be processed however.";
|
1825 |
-
}
|
1826 |
-
else if ($is_delayed_eot) /* Otherwise, we need to re-generate/store this IPN into a Transient Queue. Then re-process it on registration. */
|
1827 |
-
{
|
1828 |
-
$paypal["s2member_log"][] = "Skipping this IPN response, for now. The Subscr. ID is not associated with a registered Member.";
|
1829 |
-
/**/
|
1830 |
-
$ipn = array ("txn_type" => "subscr_eot"); /* Create a simulated IPN response for txn_type=subscr_eot. */
|
1831 |
-
/**/
|
1832 |
-
foreach ($paypal as $var => $val)
|
1833 |
-
if (in_array ($var, array ("subscr_gateway", "subscr_id", "custom", "invoice", "payer_email", "first_name", "last_name", "item_name", "item_number", "period1", "period3", "option_name1", "option_selection1", "option_name2", "option_selection2")))
|
1834 |
-
$ipn[$var] = $val;
|
1835 |
-
/**/
|
1836 |
-
$paypal["s2member_log"][] = "Re-generating. This IPN will go into a Transient Queue; and be re-processed during registration.";
|
1837 |
-
/**/
|
1838 |
-
set_transient ("s2m_" . md5 ("s2member_transient_ipn_subscr_eot_" . $paypal["subscr_id"]), $ipn, 43200);
|
1839 |
-
}
|
1840 |
-
/**/
|
1841 |
-
else
|
1842 |
-
$paypal["s2member_log"][] = "Unable to (demote|delete) Member. Could not get the existing User ID from the DB. It's possible that it was ALREADY processed through another IPN, removed manually by a Site Administrator, or by s2Member's Auto-EOT Sys.";
|
1843 |
-
/*
|
1844 |
-
Refunds and chargeback reversals. This is excluded from the processing check, because a Member *could* have already been (demoted|deleted).
|
1845 |
-
In other words, s2Member sends `Refund/Reversal` Notifications ANYTIME a Refund/Reversal occurs; even if s2Member did not process it otherwise.
|
1846 |
-
Since this routine ignores the processing check, it is *possible* that Refund/Reversal Notification URLs will be contacted more than once.
|
1847 |
-
If you're writing scripts that depend on Refund/Reversal Notifications, please keep this in mind.
|
1848 |
-
*/
|
1849 |
-
if ($is_refund_or_reversal) /* Here we access this variable that was previously assigned as a quick method of Refund/Reversal detection. */
|
1850 |
-
{
|
1851 |
-
$fields = ($user_id) ? get_user_option ("s2member_custom_fields", $user_id) : array (); /* These will be needed below. */
|
1852 |
-
$user_reg_ip = ($user_id) ? get_user_option ("s2member_registration_ip", $user_id) : ""; /* Needed below. */
|
1853 |
-
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
1854 |
-
/**/
|
1855 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1856 |
-
{
|
1857 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_urls"]) as $url)
|
1858 |
-
/**/
|
1859 |
-
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_ds (urlencode ($paypal["subscr_id"])), $url)) && ($url = preg_replace ("/%%parent_txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["parent_txn_id"])), $url)))
|
1860 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
1861 |
-
if (($url = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_fee"])), $url)))
|
1862 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
1863 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
1864 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
1865 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_reg_ip)), $url)))
|
1866 |
-
if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
|
1867 |
-
{
|
1868 |
-
if (is_array ($fields) && !empty ($fields))
|
1869 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1870 |
-
if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
|
1871 |
-
break;
|
1872 |
-
/**/
|
1873 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
1874 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
1875 |
-
}
|
1876 |
-
/**/
|
1877 |
-
$paypal["s2member_log"][] = "Refund/Reversal Notification URLs have been processed.";
|
1878 |
-
}
|
1879 |
-
/**/
|
1880 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1881 |
-
{
|
1882 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Refund/Reversal";
|
1883 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
1884 |
-
/**/
|
1885 |
-
$msg .= "subscr_id: %%subscr_id%%\n";
|
1886 |
-
$msg .= "parent_txn_id: %%parent_txn_id%%\n";
|
1887 |
-
$msg .= "item_number: %%item_number%%\n";
|
1888 |
-
$msg .= "item_name: %%item_name%%\n";
|
1889 |
-
$msg .= "-amount: %%-amount%%\n";
|
1890 |
-
$msg .= "-fee: %%-fee%%\n";
|
1891 |
-
$msg .= "first_name: %%first_name%%\n";
|
1892 |
-
$msg .= "last_name: %%last_name%%\n";
|
1893 |
-
$msg .= "full_name: %%full_name%%\n";
|
1894 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
1895 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
1896 |
-
$msg .= "user_id: %%user_id%%\n";
|
1897 |
-
/**/
|
1898 |
-
if (is_array ($fields) && !empty ($fields))
|
1899 |
-
foreach ($fields as $var => $val)
|
1900 |
-
$msg .= $var . ": %%" . $var . "%%\n";
|
1901 |
-
/**/
|
1902 |
-
$msg .= "cv0: %%cv0%%\n";
|
1903 |
-
$msg .= "cv1: %%cv1%%\n";
|
1904 |
-
$msg .= "cv2: %%cv2%%\n";
|
1905 |
-
$msg .= "cv3: %%cv3%%\n";
|
1906 |
-
$msg .= "cv4: %%cv4%%\n";
|
1907 |
-
$msg .= "cv5: %%cv5%%\n";
|
1908 |
-
$msg .= "cv6: %%cv6%%\n";
|
1909 |
-
$msg .= "cv7: %%cv7%%\n";
|
1910 |
-
$msg .= "cv8: %%cv8%%\n";
|
1911 |
-
$msg .= "cv9: %%cv9%%";
|
1912 |
-
/**/
|
1913 |
-
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_ds ($paypal["subscr_id"]), $msg)) && ($msg = preg_replace ("/%%parent_txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["parent_txn_id"]), $msg)))
|
1914 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
1915 |
-
if (($msg = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_fee"]), $msg)))
|
1916 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
1917 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
1918 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
1919 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
|
1920 |
-
if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
|
1921 |
-
{
|
1922 |
-
if (is_array ($fields) && !empty ($fields))
|
1923 |
-
foreach ($fields as $var => $val) /* Custom Registration Fields. */
|
1924 |
-
if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
|
1925 |
-
break;
|
1926 |
-
/**/
|
1927 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
1928 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ref_rev_notification_recipients"])) as $recipient)
|
1929 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_ref_rev_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_ref_rev_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
1930 |
-
}
|
1931 |
-
/**/
|
1932 |
-
$paypal["s2member_log"][] = "Refund/Reversal Notification Emails have been processed.";
|
1933 |
-
}
|
1934 |
-
/**/
|
1935 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1936 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_refund_reversal", get_defined_vars ());
|
1937 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1938 |
-
}
|
1939 |
-
/**/
|
1940 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1941 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_eot", get_defined_vars ());
|
1942 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1943 |
-
}
|
1944 |
-
/*
|
1945 |
-
Refunds/Reversals for Specific Post/Page Access.
|
1946 |
-
These are handled separately.
|
1947 |
-
|
1948 |
-
~ NOTE: "new_case" with "case_type=chargeback" is NOT actually processed. It's only been integrated for the future compatibility.
|
1949 |
-
At this time, PayPal® doesn't send enough information through "new_case" transactions for s2Member to process anything.
|
1950 |
-
However, that's OK. Refunds and Reversals ( i.e. chargebacks ) are still detected through "payment_status".
|
1951 |
-
|
1952 |
-
~ NOTE: Partial Refunds ( i.e. payment_status=partially_refunded ) is NOT processed by this routine, or any other s2Member routine.
|
1953 |
-
( This is the intended behavior. A Partial Refund does NOT clearly indicate that s2Member should do anything at all. )
|
1954 |
-
HOWEVER. PayPal® does NOT always send payment_status=partially_refunded. This is well documented on their site, but in
|
1955 |
-
practice, it never seems to happen. It's best to check the negative mc_gross amount instead.
|
1956 |
-
*/
|
1957 |
-
else if (/**/(/**/(preg_match ("/^new_case$/i", $paypal["txn_type"]) && preg_match ("/^chargeback$/i", $paypal["case_type"])) /* Future compatibility. */
|
1958 |
-
|| (preg_match ("/^(refunded|reversed|reversal)$/i", $paypal["payment_status"])) /* The "txn_type" is irrelevant in all these special situations. */)/**/
|
1959 |
-
&& ($paypal["item_number"] || ($paypal["item_number"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_number ($paypal))) /* Item number. */
|
1960 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $paypal["item_number"])) /* "Specific Post/Page Access". */
|
1961 |
-
&& ($paypal["item_name"] || ($paypal["item_name"] = c_ws_plugin__s2member_paypal_utilities::paypal_pro_item_name ($paypal)) || ($paypal["item_name"] = $_SERVER["HTTP_HOST"]))/**/
|
1962 |
-
/* The item_name can default to HTTP_HOST because we've seen payment_status=reversed come through WITHOUT a product_name or item_name given. */
|
1963 |
-
&& ($paypal["payer_email"]) && ($paypal["parent_txn_id"])/**/)
|
1964 |
-
{
|
1965 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
1966 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_before_sp_refund_reversal", get_defined_vars ());
|
1967 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
1968 |
-
/**/
|
1969 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as [empty or irrelevant] w/ payment_status (refunded|reversed|reversal) - or - new_case w/ case_type (chargeback).";
|
1970 |
-
/**/
|
1971 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
1972 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
1973 |
-
/**/
|
1974 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
1975 |
-
/*
|
1976 |
-
Refunds and chargeback reversals. This is excluded from the processing check.
|
1977 |
-
In other words, s2Member sends `Refund/Reversal` Notifications ANYTIME a Refund/Reversal occurs; even if s2Member did not process it otherwise.
|
1978 |
-
Since this routine ignores the processing check, it is *possible* that Refund/Reversal Notification URLs will be contacted more than once.
|
1979 |
-
If you're writing scripts that depend on Refund/Reversal Notifications, please keep this in mind.
|
1980 |
-
*/
|
1981 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
1982 |
-
{
|
1983 |
-
foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_urls"]) as $url)
|
1984 |
-
/**/
|
1985 |
-
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_ds (urlencode ($paypal["parent_txn_id"])), $url)))
|
1986 |
-
if (($url = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["item_name"])), $url)))
|
1987 |
-
if (($url = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["mc_fee"])), $url)))
|
1988 |
-
if (($url = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["last_name"])), $url)))
|
1989 |
-
if (($url = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
|
1990 |
-
if (($url = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["payer_email"])), $url)))
|
1991 |
-
if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["ip"])), $url)))
|
1992 |
-
/**/
|
1993 |
-
if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
|
1994 |
-
c_ws_plugin__s2member_utils_urls::remote ($url);
|
1995 |
-
/**/
|
1996 |
-
$paypal["s2member_log"][] = "Specific Post/Page ~ Refund/Reversal Notification URLs have been processed.";
|
1997 |
-
}
|
1998 |
-
/**/
|
1999 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
2000 |
-
{
|
2001 |
-
$msg = $sbj = "( s2Member / API Notification Email ) - Specific Post/Page ~ Refund/Reversal";
|
2002 |
-
$msg .= "\n\n"; /* Spacing in the message body. */
|
2003 |
-
/**/
|
2004 |
-
$msg .= "parent_txn_id: %%parent_txn_id%%\n";
|
2005 |
-
$msg .= "item_number: %%item_number%%\n";
|
2006 |
-
$msg .= "item_name: %%item_name%%\n";
|
2007 |
-
$msg .= "-amount: %%-amount%%\n";
|
2008 |
-
$msg .= "-fee: %%-fee%%\n";
|
2009 |
-
$msg .= "first_name: %%first_name%%\n";
|
2010 |
-
$msg .= "last_name: %%last_name%%\n";
|
2011 |
-
$msg .= "full_name: %%full_name%%\n";
|
2012 |
-
$msg .= "payer_email: %%payer_email%%\n";
|
2013 |
-
$msg .= "user_ip: %%user_ip%%\n";
|
2014 |
-
/**/
|
2015 |
-
$msg .= "cv0: %%cv0%%\n";
|
2016 |
-
$msg .= "cv1: %%cv1%%\n";
|
2017 |
-
$msg .= "cv2: %%cv2%%\n";
|
2018 |
-
$msg .= "cv3: %%cv3%%\n";
|
2019 |
-
$msg .= "cv4: %%cv4%%\n";
|
2020 |
-
$msg .= "cv5: %%cv5%%\n";
|
2021 |
-
$msg .= "cv6: %%cv6%%\n";
|
2022 |
-
$msg .= "cv7: %%cv7%%\n";
|
2023 |
-
$msg .= "cv8: %%cv8%%\n";
|
2024 |
-
$msg .= "cv9: %%cv9%%";
|
2025 |
-
/**/
|
2026 |
-
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_ds ($paypal["parent_txn_id"]), $msg)))
|
2027 |
-
if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
|
2028 |
-
if (($msg = preg_replace ("/%%-amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%-fee%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_fee"]), $msg)))
|
2029 |
-
if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
|
2030 |
-
if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
|
2031 |
-
if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
|
2032 |
-
if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $msg)))
|
2033 |
-
/**/
|
2034 |
-
if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
|
2035 |
-
foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_ref_rev_notification_recipients"])) as $recipient)
|
2036 |
-
($recipient) ? wp_mail ($recipient, apply_filters ("ws_plugin__s2member_sp_ref_rev_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_sp_ref_rev_notification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") : null;
|
2037 |
-
/**/
|
2038 |
-
$paypal["s2member_log"][] = "Specific Post/Page ~ Refund/Reversal Notification Emails have been processed.";
|
2039 |
-
}
|
2040 |
-
/**/
|
2041 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
2042 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_during_sp_refund_reversal", get_defined_vars ());
|
2043 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
2044 |
-
/**/
|
2045 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
2046 |
-
do_action ("ws_plugin__s2member_during_paypal_notify_after_sp_refund_reversal", get_defined_vars ());
|
2047 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
2048 |
-
}
|
2049 |
-
else
|
2050 |
-
$paypal["s2member_log"][] = "Ignoring this IPN request. The txn_type/status does NOT require any action on the part of s2Member.";
|
2051 |
}
|
2052 |
else /* Else a custom conditional has been applied by Filters. */
|
2053 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
2054 |
}
|
2055 |
-
|
2056 |
-
|
2057 |
-
*/
|
2058 |
-
else if (preg_match ("/^recurring_payment_profile_cancel$/i", $paypal["txn_type"]))
|
2059 |
{
|
2060 |
-
$paypal["s2member_log"][] = "Transaction type ( recurring_payment_profile_cancel ), but there is no match to an existing account; so verification of _SERVER[HTTP_HOST] was not possible.";
|
2061 |
$paypal["s2member_log"][] = "It's likely this account was just upgraded/downgraded by s2Member Pro; so the Subscr. ID has probably been updated on-site; nothing to worry about here.";
|
2062 |
}
|
2063 |
-
/*
|
2064 |
-
Else, check on other ^recurring_ transaction types.
|
2065 |
-
*/
|
2066 |
-
else if (preg_match ("/^recurring_/i", $paypal["txn_type"])) /* Otherwise, is this a ^recurring_ txn_type? */
|
2067 |
-
$paypal["s2member_log"][] = "Transaction type ( ^recurring_? ), but there is no match to an existing account; so verification of _SERVER[HTTP_HOST] was not possible.";
|
2068 |
/**/
|
2069 |
-
else
|
2070 |
-
$paypal["s2member_log"][] = "
|
|
|
|
|
|
|
2071 |
}
|
2072 |
/**/
|
2073 |
else /* Extensive log reporting here. This is an area where many site owners find trouble. Depending on server configuration; remote HTTPS connections may fail. */
|
2074 |
{
|
2075 |
-
$paypal["s2member_log"][] = "Unable to verify
|
2076 |
-
$paypal["s2member_log"][] = "If you're absolutely SURE that your
|
2077 |
-
$paypal["s2member_log"][] = "s2Member uses the WP_Http class for remote connections; which will try to use cURL first, and then fall back on the FOPEN method when cURL is not available. On a Windows® server, you may have to disable your cURL extension
|
|
|
2078 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
2079 |
}
|
2080 |
/*
|
2081 |
-
Add IPN proxy ( when available ) to the
|
2082 |
*/
|
2083 |
-
if ($_GET["s2member_paypal_proxy"])
|
2084 |
$paypal["s2member_paypal_proxy"] = $_GET["s2member_paypal_proxy"];
|
2085 |
/*
|
2086 |
-
Add IPN proxy use vars ( when available ) to the
|
2087 |
*/
|
2088 |
-
if ($_GET["s2member_paypal_proxy_use"])
|
2089 |
$paypal["s2member_paypal_proxy_use"] = $_GET["s2member_paypal_proxy_use"];
|
2090 |
/*
|
2091 |
-
Also add IPN proxy self-verification ( when available ) to the
|
2092 |
*/
|
2093 |
-
if ($_GET["s2member_paypal_proxy_verification"])
|
2094 |
$paypal["s2member_paypal_proxy_verification"] = $_GET["s2member_paypal_proxy_verification"];
|
2095 |
/*
|
2096 |
-
If debugging/logging is enabled; we need to append
|
2097 |
Logging now supports Multisite Networking as well.
|
2098 |
*/
|
2099 |
$logv = c_ws_plugin__s2member_utilities::ver_details ();
|
@@ -2106,16 +178,16 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in"))
|
|
2106 |
if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
|
2107 |
file_put_contents ($logs_dir . "/" . $log2, $logv . "\n" . $log4 . "\n" . var_export ($paypal, true) . "\n\n", FILE_APPEND);
|
2108 |
/**/
|
2109 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
2110 |
do_action ("ws_plugin__s2member_during_paypal_notify", get_defined_vars ());
|
2111 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
2112 |
/**/
|
2113 |
-
header("HTTP/1.0 200 OK"); /* Send a 200 OK status header. */
|
2114 |
-
header("Content-Type: text/plain; charset=utf-8"); /* With text/plain. */
|
2115 |
-
exit($paypal["s2member_paypal_proxy_return_url"])
|
2116 |
}
|
2117 |
/**/
|
2118 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
2119 |
do_action ("ws_plugin__s2member_after_paypal_notify", get_defined_vars ());
|
2120 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
2121 |
}
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in"))
|
21 |
{
|
46 |
* @attaches-to: ``add_action("init");``
|
47 |
*
|
48 |
* @return null Or exits script execution after handling IPN procesing.
|
|
|
|
|
|
|
49 |
*/
|
50 |
public static function paypal_notify ()
|
51 |
{
|
53 |
/**/
|
54 |
do_action ("ws_plugin__s2member_before_paypal_notify", get_defined_vars ());
|
55 |
/**/
|
56 |
+
if (!empty ($_GET["s2member_paypal_notify"]) && ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"] || !empty ($_GET["s2member_paypal_proxy"])))
|
57 |
{
|
58 |
+
@ignore_user_abort (true); /* Important. Continue processing even if/when the connection is broken by the sending party. */
|
59 |
/**/
|
60 |
include_once ABSPATH . "wp-admin/includes/admin.php"; /* Get administrative functions. Needed for `wp_delete_user()`. */
|
61 |
/**/
|
62 |
c_ws_plugin__s2member_email_configs::email_config_release (); /* Release Filters on wp_mail() / From: headers. */
|
63 |
/**/
|
64 |
+
if (is_array ($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars ()) && ($_paypal = $paypal) && ($_paypal_s = serialize ($_paypal)))
|
65 |
{
|
66 |
$paypal["s2member_log"][] = "IPN received on: " . date ("D M j, Y g:i:s a T");
|
67 |
+
$paypal["s2member_log"][] = "s2Member POST vars verified " . ((!empty ($paypal["proxy_verified"])) ? "with a Proxy Key" : "through a POST back to PayPal®.");
|
68 |
/**/
|
69 |
$payment_status_issues = "/^(failed|denied|expired|refunded|partially_refunded|reversed|reversal|canceled_reversal|voided)$/i";
|
70 |
/**/
|
71 |
+
$paypal["subscr_gateway"] = (!empty ($_GET["s2member_paypal_proxy"])) ? esc_html (trim (stripslashes ($_GET["s2member_paypal_proxy"]))) : "paypal";
|
72 |
+
/**/
|
73 |
+
if (empty ($paypal["custom"]) && !empty ($paypal["recurring_payment_id"])) /* Lookup on Recurring Profiles? */
|
74 |
+
$paypal["custom"] = c_ws_plugin__s2member_utils_users::get_user_custom_with ($paypal["recurring_payment_id"]);
|
75 |
/**/
|
76 |
+
if (!empty ($paypal["custom"]) && preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", $paypal["custom"]))
|
77 |
+
{
|
78 |
+
$paypal["s2member_log"][] = "s2Member originating domain ( `\$_SERVER[\"HTTP_HOST\"]` ) validated.";
|
79 |
+
/**/
|
80 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
if (!apply_filters ("ws_plugin__s2member_during_paypal_notify_conditionals", false, get_defined_vars ()))
|
82 |
{
|
83 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
84 |
+
/**/
|
85 |
+
if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_virtual_terminal::cp (get_defined_vars ())))
|
86 |
+
$paypal = $_paypal_cp;
|
87 |
+
/**/
|
88 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_express_checkout::cp (get_defined_vars ())))
|
89 |
+
$paypal = $_paypal_cp;
|
90 |
+
/**/
|
91 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_cart::cp (get_defined_vars ())))
|
92 |
+
$paypal = $_paypal_cp;
|
93 |
+
/**/
|
94 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_send_money::cp (get_defined_vars ())))
|
95 |
+
$paypal = $_paypal_cp;
|
96 |
+
/**/
|
97 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_web_accept_sp::cp (get_defined_vars ())))
|
98 |
+
$paypal = $_paypal_cp;
|
99 |
+
/**/
|
100 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level::cp (get_defined_vars ())))
|
101 |
+
$paypal = $_paypal_cp;
|
102 |
+
/**/
|
103 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_rec_profile_creation_w_level::cp (get_defined_vars ())))
|
104 |
+
$paypal = $_paypal_cp;
|
105 |
+
/**/
|
106 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level::cp (get_defined_vars ())))
|
107 |
+
$paypal = $_paypal_cp;
|
108 |
+
/**/
|
109 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_level::cp (get_defined_vars ())))
|
110 |
+
$paypal = $_paypal_cp;
|
111 |
+
/**/
|
112 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_failed_w_level::cp (get_defined_vars ())))
|
113 |
+
$paypal = $_paypal_cp;
|
114 |
+
/**/
|
115 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancellation_w_level::cp (get_defined_vars ())))
|
116 |
+
$paypal = $_paypal_cp;
|
117 |
+
/**/
|
118 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_level::cp (get_defined_vars ())))
|
119 |
+
$paypal = $_paypal_cp;
|
120 |
+
/**/
|
121 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_notify_in_sp_refund_reversal::cp (get_defined_vars ())))
|
122 |
+
$paypal = $_paypal_cp;
|
123 |
+
/**/
|
124 |
+
else /* Ignoring this IPN request. The txn_type/status does NOT require any action. */
|
125 |
+
$paypal["s2member_log"][] = "Ignoring this IPN request. The `txn_type/status` does NOT require any action on the part of s2Member.";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
}
|
127 |
else /* Else a custom conditional has been applied by Filters. */
|
128 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
129 |
}
|
130 |
+
/**/
|
131 |
+
else if (!empty ($paypal["txn_type"]) && preg_match ("/^recurring_payment_profile_cancel$/i", $paypal["txn_type"]))
|
|
|
|
|
132 |
{
|
133 |
+
$paypal["s2member_log"][] = "Transaction type ( `recurring_payment_profile_cancel` ), but there is no match to an existing account; so verification of `\$_SERVER[\"HTTP_HOST\"]` was not possible.";
|
134 |
$paypal["s2member_log"][] = "It's likely this account was just upgraded/downgraded by s2Member Pro; so the Subscr. ID has probably been updated on-site; nothing to worry about here.";
|
135 |
}
|
|
|
|
|
|
|
|
|
|
|
136 |
/**/
|
137 |
+
else if (!empty ($paypal["txn_type"]) && preg_match ("/^recurring_/i", $paypal["txn_type"])) /* Otherwise, is this a ^recurring_ txn_type? */
|
138 |
+
$paypal["s2member_log"][] = "Transaction type ( `^recurring_?` ), but there is no match to an existing account; so verification of `\$_SERVER[\"HTTP_HOST\"]` was not possible.";
|
139 |
+
/**/
|
140 |
+
else /* Else, use the default ``$_SERVER["HTTP_HOST"]`` error. */
|
141 |
+
$paypal["s2member_log"][] = "Unable to verify `\$_SERVER[\"HTTP_HOST\"]`. Please check the `custom` value in your Button Code. It MUST start with your domain name.";
|
142 |
}
|
143 |
/**/
|
144 |
else /* Extensive log reporting here. This is an area where many site owners find trouble. Depending on server configuration; remote HTTPS connections may fail. */
|
145 |
{
|
146 |
+
$paypal["s2member_log"][] = "Unable to verify \$_POST vars. This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility.";
|
147 |
+
$paypal["s2member_log"][] = "If you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.";
|
148 |
+
$paypal["s2member_log"][] = "s2Member uses the `WP_Http` class for remote connections; which will try to use `cURL` first, and then fall back on the `FOPEN` method when `cURL` is not available. On a Windows® server, you may have to disable your `cURL` extension; and instead, set `allow_url_fopen = yes` in your php.ini file. The `cURL` extension (usually) does NOT support SSL connections on a Windows® server.";
|
149 |
+
$paypal["s2member_log"][] = "Please see this thread: `http://www.primothemes.com/forums/viewtopic.php?f=36&t=2636` for details regarding the ideal server configuration for s2Member.";
|
150 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
151 |
}
|
152 |
/*
|
153 |
+
Add IPN proxy ( when available ) to the ``$paypal`` array.
|
154 |
*/
|
155 |
+
if (!empty ($_GET["s2member_paypal_proxy"]))
|
156 |
$paypal["s2member_paypal_proxy"] = $_GET["s2member_paypal_proxy"];
|
157 |
/*
|
158 |
+
Add IPN proxy use vars ( when available ) to the ``$paypal`` array.
|
159 |
*/
|
160 |
+
if (!empty ($_GET["s2member_paypal_proxy_use"]))
|
161 |
$paypal["s2member_paypal_proxy_use"] = $_GET["s2member_paypal_proxy_use"];
|
162 |
/*
|
163 |
+
Also add IPN proxy self-verification ( when available ) to the ``$paypal`` array.
|
164 |
*/
|
165 |
+
if (!empty ($_GET["s2member_paypal_proxy_verification"]))
|
166 |
$paypal["s2member_paypal_proxy_verification"] = $_GET["s2member_paypal_proxy_verification"];
|
167 |
/*
|
168 |
+
If debugging/logging is enabled; we need to append ``$paypal`` to the log file.
|
169 |
Logging now supports Multisite Networking as well.
|
170 |
*/
|
171 |
$logv = c_ws_plugin__s2member_utilities::ver_details ();
|
178 |
if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
|
179 |
file_put_contents ($logs_dir . "/" . $log2, $logv . "\n" . $log4 . "\n" . var_export ($paypal, true) . "\n\n", FILE_APPEND);
|
180 |
/**/
|
181 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
182 |
do_action ("ws_plugin__s2member_during_paypal_notify", get_defined_vars ());
|
183 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
184 |
/**/
|
185 |
+
header ("HTTP/1.0 200 OK"); /* Send a 200 OK status header. */
|
186 |
+
header ("Content-Type: text/plain; charset=utf-8"); /* With text/plain ( supporting a possible return URL ). */
|
187 |
+
exit (((!empty ($paypal["s2member_paypal_proxy_return_url"])) ? $paypal["s2member_paypal_proxy_return_url"] : ""));
|
188 |
}
|
189 |
/**/
|
190 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
191 |
do_action ("ws_plugin__s2member_after_paypal_notify", get_defined_vars ());
|
192 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
193 |
}
|
includes/classes/paypal-return-in-no-tx-data.inc.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_return_in_no_tx_data"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_return_in_no_tx_data
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_return_in::paypal_return()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
44 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_no_return_data", get_defined_vars ());
|
45 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
46 |
+
/**/
|
47 |
+
$paypal["s2member_log"][] = "No Return-Data. Customer must wait for Email Confirmation.";
|
48 |
+
/**/
|
49 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_no_return_data", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if ($custom_success_redirection) /* Using a custom success redirection URL? */
|
54 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL on success: " . $custom_success_redirection . ". However, the Customer MUST wait for Email Confirmation.";
|
55 |
+
else /* Else we use the default redirection URL for this scenario, which is the Home Page. */
|
56 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page. Customer must wait for Email Confirmation.";
|
57 |
+
/**/
|
58 |
+
$paypal["s2member_log"][] = "Note. This can sometimes happen when/if you are offering a free Trial Period. There are times when a Payment Gateway will NOT supply s2Member with any data immediately after checkout. When/if this happens, s2Member must process the transaction via IPN only ( i.e. behind-the-scene ), and the Customer must wait for Email Confirmation in these cases.";
|
59 |
+
/**/
|
60 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
61 |
+
'<strong>Thank you! ( you MUST check your email before proceeding ).</strong><br /><br />* Note: It can take <em>( up to 15 minutes )</em> for Email Confirmation with important details. If you don\'t receive email confirmation in the next 15 minutes, please contact Support.' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"] || (c_ws_plugin__s2member_utils_conds::pro_is_installed () && !empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_" . $paypal["subscr_gateway"] . "_sandbox"]))) ? '<br /><br /><strong>** Sandbox Mode **</strong> You may NOT receive this Email in Sandbox Mode. Sandbox addresses are usually bogus (for testing).' : ''),/**/
|
62 |
+
(($custom_success_redirection) ? "Check Your Email ( Then Click Here )" : "Back To Home Page"), (($custom_success_redirection) ? $custom_success_redirection : home_url ("/")));
|
63 |
+
/**/
|
64 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
65 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_no_return_data", get_defined_vars ());
|
66 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
67 |
+
/**/
|
68 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_no_tx_data", $paypal, get_defined_vars ());
|
69 |
+
}
|
70 |
+
}
|
71 |
+
}
|
72 |
+
?>
|
includes/classes/paypal-return-in-proxy-ty-email.inc.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_return_in_proxy_ty_email"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_return_in_proxy_ty_email
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_return_in::paypal_return()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
44 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_explicit_ty_email", get_defined_vars ());
|
45 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
46 |
+
/**/
|
47 |
+
$paypal["s2member_log"][] = "Customer must wait for Email Confirmation `proxy_use`: ( `ty-email` ).";
|
48 |
+
/**/
|
49 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_explicit_ty_email", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if ($custom_success_redirection) /* Using a custom success redirection URL? */
|
54 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL on success: " . $custom_success_redirection . ". However, the Customer MUST wait for Email Confirmation `proxy_use`: ( `ty-email` ).";
|
55 |
+
else /* Else we use the default redirection URL for this scenario, which is the Home Page. */
|
56 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page. Customer must wait for Email Confirmation `proxy_use`: ( `ty-email` ).";
|
57 |
+
/**/
|
58 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
59 |
+
'<strong>Thank you! ( you MUST check your email before proceeding ).</strong><br /><br />* Note: It can take <em>( up to 15 minutes )</em> for Email Confirmation with important details. If you don\'t receive email confirmation in the next 15 minutes, please contact Support.' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"] || (c_ws_plugin__s2member_utils_conds::pro_is_installed () && !empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_" . $paypal["subscr_gateway"] . "_sandbox"]))) ? '<br /><br /><strong>** Sandbox Mode **</strong> You may NOT receive this Email in Sandbox Mode. Sandbox addresses are usually bogus (for testing).' : ''),/**/
|
60 |
+
(($custom_success_redirection) ? "Check Your Email ( Then Click Here )" : "Back To Home Page"), (($custom_success_redirection) ? $custom_success_redirection : home_url ("/")));
|
61 |
+
/**/
|
62 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
63 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_explicit_ty_email", get_defined_vars ());
|
64 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
65 |
+
/**/
|
66 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_proxy_ty_email", $paypal, get_defined_vars ());
|
67 |
+
}
|
68 |
+
}
|
69 |
+
}
|
70 |
+
?>
|
includes/classes/paypal-return-in-proxy-x-preview.inc.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_return_in_proxy_x_preview"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_return_in_proxy_x_preview
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_return_in::paypal_return()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*/
|
39 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
40 |
+
{
|
41 |
+
extract($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
/**/
|
43 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
44 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_explicit_x_preview", get_defined_vars ());
|
45 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
46 |
+
/**/
|
47 |
+
$paypal["s2member_log"][] = "Test preview of Return Page `proxy_use`: ( `x_preview` ).";
|
48 |
+
/**/
|
49 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_explicit_x_preview", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if ($custom_success_redirection) /* Using a custom success redirection URL? */
|
54 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL on success: " . $custom_success_redirection . ". Test preview of Return Page `proxy_use`: ( `x_preview` ).";
|
55 |
+
else /* Else we use the default redirection URL for this scenario, which is the Home Page. */
|
56 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page. Test preview of Return Page `proxy_use`: ( `x_preview` ).";
|
57 |
+
/**/
|
58 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
59 |
+
'<strong>Thank you! ( this is a preview, no action necessary ).</strong><br /><br />* Note: each of your Customers are returned back to your site immediately after they complete checkout. This Return Page displays a message and instructions for the Customer. s2Member may change the message and instructions dynamically, based on what the Customer is actually doing <em>( i.e. based on the type of transaction that is taking place )</em>.<br /><br /><em>* With <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank">s2Member Pro</a> installed, it is possible to customize this Return Page in various ways.</em>',/**/
|
60 |
+
"Continue ( Click Here )", (($custom_success_redirection) ? $custom_success_redirection : home_url ("/")));
|
61 |
+
/**/
|
62 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
63 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_explicit_x_preview", get_defined_vars ());
|
64 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
65 |
+
/**/
|
66 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_proxy_x_preview", $paypal, get_defined_vars ());
|
67 |
+
}
|
68 |
+
}
|
69 |
+
}
|
70 |
+
?>
|
includes/classes/paypal-return-in-subscr-modify-w-level.inc.php
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_return_in::paypal_return()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract ($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^subscr_modify$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& (!empty ($paypal["item_number"]) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (!empty ($paypal["subscr_id"]))/**/)
|
48 |
+
{
|
49 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
50 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_modify", get_defined_vars ());
|
51 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
52 |
+
/**/
|
53 |
+
if (!get_transient ($transient_rtn = "s2m_rtn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_rtn, time (), 31556926 * 10))
|
54 |
+
{
|
55 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as `subscr_modify`.";
|
56 |
+
/**/
|
57 |
+
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
58 |
+
/**/
|
59 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
60 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
61 |
+
$paypal["ip"] = (!$paypal["ip"] && $_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $paypal["ip"];
|
62 |
+
/**/
|
63 |
+
$paypal["period1"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
64 |
+
$paypal["mc_amount1"] = (strlen ($paypal["mc_amount1"]) && $paypal["mc_amount1"] > 0) ? $paypal["mc_amount1"] : "0.00"; /* "0.00". */
|
65 |
+
/**/
|
66 |
+
if (preg_match ("/^web_accept$/i", $paypal["txn_type"])) /* Conversions for Lifetime & Fixed-Term sales. */
|
67 |
+
{
|
68 |
+
$paypal["period3"] = ($paypal["eotper"]) ? $paypal["eotper"] : "1 L"; /* 1 Lifetime. */
|
69 |
+
$paypal["mc_amount3"] = $paypal["mc_gross"]; /* The "Buy Now" amount is the full gross. */
|
70 |
+
}
|
71 |
+
/**/
|
72 |
+
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
73 |
+
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
74 |
+
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
75 |
+
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
76 |
+
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
77 |
+
/**/
|
78 |
+
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
79 |
+
{
|
80 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
81 |
+
{
|
82 |
+
$processing = $modifying = $during = true; /* Yes, we ARE processing this. */
|
83 |
+
/**/
|
84 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
85 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
86 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
87 |
+
/**/
|
88 |
+
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
89 |
+
{
|
90 |
+
add_existing_user_to_blog (array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
91 |
+
$user = new WP_User ($user_id); /* Now update the $user object we're using. */
|
92 |
+
}
|
93 |
+
/**/
|
94 |
+
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
95 |
+
/**/
|
96 |
+
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
97 |
+
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
98 |
+
/**/
|
99 |
+
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
100 |
+
foreach ($user->allcaps as $cap => $cap_enabled)
|
101 |
+
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
102 |
+
$user->remove_cap ($ccap = $cap);
|
103 |
+
/**/
|
104 |
+
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
105 |
+
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
106 |
+
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
107 |
+
/**/
|
108 |
+
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
109 |
+
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
110 |
+
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
111 |
+
/**/
|
112 |
+
if (!get_user_option ("s2member_registration_ip", $user_id))
|
113 |
+
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
114 |
+
/**/
|
115 |
+
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
116 |
+
delete_user_option ($user_id, "s2member_file_download_access_log");
|
117 |
+
/**/
|
118 |
+
delete_user_option ($user_id, "s2member_auto_eot_time");
|
119 |
+
/**/
|
120 |
+
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
121 |
+
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
122 |
+
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
123 |
+
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
124 |
+
/**/
|
125 |
+
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
126 |
+
/**/
|
127 |
+
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated on Subscription modification.";
|
128 |
+
/**/
|
129 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
130 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_modify", get_defined_vars ());
|
131 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
132 |
+
/**/
|
133 |
+
if (($redirection_url_after_modification = apply_filters ("ws_plugin__s2member_redirection_url_after_modification", false, get_defined_vars ())))
|
134 |
+
{
|
135 |
+
$paypal["s2member_log"][] = "Redirecting this Member to a custom URL after modification: " . $redirection_url_after_modification;
|
136 |
+
/**/
|
137 |
+
wp_redirect ($redirection_url_after_modification);
|
138 |
+
}
|
139 |
+
else /* Else, use standard/default handling in this scenario. Have the Customer log in again. */
|
140 |
+
{
|
141 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page. They need to log back in.";
|
142 |
+
/**/
|
143 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
144 |
+
'<strong>Thank you! You\'ve been updated to:<br /><em>' . esc_html ($paypal["item_name"]) . '</em></strong>',/**/
|
145 |
+
"Please Log Back In ( Click Here )", wp_login_url ());
|
146 |
+
}
|
147 |
+
}
|
148 |
+
else /* Else, unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. */
|
149 |
+
{
|
150 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing.";
|
151 |
+
/**/
|
152 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
153 |
+
/**/
|
154 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
155 |
+
'<strong>ERROR:</strong> Unable to modify Subscription.<br />Please contact Support for assistance.<br /><br />The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing.',/**/
|
156 |
+
"Back To Home Page", home_url ("/"));
|
157 |
+
}
|
158 |
+
}
|
159 |
+
else /* Unable to modify Subscription. Could not get the existing User ID from the DB. */
|
160 |
+
{
|
161 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
|
162 |
+
/**/
|
163 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
164 |
+
/**/
|
165 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
166 |
+
'<strong>ERROR:</strong> Unable to modify Subscription.<br />Please contact Support for assistance.<br /><br />Could not get the existing User ID from the DB.',/**/
|
167 |
+
"Back To Home Page", home_url ("/"));
|
168 |
+
}
|
169 |
+
}
|
170 |
+
else /* Page Expired. Duplicate Return-Data. */
|
171 |
+
{
|
172 |
+
$paypal["s2member_log"][] = "Page Expired. Duplicate Return-Data.";
|
173 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as `subscr_modify`.";
|
174 |
+
$paypal["s2member_log"][] = "Page Expired. Redirecting Customer to the Home Page.";
|
175 |
+
/**/
|
176 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
177 |
+
'<strong>Page Expired:</strong> Duplicate Return-Data.<br />Please contact Support if you need any assistance.',/**/
|
178 |
+
"Back To Home Page", home_url ("/"));
|
179 |
+
}
|
180 |
+
/**/
|
181 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
182 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_modify", get_defined_vars ());
|
183 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
184 |
+
/**/
|
185 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level", $paypal, get_defined_vars ());
|
186 |
+
}
|
187 |
+
else
|
188 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level", false, get_defined_vars ());
|
189 |
+
}
|
190 |
+
}
|
191 |
+
}
|
192 |
+
?>
|
includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php
ADDED
@@ -0,0 +1,340 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_return_in::paypal_return()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract ($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^(web_accept|subscr_signup|subscr_payment)$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& (!empty ($paypal["item_number"]) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (!empty ($paypal["subscr_id"]) || (!empty ($paypal["txn_id"]) && ($paypal["subscr_id"] = $paypal["txn_id"])))/**/
|
48 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/)
|
49 |
+
{
|
50 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
51 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup", get_defined_vars ());
|
52 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
53 |
+
/**/
|
54 |
+
if (!get_transient ($transient_rtn = "s2m_rtn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_rtn, time (), 31556926 * 10))
|
55 |
+
{
|
56 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup|subscr_payment` ).";
|
57 |
+
/**/
|
58 |
+
list ($paypal["level"], $paypal["ccaps"], $paypal["eotper"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
59 |
+
/**/
|
60 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
61 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
62 |
+
$paypal["ip"] = (!$paypal["ip"] && $_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $paypal["ip"];
|
63 |
+
/**/
|
64 |
+
if (/**/(preg_match ("/^subscr_payment$/i", $paypal["txn_type"]) && !empty ($_GET["s2member_paypal_return_tra"])) /* Decrypt/unserialize. */
|
65 |
+
&& (($tra = c_ws_plugin__s2member_utils_encryption::decrypt (trim (stripslashes ($_GET["s2member_paypal_return_tra"])))) && is_array ($tra = maybe_unserialize ($tra)))/**/
|
66 |
+
&& (count ($tra) === 11 && isset ($tra["ta"], $tra["tp"], $tra["tt"], $tra["ra"], $tra["rp"], $tra["rt"], $tra["rr"], $tra["rrt"], $tra["rra"], $tra["invoice"], $tra["checksum"]))/**/
|
67 |
+
&& ($tra["invoice"] === $paypal["invoice"]) && ($tra["checksum"] === md5 ($paypal["invoice"] . $paypal["ip"] . $paypal["item_number"]))/**/)
|
68 |
+
{
|
69 |
+
$tracking_properties = true; /* Yes, these tracking properties ARE being set here. */
|
70 |
+
/**/
|
71 |
+
$paypal["period1"] = ($tra["rr"] !== "BN" && $tra["tp"]) ? $tra["tp"] . " " . $tra["tt"] : "0 D";
|
72 |
+
$paypal["mc_amount1"] = ($tra["rr"] !== "BN" && $tra["tp"]) ? number_format ($tra["ta"], 2, ".", "") : "0.00";
|
73 |
+
/**/
|
74 |
+
$paypal["period3"] = $tra["rp"] . " " . $tra["rt"];
|
75 |
+
$paypal["mc_amount3"] = $tra["ra"];
|
76 |
+
/**/
|
77 |
+
$paypal["recurring"] = ($tra["rr"] === "1") ? "1" : "0";
|
78 |
+
/**/
|
79 |
+
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
80 |
+
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
81 |
+
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
82 |
+
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
83 |
+
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
84 |
+
}
|
85 |
+
else if (preg_match ("/^(web_accept|subscr_signup)$/i", $paypal["txn_type"]))
|
86 |
+
{
|
87 |
+
$tracking_properties = true; /* Yes, these tracking properties ARE being set here. */
|
88 |
+
/**/
|
89 |
+
$paypal["period1"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
90 |
+
$paypal["mc_amount1"] = (strlen ($paypal["mc_amount1"]) && $paypal["mc_amount1"] > 0) ? $paypal["mc_amount1"] : "0.00"; /* "0.00". */
|
91 |
+
/**/
|
92 |
+
if (preg_match ("/^web_accept$/i", $paypal["txn_type"])) /* Conversions for Lifetime & Fixed-Term sales. */
|
93 |
+
{
|
94 |
+
$paypal["period3"] = ($paypal["eotper"]) ? $paypal["eotper"] : "1 L"; /* 1 Lifetime. */
|
95 |
+
$paypal["mc_amount3"] = $paypal["mc_gross"]; /* The "Buy Now" amount is the full gross. */
|
96 |
+
}
|
97 |
+
/**/
|
98 |
+
$paypal["initial_term"] = (preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["period1"] : "0 D"; /* Defaults to "0 D" ( zero days ). */
|
99 |
+
$paypal["initial"] = (strlen ($paypal["mc_amount1"]) && preg_match ("/^[1-9]/", $paypal["period1"])) ? $paypal["mc_amount1"] : $paypal["mc_amount3"];
|
100 |
+
$paypal["regular"] = $paypal["mc_amount3"]; /* This is the Regular Payment Amount that is charged to the Customer. Always required by PayPal®. */
|
101 |
+
$paypal["regular_term"] = $paypal["period3"]; /* This is just set to keep a standard; this way both initial_term & regular_term are available. */
|
102 |
+
$paypal["recurring"] = ($paypal["recurring"]) ? $paypal["mc_amount3"] : "0"; /* If non-recurring, this should be zero, otherwise Regular. */
|
103 |
+
}
|
104 |
+
/*
|
105 |
+
New Subscription with advanced update vars ( option_name1, option_selection1 )? Used in Subscr. Modifications.
|
106 |
+
*/
|
107 |
+
if (preg_match ("/(referenc|associat|updat|upgrad)/i", $paypal["option_name1"]) && $paypal["option_selection1"])
|
108 |
+
{
|
109 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
110 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup_w_update_vars", get_defined_vars ());
|
111 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
112 |
+
/**/
|
113 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup|subscr_payment` ) w/ update vars.";
|
114 |
+
/**/
|
115 |
+
/* Check for both the old & new subscr_id's, just in case the IPN routine already changed it. */
|
116 |
+
if (($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)
|
117 |
+
{
|
118 |
+
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
119 |
+
{
|
120 |
+
$processing = $modifying = $during = true; /* Yes, we ARE processing this. */
|
121 |
+
/**/
|
122 |
+
$fields = get_user_option ("s2member_custom_fields", $user_id); /* These will be needed in the routines below. */
|
123 |
+
$user_reg_ip = get_user_option ("s2member_registration_ip", $user_id); /* Original IP during Registration. */
|
124 |
+
$user_reg_ip = $paypal["ip"] = ($user_reg_ip) ? $user_reg_ip : $paypal["ip"]; /* Now merge conditionally. */
|
125 |
+
/**/
|
126 |
+
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
127 |
+
{
|
128 |
+
add_existing_user_to_blog (array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
129 |
+
$user = new WP_User ($user_id);
|
130 |
+
}
|
131 |
+
/**/
|
132 |
+
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
133 |
+
/**/
|
134 |
+
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
135 |
+
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
136 |
+
/**/
|
137 |
+
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
138 |
+
foreach ($user->allcaps as $cap => $cap_enabled)
|
139 |
+
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
140 |
+
$user->remove_cap ($ccap = $cap);
|
141 |
+
/**/
|
142 |
+
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
143 |
+
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
144 |
+
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
145 |
+
/**/
|
146 |
+
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
147 |
+
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
148 |
+
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
149 |
+
/**/
|
150 |
+
if (!get_user_option ("s2member_registration_ip", $user_id))
|
151 |
+
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
152 |
+
/**/
|
153 |
+
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
154 |
+
delete_user_option ($user_id, "s2member_file_download_access_log");
|
155 |
+
/**/
|
156 |
+
if (preg_match ("/^web_accept$/i", $paypal["txn_type"]) && $paypal["eotper"])
|
157 |
+
{
|
158 |
+
/* Don't update this in the return routine. Leave this for the IPN routine. */
|
159 |
+
/* EOT Times might be extended, and we don't want the IPN routine to extend an already-extended EOT Time. */
|
160 |
+
$eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ("", "", "", $paypal["eotper"], "", get_user_option ("s2member_auto_eot_time", $user_id));
|
161 |
+
$paypal["s2member_log"][] = "Automatic EOT ( End Of Term ) Time will be set to: " . date ("D M j, Y g:i:s a T", $eot_time) . ".";
|
162 |
+
}
|
163 |
+
else /* Otherwise, we need to clear the Auto-EOT Time. */
|
164 |
+
delete_user_option ($user_id, "s2member_auto_eot_time");
|
165 |
+
/**/
|
166 |
+
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
167 |
+
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
168 |
+
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
169 |
+
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
170 |
+
/**/
|
171 |
+
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
172 |
+
/**/
|
173 |
+
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
|
174 |
+
/**/
|
175 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
176 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_signup_w_update_vars", get_defined_vars ());
|
177 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
178 |
+
/**/
|
179 |
+
if (($redirection_url_after_modification = apply_filters ("ws_plugin__s2member_redirection_url_after_modification", false, get_defined_vars ())))
|
180 |
+
{
|
181 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL after modification: " . $redirection_url_after_modification;
|
182 |
+
/**/
|
183 |
+
wp_redirect ($redirection_url_after_modification);
|
184 |
+
}
|
185 |
+
else /* Else, use standard/default handling in this scenario. Have the Customer log in again. */
|
186 |
+
{
|
187 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page. They need to log back in.";
|
188 |
+
/**/
|
189 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
190 |
+
'<strong>Thank you! You\'ve been updated to:<br /><em>' . esc_html ($paypal["item_name"]) . '</em></strong>',/**/
|
191 |
+
"Please Log Back In ( Click Here )", wp_login_url ());
|
192 |
+
}
|
193 |
+
}
|
194 |
+
else /* Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. */
|
195 |
+
{
|
196 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing.";
|
197 |
+
/**/
|
198 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
199 |
+
/**/
|
200 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
201 |
+
'<strong>ERROR:</strong> Unable to modify Subscription.<br />Please contact Support for assistance.<br /><br />The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing.',/**/
|
202 |
+
"Back To Home Page", home_url ("/"));
|
203 |
+
}
|
204 |
+
}
|
205 |
+
else /* Unable to modify Subscription. Could not get the existing User ID from the DB. */
|
206 |
+
{
|
207 |
+
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
|
208 |
+
/**/
|
209 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
210 |
+
/**/
|
211 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
212 |
+
'<strong>ERROR:</strong> Unable to modify Subscription.<br />Please contact Support for assistance.<br /><br />Could not get the existing User ID from the DB.',/**/
|
213 |
+
"Back To Home Page", home_url ("/"));
|
214 |
+
}
|
215 |
+
/**/
|
216 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
217 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_signup_w_update_vars", get_defined_vars ());
|
218 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
219 |
+
}
|
220 |
+
/*
|
221 |
+
New Subscription. Normal Subscription signup, we are not updating anything for a past Subscription.
|
222 |
+
*/
|
223 |
+
else /* Else this is a normal Subscription signup, we are not updating an existing Subscription. */
|
224 |
+
{
|
225 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
226 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup_wo_update_vars", get_defined_vars ());
|
227 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
228 |
+
/**/
|
229 |
+
$processing = $during = true; /* Yes, we ARE processing this new Subscription request. */
|
230 |
+
/**/
|
231 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup|subscr_payment` ) w/o update vars.";
|
232 |
+
/**/
|
233 |
+
setcookie ("s2member_subscr_gateway", ($s2member_subscr_gateway = c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["subscr_gateway"])), time () + 31556926, "/") . ($_COOKIE["s2member_subscr_gateway"] = $s2member_subscr_gateway);
|
234 |
+
setcookie ("s2member_subscr_id", ($s2member_subscr_id = c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["subscr_id"])), time () + 31556926, "/") . ($_COOKIE["s2member_subscr_id"] = $s2member_subscr_id);
|
235 |
+
setcookie ("s2member_custom", ($s2member_custom = c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["custom"])), time () + 31556926, "/") . ($_COOKIE["s2member_custom"] = $s2member_custom);
|
236 |
+
setcookie ("s2member_item_number", ($s2member_item_number = c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["item_number"])), time () + 31556926, "/") . ($_COOKIE["s2member_item_number"] = $s2member_item_number);
|
237 |
+
/**/
|
238 |
+
$paypal["s2member_log"][] = "Registration Cookies set on ( `web_accept|subscr_signup|subscr_payment` ) w/o update vars.";
|
239 |
+
/**/
|
240 |
+
setcookie ("s2member_signup_tracking", ($s2member_signup_tracking = c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["subscr_id"])), time () + 31556926, "/") . ($_COOKIE["s2member_signup_tracking"] = $s2member_signup_tracking);
|
241 |
+
/**/
|
242 |
+
$paypal["s2member_log"][] = "Transient Tracking Cookie set on ( `web_accept|subscr_signup|subscr_payment` ) w/o update vars.";
|
243 |
+
/**/
|
244 |
+
if ($processing && $tracking_properties && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
245 |
+
{
|
246 |
+
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_ds ($paypal["subscr_id"]), $code)))
|
247 |
+
if (($code = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $code)) && ($code = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $code)) && ($code = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $code)))
|
248 |
+
if (($code = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $code)) && ($code = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $code)))
|
249 |
+
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
250 |
+
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
251 |
+
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
252 |
+
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
253 |
+
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
254 |
+
/**/
|
255 |
+
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
256 |
+
{
|
257 |
+
$paypal["s2member_log"][] = "Storing Signup Tracking Codes into a Transient Queue. These will be processed on-site.";
|
258 |
+
set_transient ("s2m_" . md5 ("s2member_transient_signup_tracking_codes_" . $paypal["subscr_id"]), $code, 43200);
|
259 |
+
}
|
260 |
+
}
|
261 |
+
/**/
|
262 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
263 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_signup_wo_update_vars", get_defined_vars ());
|
264 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
265 |
+
/**/
|
266 |
+
if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ())
|
267 |
+
{
|
268 |
+
if (($redirection_url_after_mms_farm_signup = apply_filters ("ws_plugin__s2member_redirection_url_after_mms_farm_signup", false, get_defined_vars ())))
|
269 |
+
{
|
270 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL after signup: " . $redirection_url_after_mms_farm_signup;
|
271 |
+
/**/
|
272 |
+
wp_redirect ($redirection_url_after_mms_farm_signup);
|
273 |
+
}
|
274 |
+
else if ($custom_success_redirection) /* Using a custom success redirection URL? */
|
275 |
+
{
|
276 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL on success: " . $custom_success_redirection;
|
277 |
+
/**/
|
278 |
+
wp_redirect ($custom_success_redirection);
|
279 |
+
}
|
280 |
+
else /* Else use the default return URL in this scenario, which is the Signup Page. */
|
281 |
+
{
|
282 |
+
$paypal["s2member_log"][] = "Redirecting Customer to Signup Page. They need to Signup/Register now.";
|
283 |
+
/**/
|
284 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
285 |
+
'<strong>Thank you! Your account has been approved.<br />The next step is to Register a Username for immediate access.</strong>',/**/
|
286 |
+
"Please Register Now ( Click Here )", c_ws_plugin__s2member_utils_urls::wp_signup_url ());
|
287 |
+
}
|
288 |
+
}
|
289 |
+
else /* Otherwise, this is NOT a Multisite install. Or it is, but the Super Administrator is NOT selling Blog creation. */
|
290 |
+
{
|
291 |
+
if (($redirection_url_after_signup = apply_filters ("ws_plugin__s2member_redirection_url_after_signup", false, get_defined_vars ())))
|
292 |
+
{
|
293 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL after signup: " . $redirection_url_after_signup;
|
294 |
+
/**/
|
295 |
+
wp_redirect ($redirection_url_after_signup);
|
296 |
+
}
|
297 |
+
else if ($custom_success_redirection) /* Using a custom success redirection URL? */
|
298 |
+
{
|
299 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL on success: " . $custom_success_redirection;
|
300 |
+
/**/
|
301 |
+
wp_redirect ($custom_success_redirection);
|
302 |
+
}
|
303 |
+
else /* Else use the default return URL in this scenario, which is the Registration Page. */
|
304 |
+
{
|
305 |
+
$paypal["s2member_log"][] = "Redirecting Customer to Registration Page. They need to Register now.";
|
306 |
+
/**/
|
307 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
308 |
+
'<strong>Thank you! Your account has been approved.<br />The next step is to Register a Username for immediate access.</strong>',/**/
|
309 |
+
"Please Register Now ( Click Here )", c_ws_plugin__s2member_utils_urls::wp_register_url ());
|
310 |
+
}
|
311 |
+
}
|
312 |
+
/**/
|
313 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
314 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_signup_wo_update_vars", get_defined_vars ());
|
315 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
316 |
+
}
|
317 |
+
}
|
318 |
+
else /* Page Expired. Duplicate Return-Data. */
|
319 |
+
{
|
320 |
+
$paypal["s2member_log"][] = "Page Expired. Duplicate Return-Data.";
|
321 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept|subscr_signup|subscr_payment` ).";
|
322 |
+
$paypal["s2member_log"][] = "Page Expired. Redirecting Customer to the Home Page.";
|
323 |
+
/**/
|
324 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
325 |
+
'<strong>Page Expired:</strong> Duplicate Return-Data.<br />Please contact Support if you need any assistance.',/**/
|
326 |
+
"Back To Home Page", home_url ("/"));
|
327 |
+
}
|
328 |
+
/**/
|
329 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
330 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_signup", get_defined_vars ());
|
331 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
332 |
+
/**/
|
333 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level", $paypal, get_defined_vars ());
|
334 |
+
}
|
335 |
+
else
|
336 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level", false, get_defined_vars ());
|
337 |
+
}
|
338 |
+
}
|
339 |
+
}
|
340 |
+
?>
|
includes/classes/paypal-return-in-web-accept-sp.inc.php
ADDED
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\PayPal
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_paypal_return_in_web_accept_sp"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
24 |
+
*
|
25 |
+
* @package s2Member\PayPal
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_paypal_return_in_web_accept_sp
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* s2Member's PayPal® Auto-Return/PDT handler ( inner processing routine ).
|
32 |
+
*
|
33 |
+
* @package s2Member\PayPal
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param array $vars Required. An array of defined variables passed by {@link s2Member\PayPal\c_ws_plugin__s2member_paypal_return_in::paypal_return()}.
|
37 |
+
* @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
|
38 |
+
*
|
39 |
+
* @todo Optimize with ``empty()`` and ``isset()``.
|
40 |
+
*/
|
41 |
+
public static function cp ($vars = array ()) /* Conditional phase for ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
42 |
+
{
|
43 |
+
extract ($vars); /* Extract all vars passed in from: ``c_ws_plugin__s2member_paypal_notify_in::paypal_notify()``. */
|
44 |
+
/**/
|
45 |
+
if (/**/(!empty ($paypal["txn_type"]) && preg_match ("/^web_accept$/i", $paypal["txn_type"]))/**/
|
46 |
+
&& (!empty ($paypal["item_number"]) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $paypal["item_number"]))/**/
|
47 |
+
&& (empty ($paypal["payment_status"]) || empty ($payment_status_issues) || !preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
|
48 |
+
&& (!empty ($paypal["txn_id"]))/**/)
|
49 |
+
{
|
50 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
51 |
+
do_action ("ws_plugin__s2member_during_paypal_return_before_sp_access", get_defined_vars ());
|
52 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
53 |
+
/**/
|
54 |
+
if (!get_transient ($transient_rtn = "s2m_rtn_" . md5 ("s2member_transient_" . $_paypal_s)) && set_transient ($transient_rtn, time (), 31556926 * 10))
|
55 |
+
{
|
56 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.";
|
57 |
+
/**/
|
58 |
+
list (, $paypal["sp_ids"], $paypal["hours"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
59 |
+
/**/
|
60 |
+
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
61 |
+
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
|
62 |
+
$paypal["ip"] = (!$paypal["ip"] && $_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $paypal["ip"];
|
63 |
+
/**/
|
64 |
+
if (($sp_access_url = c_ws_plugin__s2member_sp_access::sp_access_link_gen ($paypal["sp_ids"], $paypal["hours"], false)))
|
65 |
+
{
|
66 |
+
$processing = $during = true; /* Yes, we ARE processing this. */
|
67 |
+
/**/
|
68 |
+
setcookie ("s2member_sp_tracking", ($s2member_sp_tracking = c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["txn_id"])), time () + 31556926, "/") . ($_COOKIE["s2member_sp_tracking"] = $s2member_sp_tracking);
|
69 |
+
/**/
|
70 |
+
$paypal["s2member_log"][] = "Transient Tracking Cookie set on ( `web_accept` ) for Specific Post/Page Access.";
|
71 |
+
/**/
|
72 |
+
if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
73 |
+
{
|
74 |
+
if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $code)) && ($code = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $code)))
|
75 |
+
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
76 |
+
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
77 |
+
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
78 |
+
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
79 |
+
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
80 |
+
/**/
|
81 |
+
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
82 |
+
{
|
83 |
+
$paypal["s2member_log"][] = "Storing Specific Post/Page Tracking Codes into a Transient Queue. These will be processed on-site.";
|
84 |
+
set_transient ("s2m_" . md5 ("s2member_transient_sp_tracking_codes_" . $paypal["txn_id"]), $code, 43200);
|
85 |
+
}
|
86 |
+
}
|
87 |
+
/**/
|
88 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
89 |
+
do_action ("ws_plugin__s2member_during_paypal_return_during_sp_access", get_defined_vars ());
|
90 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
91 |
+
/**/
|
92 |
+
if (apply_filters ("ws_plugin__s2member_immediate_sp_access_redirection", false, get_defined_vars ()))
|
93 |
+
{
|
94 |
+
$paypal["s2member_log"][] = "Redirecting Customer immediately to the Specific Post/Page.";
|
95 |
+
/**/
|
96 |
+
wp_redirect ($sp_access_url); /* Immediate redirection to Specific Post/Page. */
|
97 |
+
}
|
98 |
+
else if ($custom_success_redirection) /* Using a custom success redirection URL? */
|
99 |
+
{
|
100 |
+
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL on success: " . $custom_success_redirection;
|
101 |
+
/**/
|
102 |
+
wp_redirect ($custom_success_redirection);
|
103 |
+
}
|
104 |
+
else /* Else use the default return URL in this scenario, which is the Specific Post/Page. */
|
105 |
+
{
|
106 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Specific Post/Page.";
|
107 |
+
/**/
|
108 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
109 |
+
'<strong>Thank You! Your transaction has been approved.</strong>',/**/
|
110 |
+
"Continue ( Click Here )", $sp_access_url);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
else /* Otherwise, the ID must have been invalid. Or the Post/Page was deleted. */
|
114 |
+
{
|
115 |
+
$paypal["s2member_log"][] = "Unable to generate Specific Post/Page Access Link. Does your Leading Post/Page still exist?";
|
116 |
+
/**/
|
117 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
118 |
+
/**/
|
119 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
120 |
+
'<strong>ERROR:</strong> Unable to generate Access Link.<br />Please contact Support for assistance.',/**/
|
121 |
+
"Back To Home Page", home_url ("/"));
|
122 |
+
}
|
123 |
+
}
|
124 |
+
else /* Page Expired. Duplicate Return-Data. */
|
125 |
+
{
|
126 |
+
$paypal["s2member_log"][] = "Page Expired. Duplicate Return-Data.";
|
127 |
+
$paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.";
|
128 |
+
$paypal["s2member_log"][] = "Page Expired. Redirecting Customer to the Home Page.";
|
129 |
+
/**/
|
130 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
131 |
+
'<strong>Page Expired:</strong> Duplicate Return-Data.<br />Please contact Support if you need any assistance.',/**/
|
132 |
+
"Back To Home Page", home_url ("/"));
|
133 |
+
}
|
134 |
+
/**/
|
135 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
136 |
+
do_action ("ws_plugin__s2member_during_paypal_return_after_sp_access", get_defined_vars ());
|
137 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
138 |
+
/**/
|
139 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_web_accept_sp", $paypal, get_defined_vars ());
|
140 |
+
}
|
141 |
+
else
|
142 |
+
return apply_filters ("c_ws_plugin__s2member_paypal_return_in_web_accept_sp", false, get_defined_vars ());
|
143 |
+
}
|
144 |
+
}
|
145 |
+
}
|
146 |
+
?>
|
includes/classes/paypal-return-in.inc.php
CHANGED
@@ -36,9 +36,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
|
|
36 |
* @attaches-to: ``add_action("init");``
|
37 |
*
|
38 |
* @return null Or exits script execution after redirection.
|
39 |
-
*
|
40 |
-
* @todo Break this routine apart into logical class methods.
|
41 |
-
* @todo Optimize with ``empty()`` and ``isset()``.
|
42 |
*/
|
43 |
public static function paypal_return ()
|
44 |
{
|
@@ -46,541 +43,118 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
|
|
46 |
/**/
|
47 |
do_action ("ws_plugin__s2member_before_paypal_return", get_defined_vars ());
|
48 |
/**/
|
49 |
-
if (!empty ($_GET["s2member_paypal_return"]) && ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"] || $_GET["s2member_paypal_proxy"]))
|
50 |
{
|
51 |
-
|
|
|
|
|
|
|
52 |
{
|
53 |
$paypal["s2member_log"][] = "Return-Data received on: " . date ("D M j, Y g:i:s a T");
|
54 |
-
$paypal["s2member_log"][] = "s2Member POST vars verified " . (($paypal["proxy_verified"]) ? "with a Proxy Key" : "through a POST back to PayPal®.");
|
55 |
/**/
|
56 |
-
$paypal["subscr_gateway"] = ($_GET["s2member_paypal_proxy"]) ? $_GET["s2member_paypal_proxy"] : "paypal";
|
57 |
/**/
|
58 |
-
if (
|
59 |
{
|
60 |
$payment_status_issues = "/^(failed|denied|expired|refunded|partially_refunded|reversed|reversal|canceled_reversal|voided)$/i";
|
61 |
/**/
|
62 |
-
if (preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", $paypal["custom"]))
|
63 |
-
{
|
64 |
-
|
65 |
-
|
66 |
-
/*
|
67 |
-
Custom conditionals can be applied by Filters.
|
68 |
-
*/
|
69 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
70 |
if (!apply_filters ("ws_plugin__s2member_during_paypal_return_conditionals", false, get_defined_vars ()))
|
71 |
{
|
72 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
/**/
|
85 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept) for Specific Post/Page Access.";
|
86 |
-
/**/
|
87 |
-
list (, $paypal["sp_ids"], $paypal["hours"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
88 |
-
/**/
|
89 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
90 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
91 |
-
$paypal["ip"] = (!$paypal["ip"] && $_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $paypal["ip"];
|
92 |
-
/**/
|
93 |
-
if (($sp_access_url = c_ws_plugin__s2member_sp_access::sp_access_link_gen ($paypal["sp_ids"], $paypal["hours"], false)))
|
94 |
-
{
|
95 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
96 |
-
/**/
|
97 |
-
setcookie ("s2member_sp_tracking", c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["txn_id"]), time () + 31556926, "/");
|
98 |
-
/**/
|
99 |
-
$paypal["s2member_log"][] = "Transient Tracking Cookie set on (web_accept) for Specific Post/Page Access.";
|
100 |
-
/**/
|
101 |
-
if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
|
102 |
-
{
|
103 |
-
if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $code)) && ($code = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $code)))
|
104 |
-
if (($code = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $code)) && ($code = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $code)))
|
105 |
-
if (($code = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $code)) && ($code = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $code)))
|
106 |
-
if (($code = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $code)))
|
107 |
-
if (($code = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $code)))
|
108 |
-
if (($code = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["ip"]), $code)))
|
109 |
-
/**/
|
110 |
-
if (($code = trim (preg_replace ("/%%(.+?)%%/i", "", $code)))) /* This gets stored into a Transient Queue. */
|
111 |
-
{
|
112 |
-
$paypal["s2member_log"][] = "Storing Specific Post/Page Tracking Codes into a Transient Queue. These will be processed on-site.";
|
113 |
-
set_transient ("s2m_" . md5 ("s2member_transient_sp_tracking_codes_" . $paypal["txn_id"]), $code, 43200);
|
114 |
-
}
|
115 |
-
}
|
116 |
-
/**/
|
117 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
118 |
-
do_action ("ws_plugin__s2member_during_paypal_return_during_sp_access", get_defined_vars ());
|
119 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
120 |
-
/**/
|
121 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Specific Post/Page.";
|
122 |
-
/**/
|
123 |
-
wp_redirect ($sp_access_url); /* Redirect Customer to the Specific Post/Page. */
|
124 |
-
}
|
125 |
-
else /* Otherwise, the ID must have been invalid. Or the Post/Page was deleted. */
|
126 |
-
{
|
127 |
-
$paypal["s2member_log"][] = "Unable to generate Specific Post/Page Access Link. Does your Leading Post/Page still exist?";
|
128 |
-
/**/
|
129 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
130 |
-
/**/
|
131 |
-
echo '<script type="text/javascript">' . "\n";
|
132 |
-
echo "alert('ERROR: Unable to generate Access Link. Please contact Support for assistance.');" . "\n";
|
133 |
-
echo "window.location = '" . esc_js (home_url ("/")) . "';";
|
134 |
-
echo '</script>' . "\n";
|
135 |
-
}
|
136 |
-
/**/
|
137 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
138 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_sp_access", get_defined_vars ());
|
139 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
140 |
-
}
|
141 |
-
/*
|
142 |
-
New Subscriptions.
|
143 |
-
Possibly containing advanced update vars
|
144 |
-
( option_name1, option_selection1 ); which allow account modifications.
|
145 |
-
|
146 |
-
With Auto-Return URLs via PDT, PayPal® will send subscr_payment instead of subscr_signup.
|
147 |
-
So we need to look for (web_accept|subscr_signup|subscr_payment), and treat the same.
|
148 |
-
*/
|
149 |
-
else if (/**/(preg_match ("/^(web_accept|subscr_signup|subscr_payment)$/i", $paypal["txn_type"]))/**/
|
150 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"]))/**/
|
151 |
-
&& ($paypal["subscr_id"] || ($paypal["subscr_id"] = $paypal["txn_id"]))/**/
|
152 |
-
&& (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/)
|
153 |
-
{
|
154 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
155 |
-
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup", get_defined_vars ());
|
156 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
157 |
-
/**/
|
158 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept|subscr_signup|subscr_payment).";
|
159 |
-
/**/
|
160 |
-
list ($paypal["level"], $paypal["ccaps"], $paypal["eotper"]) = preg_split ("/\:/", $paypal["item_number"], 3);
|
161 |
-
/**/
|
162 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
163 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
164 |
-
$paypal["ip"] = (!$paypal["ip"] && $_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $paypal["ip"];
|
165 |
-
/*
|
166 |
-
New Subscription with advanced update vars ( option_name1, option_selection1 ).
|
167 |
-
*/
|
168 |
-
if (preg_match ("/(referenc|associat|updat|upgrad)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) /* Advanced Subscription update modifications. */
|
169 |
-
/* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified.
|
170 |
-
PayPal® will not allow the `modify=1|2` parameter to be used in those scenarios, because technically there is no billing to update; only the account. */
|
171 |
-
{
|
172 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
173 |
-
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup_w_update_vars", get_defined_vars ());
|
174 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
175 |
-
/**/
|
176 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept|subscr_signup|subscr_payment) w/ update vars.";
|
177 |
-
/**/
|
178 |
-
/* Check for both the old & new subscr_id's, just in case the IPN routine already changed it. */
|
179 |
-
if (($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)
|
180 |
-
{
|
181 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
182 |
-
{
|
183 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
184 |
-
/**/
|
185 |
-
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
186 |
-
{
|
187 |
-
add_existing_user_to_blog (array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
188 |
-
$user = new WP_User ($user_id);
|
189 |
-
}
|
190 |
-
/**/
|
191 |
-
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
192 |
-
/**/
|
193 |
-
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
194 |
-
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
195 |
-
/**/
|
196 |
-
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
197 |
-
foreach ($user->allcaps as $cap => $cap_enabled)
|
198 |
-
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
199 |
-
$user->remove_cap ($ccap = $cap);
|
200 |
-
/**/
|
201 |
-
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
202 |
-
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
203 |
-
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
204 |
-
/**/
|
205 |
-
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
206 |
-
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
207 |
-
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
208 |
-
/**/
|
209 |
-
if (!get_user_option ("s2member_registration_ip", $user_id))
|
210 |
-
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
211 |
-
/**/
|
212 |
-
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
213 |
-
delete_user_option ($user_id, "s2member_file_download_access_log");
|
214 |
-
/**/
|
215 |
-
if (preg_match ("/^web_accept$/i", $paypal["txn_type"]) && $paypal["eotper"])
|
216 |
-
{
|
217 |
-
/* Don't update this in the return routine. Leave this for the IPN routine. */
|
218 |
-
/* EOT Times might be extended, and we don't want the IPN routine to extend an already-extended EOT Time. */
|
219 |
-
$eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ("", "", "", $paypal["eotper"], "", get_user_option ("s2member_auto_eot_time", $user_id));
|
220 |
-
$paypal["s2member_log"][] = "Automatic EOT ( End Of Term ) Time will be set to: " . date ("D M j, Y g:i:s a T", $eot_time) . ".";
|
221 |
-
}
|
222 |
-
else /* Otherwise, we need to clear the Auto-EOT Time. */
|
223 |
-
delete_user_option ($user_id, "s2member_auto_eot_time");
|
224 |
-
/**/
|
225 |
-
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
226 |
-
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
227 |
-
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
228 |
-
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
229 |
-
/**/
|
230 |
-
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
231 |
-
/**/
|
232 |
-
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
|
233 |
-
/**/
|
234 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
235 |
-
do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_signup_w_update_vars", get_defined_vars ());
|
236 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
237 |
-
/**/
|
238 |
-
if ($redirection_url_after_modification = apply_filters ("ws_plugin__s2member_redirection_url_after_modification", false, get_defined_vars ()))
|
239 |
-
{
|
240 |
-
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL after modification: " . $redirection_url_after_modification;
|
241 |
-
/**/
|
242 |
-
echo '<script type="text/javascript">' . "\n";
|
243 |
-
echo "alert('Thank you! You\\'ve been updated to:\\n\\n" . esc_js ($paypal["item_name"]) . "');" . "\n";
|
244 |
-
echo "window.location = '" . esc_js ($redirection_url_after_modification) . "';" . "\n";
|
245 |
-
echo '</script>' . "\n";
|
246 |
-
}
|
247 |
-
else /* Else, use standard/default handling in this scenario. Have the Customer log in again. */
|
248 |
-
{
|
249 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page. They need to log back in.";
|
250 |
-
/**/
|
251 |
-
echo '<script type="text/javascript">' . "\n";
|
252 |
-
echo "alert('Thank you! You\\'ve been updated to:\\n\\n" . esc_js ($paypal["item_name"]) . "');" . "\n";
|
253 |
-
echo "window.location = '" . esc_js (wp_login_url ()) . "';" . "\n";
|
254 |
-
echo '</script>' . "\n";
|
255 |
-
}
|
256 |
-
}
|
257 |
-
else
|
258 |
-
{
|
259 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
260 |
-
/**/
|
261 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page, due to an error that occurred.";
|
262 |
-
/**/
|
263 |
-
echo '<script type="text/javascript">' . "\n";
|
264 |
-
echo "alert('ERROR: Unable to modify Subscription. Please contact Support for assistance.\\n\\nThe existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing.');" . "\n";
|
265 |
-
echo "window.location = '" . esc_js (wp_login_url ()) . "';";
|
266 |
-
echo '</script>' . "\n";
|
267 |
-
}
|
268 |
-
}
|
269 |
-
else
|
270 |
-
{
|
271 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB. Please check the on0 and os0 variables in your Button Code.";
|
272 |
-
/**/
|
273 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page, due to an error that occurred.";
|
274 |
-
/**/
|
275 |
-
echo '<script type="text/javascript">' . "\n";
|
276 |
-
echo "alert('ERROR: Unable to modify Subscription. Please contact Support for assistance.\\n\\nCould not get the existing User ID from the DB.');" . "\n";
|
277 |
-
echo "window.location = '" . esc_js (wp_login_url ()) . "';";
|
278 |
-
echo '</script>' . "\n";
|
279 |
-
}
|
280 |
-
/**/
|
281 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
282 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_signup_w_update_vars", get_defined_vars ());
|
283 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
284 |
-
}
|
285 |
-
/*
|
286 |
-
New Subscription. Normal Subscription signup, we are not updating anything for a past Subscription.
|
287 |
-
*/
|
288 |
-
else /* Else this is a normal Subscription signup, we are not updating an existing Subscription. */
|
289 |
-
{
|
290 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
291 |
-
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup_wo_update_vars", get_defined_vars ());
|
292 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
293 |
-
/**/
|
294 |
-
$processing = $during = true; /* Yes, we ARE processing this new Subscription request. */
|
295 |
-
/**/
|
296 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as (web_accept|subscr_signup|subscr_payment) w/o update vars.";
|
297 |
-
/**/
|
298 |
-
setcookie ("s2member_subscr_gateway", c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["subscr_gateway"]), time () + 31556926, "/");
|
299 |
-
setcookie ("s2member_subscr_id", c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["subscr_id"]), time () + 31556926, "/");
|
300 |
-
setcookie ("s2member_custom", c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["custom"]), time () + 31556926, "/");
|
301 |
-
setcookie ("s2member_item_number", c_ws_plugin__s2member_utils_encryption::encrypt ($paypal["item_number"]), time () + 31556926, "/");
|
302 |
-
/**/
|
303 |
-
$paypal["s2member_log"][] = "Registration Cookies set on (web_accept|subscr_signup|subscr_payment) w/o update vars.";
|
304 |
-
/**/
|
305 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
306 |
-
do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_signup_wo_update_vars", get_defined_vars ());
|
307 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
308 |
-
/**/
|
309 |
-
if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ())
|
310 |
-
{
|
311 |
-
if ($redirection_url_after_mms_farm_signup = apply_filters ("ws_plugin__s2member_redirection_url_after_mms_farm_signup", false, get_defined_vars ()))
|
312 |
-
{
|
313 |
-
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL after signup: " . $redirection_url_after_mms_farm_signup;
|
314 |
-
/**/
|
315 |
-
echo '<script type="text/javascript">' . "\n";
|
316 |
-
echo "alert('Thank you! Your account has been approved.\\nPlease click OK to continue.');" . "\n";
|
317 |
-
echo "window.location = '" . esc_js ($redirection_url_after_mms_farm_signup) . "';" . "\n";
|
318 |
-
echo '</script>' . "\n";
|
319 |
-
}
|
320 |
-
else /* Else, use standard/default handling in this scenario. Have the Customer register a Username. */
|
321 |
-
{
|
322 |
-
$paypal["s2member_log"][] = "Redirecting Customer to Signup Page. They need to Signup/Register now.";
|
323 |
-
/**/
|
324 |
-
echo '<script type="text/javascript">' . "\n"; /* Can be Filtered w/ `wp_signup_location`. */
|
325 |
-
echo "alert('Thank you! Your account has been approved.\\nThe next step is to Register.\\n\\nPlease click OK to Register now.');" . "\n";
|
326 |
-
echo "window.location = '" . esc_js (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . "';" . "\n";
|
327 |
-
echo '</script>' . "\n";
|
328 |
-
}
|
329 |
-
}
|
330 |
-
else /* Otherwise, this is NOT a Multisite install. Or it is, but the Super Administrator is NOT selling Blog creation. */
|
331 |
-
{
|
332 |
-
if ($redirection_url_after_signup = apply_filters ("ws_plugin__s2member_redirection_url_after_signup", false, get_defined_vars ()))
|
333 |
-
{
|
334 |
-
$paypal["s2member_log"][] = "Redirecting Customer to a custom URL after signup: " . $redirection_url_after_signup;
|
335 |
-
/**/
|
336 |
-
echo '<script type="text/javascript">' . "\n";
|
337 |
-
echo "alert('Thank you! Your account has been approved.\\nPlease click OK to continue.');" . "\n";
|
338 |
-
echo "window.location = '" . esc_js ($redirection_url_after_signup) . "';" . "\n";
|
339 |
-
echo '</script>' . "\n";
|
340 |
-
}
|
341 |
-
else /* Else, use standard/default handling in this scenario. Have the Customer register a Username. */
|
342 |
-
{
|
343 |
-
$paypal["s2member_log"][] = "Redirecting Customer to Registration Page. They need to Register now.";
|
344 |
-
/**/
|
345 |
-
echo '<script type="text/javascript">' . "\n"; /* This location can be Filtered with: `wp_register_location`. */
|
346 |
-
echo "alert('Thank you! Your account has been approved.\\nThe next step is to Register a Username.\\n\\nPlease click OK to Register now.');" . "\n";
|
347 |
-
echo "window.location = '" . esc_js (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . "';" . "\n";
|
348 |
-
echo '</script>' . "\n";
|
349 |
-
}
|
350 |
-
}
|
351 |
-
/**/
|
352 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
353 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_signup_wo_update_vars", get_defined_vars ());
|
354 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
355 |
-
}
|
356 |
-
/**/
|
357 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
358 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_signup", get_defined_vars ());
|
359 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
360 |
-
}
|
361 |
-
/*
|
362 |
-
Subscription modifications.
|
363 |
-
*/
|
364 |
-
else if (/**/(preg_match ("/^subscr_modify$/i", $paypal["txn_type"]))/**/
|
365 |
-
&& (preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_regex"], $paypal["item_number"]))/**/
|
366 |
-
&& ($paypal["subscr_id"])/**/)
|
367 |
-
{
|
368 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
369 |
-
do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_modify", get_defined_vars ());
|
370 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
371 |
-
/**/
|
372 |
-
$paypal["s2member_log"][] = "s2Member txn_type identified as subscr_modify.";
|
373 |
-
/**/
|
374 |
-
list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
|
375 |
-
/**/
|
376 |
-
$paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
|
377 |
-
$paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[0-9]+~[0-9\.]+$/", $paypal["invoice"])) ? preg_replace ("/^[0-9]+~/", "", $paypal["invoice"]) : $paypal["ip"];
|
378 |
-
$paypal["ip"] = (!$paypal["ip"] && $_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $paypal["ip"];
|
379 |
-
/**/
|
380 |
-
if (($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($paypal["subscr_id"])) && is_object ($user = new WP_User ($user_id)) && $user->ID)
|
381 |
-
{
|
382 |
-
if (!$user->has_cap ("administrator")) /* Do NOT process this routine on Administrators. */
|
383 |
-
{
|
384 |
-
$processing = $during = true; /* Yes, we ARE processing this. */
|
385 |
-
/**/
|
386 |
-
if (is_multisite () && !is_user_member_of_blog ($user_id))
|
387 |
-
{
|
388 |
-
add_existing_user_to_blog (array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
|
389 |
-
$user = new WP_User ($user_id); /* Now update the $user object we're using. */
|
390 |
-
}
|
391 |
-
/**/
|
392 |
-
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
393 |
-
/**/
|
394 |
-
if ($current_role !== "s2member_level" . $paypal["level"]) /* Only if we need to. */
|
395 |
-
$user->set_role ("s2member_level" . $paypal["level"]); /* (upgrade/downgrade) */
|
396 |
-
/**/
|
397 |
-
if (!preg_match ("/^\+/", $paypal["ccaps"]))
|
398 |
-
foreach ($user->allcaps as $cap => $cap_enabled)
|
399 |
-
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
400 |
-
$user->remove_cap ($ccap = $cap);
|
401 |
-
/**/
|
402 |
-
foreach (preg_split ("/[\r\n\t\s;,]+/", ltrim ($paypal["ccaps"], "+")) as $ccap)
|
403 |
-
if (strlen ($ccap)) /* Don't add empty Custom Capabilities. */
|
404 |
-
$user->add_cap ("access_s2member_ccap_" . trim (strtolower ($ccap)));
|
405 |
-
/**/
|
406 |
-
update_user_option ($user_id, "s2member_subscr_gateway", $paypal["subscr_gateway"]);
|
407 |
-
update_user_option ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
|
408 |
-
update_user_option ($user_id, "s2member_custom", $paypal["custom"]);
|
409 |
-
/**/
|
410 |
-
if (!get_user_option ("s2member_registration_ip", $user_id))
|
411 |
-
update_user_option ($user_id, "s2member_registration_ip", $paypal["ip"]);
|
412 |
-
/**/
|
413 |
-
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
414 |
-
delete_user_option ($user_id, "s2member_file_download_access_log");
|
415 |
-
/**/
|
416 |
-
delete_user_option ($user_id, "s2member_auto_eot_time");
|
417 |
-
/**/
|
418 |
-
$pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
|
419 |
-
$pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserves existing. */
|
420 |
-
$pr_times["level" . $paypal["level"]] = (!$pr_times["level" . $paypal["level"]]) ? time () : $pr_times["level" . $paypal["level"]];
|
421 |
-
update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
|
422 |
-
/**/
|
423 |
-
c_ws_plugin__s2member_user_notes::clear_user_note_lines ($user_id, "/^Demoted by s2Member\:/");
|
424 |
-
/**/
|
425 |
-
$paypal["s2member_log"][] = "s2Member Level/Capabilities updated on Subscription modification.";
|
426 |
-
/**/
|
427 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
428 |
-
do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_modify", get_defined_vars ());
|
429 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
430 |
-
/**/
|
431 |
-
if ($redirection_url_after_modification = apply_filters ("ws_plugin__s2member_redirection_url_after_modification", false, get_defined_vars ()))
|
432 |
-
{
|
433 |
-
$paypal["s2member_log"][] = "Redirecting this Member to a custom URL after modification: " . $redirection_url_after_modification;
|
434 |
-
/**/
|
435 |
-
echo '<script type="text/javascript">' . "\n";
|
436 |
-
echo "alert('Thank you! You\\'ve been updated to:\\n\\n" . esc_js ($paypal["item_name"]) . "');" . "\n";
|
437 |
-
echo "window.location = '" . esc_js ($redirection_url_after_modification) . "';";
|
438 |
-
echo '</script>' . "\n";
|
439 |
-
}
|
440 |
-
else /* Else, use standard/default handling in this scenario. Have the Customer log in again. */
|
441 |
-
{
|
442 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page. They need to log back in.";
|
443 |
-
/**/
|
444 |
-
echo '<script type="text/javascript">' . "\n";
|
445 |
-
echo "alert('Thank you! You\\'ve been updated to:\\n\\n" . esc_js ($paypal["item_name"]) . "');" . "\n";
|
446 |
-
echo "window.location = '" . esc_js (wp_login_url ()) . "';";
|
447 |
-
echo '</script>' . "\n";
|
448 |
-
}
|
449 |
-
}
|
450 |
-
else
|
451 |
-
{
|
452 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access.";
|
453 |
-
/**/
|
454 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page, due to an error that occurred.";
|
455 |
-
/**/
|
456 |
-
echo '<script type="text/javascript">' . "\n";
|
457 |
-
echo "alert('ERROR: Unable to modify Subscription. Please contact Support for assistance.\\n\\nThe existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing.');" . "\n";
|
458 |
-
echo "window.location = '" . esc_js (wp_login_url ()) . "';";
|
459 |
-
echo '</script>' . "\n";
|
460 |
-
}
|
461 |
-
}
|
462 |
-
else
|
463 |
-
{
|
464 |
-
$paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
|
465 |
-
/**/
|
466 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Login Page, due to an error that occurred.";
|
467 |
-
/**/
|
468 |
-
echo '<script type="text/javascript">' . "\n";
|
469 |
-
echo "alert('ERROR: Unable to modify Subscription. Please contact Support for assistance.\\n\\nCould not get the existing User ID from the DB.');" . "\n";
|
470 |
-
echo "window.location = '" . esc_js (wp_login_url ()) . "';";
|
471 |
-
echo '</script>' . "\n";
|
472 |
-
}
|
473 |
-
/**/
|
474 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
475 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_subscr_modify", get_defined_vars ());
|
476 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
477 |
-
}
|
478 |
-
else
|
479 |
{
|
480 |
-
$paypal["s2member_log"][] = "Unexpected txn_type
|
481 |
/**/
|
482 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the
|
483 |
/**/
|
484 |
-
echo
|
485 |
-
|
486 |
-
|
487 |
-
echo '</script>' . "\n";
|
488 |
}
|
489 |
}
|
490 |
else /* Else a custom conditional has been applied by filters. */
|
491 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
492 |
}
|
493 |
-
else
|
494 |
{
|
495 |
-
$paypal["s2member_log"][] = "Unable to verify _SERVER[HTTP_HOST]
|
496 |
/**/
|
497 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the
|
498 |
/**/
|
499 |
-
echo
|
500 |
-
|
501 |
-
|
502 |
-
echo '</script>' . "\n";
|
503 |
}
|
504 |
}
|
505 |
-
else /* In this case ... a Proxy has explicitly requested ty-email processing. */
|
506 |
{
|
507 |
-
|
508 |
-
do_action ("ws_plugin__s2member_during_paypal_return_before_explicit_ty_email", get_defined_vars ());
|
509 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
510 |
-
/**/
|
511 |
-
$paypal["s2member_log"][] = "Customer must wait for Email Confirmation ( proxy_use: ty-email ).";
|
512 |
-
/**/
|
513 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
514 |
-
do_action ("ws_plugin__s2member_during_paypal_return_during_explicit_ty_email", get_defined_vars ());
|
515 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
516 |
-
/**/
|
517 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page.";
|
518 |
-
/**/
|
519 |
-
echo '<script type="text/javascript">' . "\n";
|
520 |
-
echo "alert('Thank you! ( please check your email ).\\n\\n* Note: It can take ( up to 15 minutes ) for Email Confirmation. If you don\'t receive email confirmation in the next 15 minutes, please contact Support.');" . "\n";
|
521 |
-
echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "alert('** Sandbox Mode ** You may NOT receive this Email Confirmation in Sandbox Mode. Sandbox addresses are usually bogus ( for testing ).');" . "\n" : "";
|
522 |
-
echo "window.location = '" . esc_js (home_url ("/")) . "';";
|
523 |
-
echo '</script>' . "\n";
|
524 |
-
/**/
|
525 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
526 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_explicit_ty_email", get_defined_vars ());
|
527 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
528 |
}
|
529 |
}
|
530 |
-
else if (!
|
531 |
{
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
$paypal
|
537 |
-
/**/
|
538 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
539 |
-
do_action ("ws_plugin__s2member_during_paypal_return_during_no_return_data", get_defined_vars ());
|
540 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
541 |
-
/**/
|
542 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page.";
|
543 |
-
/**/
|
544 |
-
echo '<script type="text/javascript">' . "\n";
|
545 |
-
echo "alert('Thank you! ( please check your email ).\\n\\n* Note: It can take ( up to 15 minutes ) for Email Confirmation. If you don\'t receive email confirmation in the next 15 minutes, please contact Support.');" . "\n";
|
546 |
-
echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "alert('** Sandbox Mode ** You may NOT receive this Email Confirmation in Sandbox Mode. Sandbox addresses are usually bogus ( for testing ).');" . "\n" : "";
|
547 |
-
echo "window.location = '" . esc_js (home_url ("/")) . "';";
|
548 |
-
echo '</script>' . "\n";
|
549 |
-
/**/
|
550 |
-
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
551 |
-
do_action ("ws_plugin__s2member_during_paypal_return_after_no_return_data", get_defined_vars ());
|
552 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
553 |
}
|
554 |
else /* Extensive log reporting here. This is an area where many site owners find trouble. Depending on server configuration; remote HTTPS connections may fail. */
|
555 |
{
|
556 |
-
$paypal["s2member_log"][] = "Unable to verify
|
557 |
-
$paypal["s2member_log"][] = "If you're absolutely SURE that your
|
558 |
-
$paypal["s2member_log"][] = "s2Member uses the WP_Http class for remote connections; which will try to use cURL first, and then fall back on the FOPEN method when cURL is not available. On a Windows® server, you may have to disable your cURL extension
|
|
|
559 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
560 |
/**/
|
561 |
-
$paypal["s2member_log"][] = "Redirecting Customer to the
|
562 |
/**/
|
563 |
-
echo
|
564 |
-
|
565 |
-
|
566 |
-
echo '</script>' . "\n";
|
567 |
}
|
568 |
/*
|
569 |
-
Add RTN proxy ( when available ) to the
|
570 |
*/
|
571 |
-
if ($_GET["s2member_paypal_proxy"])
|
572 |
$paypal["s2member_paypal_proxy"] = $_GET["s2member_paypal_proxy"];
|
573 |
/*
|
574 |
-
Add IPN proxy use vars ( when available ) to the
|
575 |
*/
|
576 |
-
if ($_GET["s2member_paypal_proxy_use"])
|
577 |
$paypal["s2member_paypal_proxy_use"] = $_GET["s2member_paypal_proxy_use"];
|
578 |
/*
|
579 |
-
Also add RTN proxy self-verification ( when available ) to the
|
580 |
*/
|
581 |
-
if ($_GET["s2member_paypal_proxy_verification"])
|
582 |
$paypal["s2member_paypal_proxy_verification"] = $_GET["s2member_paypal_proxy_verification"];
|
583 |
/*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
584 |
If debugging/logging is enabled; we need to append $paypal to the log file.
|
585 |
Logging now supports Multisite Networking as well.
|
586 |
*/
|
36 |
* @attaches-to: ``add_action("init");``
|
37 |
*
|
38 |
* @return null Or exits script execution after redirection.
|
|
|
|
|
|
|
39 |
*/
|
40 |
public static function paypal_return ()
|
41 |
{
|
43 |
/**/
|
44 |
do_action ("ws_plugin__s2member_before_paypal_return", get_defined_vars ());
|
45 |
/**/
|
46 |
+
if (!empty ($_GET["s2member_paypal_return"]) && ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"] || !empty ($_GET["s2member_paypal_proxy"])))
|
47 |
{
|
48 |
+
$custom_success_redirection = (!empty ($_GET["s2member_paypal_return_success"])) ? esc_html (trim (stripslashes ($_GET["s2member_paypal_return_success"]))) : false;
|
49 |
+
$custom_success_redirection = ($custom_success_redirection) ? str_ireplace (array ("&", "&"), "&", $custom_success_redirection) : $custom_success_redirection;
|
50 |
+
/**/
|
51 |
+
if (is_array ($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars ()) && ($_paypal = $paypal) && ($_paypal_s = serialize ($_paypal)))
|
52 |
{
|
53 |
$paypal["s2member_log"][] = "Return-Data received on: " . date ("D M j, Y g:i:s a T");
|
54 |
+
$paypal["s2member_log"][] = "s2Member POST vars verified " . ((!empty ($paypal["proxy_verified"])) ? "with a Proxy Key" : "through a POST back to PayPal®.");
|
55 |
/**/
|
56 |
+
$paypal["subscr_gateway"] = (!empty ($_GET["s2member_paypal_proxy"])) ? esc_html (trim (stripslashes ($_GET["s2member_paypal_proxy"]))) : "paypal";
|
57 |
/**/
|
58 |
+
if (empty ($_GET["s2member_paypal_proxy"]) || empty ($_GET["s2member_paypal_proxy_use"]) || !preg_match ("/ty-email/", $_GET["s2member_paypal_proxy_use"]))
|
59 |
{
|
60 |
$payment_status_issues = "/^(failed|denied|expired|refunded|partially_refunded|reversed|reversal|canceled_reversal|voided)$/i";
|
61 |
/**/
|
62 |
+
if (!empty ($paypal["custom"]) && preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", $paypal["custom"]))
|
63 |
+
{
|
64 |
+
$paypal["s2member_log"][] = "s2Member originating domain ( `\$_SERVER[\"HTTP_HOST\"]` ) validated.";
|
65 |
+
/**/
|
|
|
|
|
|
|
66 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
67 |
if (!apply_filters ("ws_plugin__s2member_during_paypal_return_conditionals", false, get_defined_vars ()))
|
68 |
{
|
69 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
70 |
+
/**/
|
71 |
+
if (($_paypal_cp = c_ws_plugin__s2member_paypal_return_in_web_accept_sp::cp (get_defined_vars ())))
|
72 |
+
$paypal = $_paypal_cp;
|
73 |
+
/**/
|
74 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level::cp (get_defined_vars ())))
|
75 |
+
$paypal = $_paypal_cp;
|
76 |
+
/**/
|
77 |
+
else if (($_paypal_cp = c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level::cp (get_defined_vars ())))
|
78 |
+
$paypal = $_paypal_cp;
|
79 |
+
/**/
|
80 |
+
else /* Else we have an unexpected scenario ( i.e. an unexpected `txn_type/status` ). */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
{
|
82 |
+
$paypal["s2member_log"][] = "Unexpected `txn_type/status`. The `txn_type/status` did not match a required action.";
|
83 |
/**/
|
84 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
85 |
/**/
|
86 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
87 |
+
'<strong>ERROR:</strong> Unexpected <code>txn_type/status</code>.<br />The <code>txn_type/status</code> did not meet requirements.<br />Please contact Support for assistance.',/**/
|
88 |
+
"Back To Home Page", home_url ("/"));
|
|
|
89 |
}
|
90 |
}
|
91 |
else /* Else a custom conditional has been applied by filters. */
|
92 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
93 |
}
|
94 |
+
else /* Else, use the default ``$_SERVER["HTTP_HOST"]`` error. */
|
95 |
{
|
96 |
+
$paypal["s2member_log"][] = "Unable to verify `\$_SERVER[\"HTTP_HOST\"]`. Please check the `custom` value in your Button Code. It MUST start with your domain name.";
|
97 |
/**/
|
98 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
99 |
/**/
|
100 |
+
echo c_ws_plugin__s2member_return_templates::return_template ($paypal["subscr_gateway"],/**/
|
101 |
+
'<strong>ERROR:</strong> Unable to verify <code>$_SERVER["HTTP_HOST"]</code>.<br />Please contact Support for assistance.<br /><br />If you are the site owner, please check the <code>custom</code> value in your Button Code. It MUST start with your domain name.',/**/
|
102 |
+
"Back To Home Page", home_url ("/"));
|
|
|
103 |
}
|
104 |
}
|
105 |
+
else /* In this case ... a Proxy has explicitly requested `ty-email` processing. */
|
106 |
{
|
107 |
+
$paypal = $_paypal_cp = c_ws_plugin__s2member_paypal_return_in_proxy_ty_email::cp (get_defined_vars ());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
}
|
109 |
}
|
110 |
+
else if (!empty ($_GET["s2member_paypal_proxy"]) && !empty ($_GET["s2member_paypal_proxy_use"]) && preg_match ("/x-preview/", $_GET["s2member_paypal_proxy_use"]) && ($paypal["subscr_gateway"] = esc_html (trim (stripslashes ($_GET["s2member_paypal_proxy"])))))
|
111 |
{
|
112 |
+
$paypal = $_paypal_cp = c_ws_plugin__s2member_paypal_return_in_proxy_x_preview::cp (get_defined_vars ());
|
113 |
+
}
|
114 |
+
else if (empty ($_GET["tx"]) && empty ($_GET["s2member_paypal_proxy"]) && ($paypal["subscr_gateway"] = "paypal"))
|
115 |
+
{
|
116 |
+
$paypal = $_paypal_cp = c_ws_plugin__s2member_paypal_return_in_no_tx_data::cp (get_defined_vars ());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
}
|
118 |
else /* Extensive log reporting here. This is an area where many site owners find trouble. Depending on server configuration; remote HTTPS connections may fail. */
|
119 |
{
|
120 |
+
$paypal["s2member_log"][] = "Unable to verify \$_POST vars. This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility.";
|
121 |
+
$paypal["s2member_log"][] = "If you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.";
|
122 |
+
$paypal["s2member_log"][] = "s2Member uses the `WP_Http` class for remote connections; which will try to use `cURL` first, and then fall back on the `FOPEN` method when `cURL` is not available. On a Windows® server, you may have to disable your `cURL` extension; and instead, set `allow_url_fopen = yes` in your php.ini file. The `cURL` extension (usually) does NOT support SSL connections on a Windows® server.";
|
123 |
+
$paypal["s2member_log"][] = "Please see this thread: `http://www.primothemes.com/forums/viewtopic.php?f=36&t=2636` for details regarding the ideal server configuration for s2Member.";
|
124 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
125 |
/**/
|
126 |
+
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
127 |
/**/
|
128 |
+
echo c_ws_plugin__s2member_return_templates::return_template ("default",/**/
|
129 |
+
'<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you\'re absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows® server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows® server.<br /><br />Please see <a href="http://www.primothemes.com/forums/viewtopic.php?f=36&t=2636" target="_blank">this thread</a> for details regarding the ideal server configuration for s2Member.',/**/
|
130 |
+
"Back To Home Page", home_url ("/"));
|
|
|
131 |
}
|
132 |
/*
|
133 |
+
Add RTN proxy ( when available ) to the ``$paypal`` array.
|
134 |
*/
|
135 |
+
if (!empty ($_GET["s2member_paypal_proxy"]))
|
136 |
$paypal["s2member_paypal_proxy"] = $_GET["s2member_paypal_proxy"];
|
137 |
/*
|
138 |
+
Add IPN proxy use vars ( when available ) to the ``$paypal`` array.
|
139 |
*/
|
140 |
+
if (!empty ($_GET["s2member_paypal_proxy_use"]))
|
141 |
$paypal["s2member_paypal_proxy_use"] = $_GET["s2member_paypal_proxy_use"];
|
142 |
/*
|
143 |
+
Also add RTN proxy self-verification ( when available ) to the ``$paypal`` array.
|
144 |
*/
|
145 |
+
if (!empty ($_GET["s2member_paypal_proxy_verification"]))
|
146 |
$paypal["s2member_paypal_proxy_verification"] = $_GET["s2member_paypal_proxy_verification"];
|
147 |
/*
|
148 |
+
Also add RTN success redirection URL ( when available ) to the ``$paypal`` array.
|
149 |
+
*/
|
150 |
+
if (!empty ($_GET["s2member_paypal_return_success"]))
|
151 |
+
$paypal["s2member_paypal_return_success"] = $_GET["s2member_paypal_return_success"];
|
152 |
+
/*
|
153 |
+
Also add RTN t and r Attributes ( when available ) to the ``$paypal`` array.
|
154 |
+
*/
|
155 |
+
if (!empty ($_GET["s2member_paypal_return_tra"]))
|
156 |
+
$paypal["s2member_paypal_return_tra"] = $_GET["s2member_paypal_return_tra"];
|
157 |
+
/*
|
158 |
If debugging/logging is enabled; we need to append $paypal to the log file.
|
159 |
Logging now supports Multisite Networking as well.
|
160 |
*/
|
includes/classes/paypal-utilities.inc.php
CHANGED
@@ -44,7 +44,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
44 |
Custom conditionals can be applied by filters.
|
45 |
*/
|
46 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
47 |
-
if (!
|
48 |
{
|
49 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
50 |
/**/
|
@@ -145,7 +145,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
145 |
do_action ("ws_plugin__s2member_before_paypal_api_response", get_defined_vars ());
|
146 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
147 |
/**/
|
148 |
-
$url = "https://" . (
|
149 |
/**/
|
150 |
$post_vars = apply_filters ("ws_plugin__s2member_paypal_api_post_vars", $post_vars, get_defined_vars ());
|
151 |
$post_vars = (is_array ($post_vars)) ? $post_vars : array (); /* Must be an array. */
|
@@ -290,7 +290,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
290 |
else if (is_string ($string = $array_or_string) && !empty ($string))
|
291 |
$subscr_id = trim ($string);
|
292 |
/**/
|
293 |
-
return apply_filters ("ws_plugin__s2member_paypal_pro_subscr_id", (
|
294 |
}
|
295 |
/**
|
296 |
* Get `item_number` from either an array with `PROFILEREFERENCE|rp_invoice_id|item_number1|item_number`, or use an existing string.
|
@@ -309,7 +309,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
309 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
310 |
/**/
|
311 |
if (is_array ($array = $array_or_string) && (!empty ($array["PROFILEREFERENCE"]) || !empty ($array["rp_invoice_id"])))
|
312 |
-
list ($_reference, $_domain, $_item_number) = array_map ("trim", preg_split ("/~/", (
|
313 |
/**/
|
314 |
else if (is_array ($array = $array_or_string) && !empty ($array["item_number1"]))
|
315 |
$_item_number = trim ($array["item_number1"]);
|
@@ -320,13 +320,13 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
320 |
else if (is_string ($string = $array_or_string) && !empty ($string))
|
321 |
$_item_number = trim ($string);
|
322 |
/**/
|
323 |
-
if (!empty ($_item_number) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["
|
324 |
$item_number = $_item_number;
|
325 |
/**/
|
326 |
else if (!empty ($_item_number) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $_item_number))
|
327 |
$item_number = $_item_number;
|
328 |
/**/
|
329 |
-
return apply_filters ("ws_plugin__s2member_paypal_pro_item_number", (
|
330 |
}
|
331 |
/**
|
332 |
* Get `item_name` from either an array with `product_name|item_name1|item_name`, or use an existing string.
|
@@ -355,7 +355,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
355 |
else if (is_string ($string = $array_or_string) && !empty ($string))
|
356 |
$item_name = trim ($string);
|
357 |
/**/
|
358 |
-
return apply_filters ("ws_plugin__s2member_paypal_pro_item_name", (
|
359 |
}
|
360 |
/**
|
361 |
* Get `period1` from either an array with `PROFILEREFERENCE|rp_invoice_id|period1`, or use an existing string.
|
@@ -378,7 +378,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
378 |
/**/
|
379 |
if (is_array ($array = $array_or_string) && (!empty ($array["PROFILEREFERENCE"]) || !empty ($array["rp_invoice_id"])))
|
380 |
{
|
381 |
-
list ($_reference, $_domain, $_item_number) = array_map ("trim", preg_split ("/~/", (
|
382 |
list ($_start_time, $_period1, $_period3) = array_map ("trim", preg_split ("/\:/", $_reference, 3));
|
383 |
}
|
384 |
else if (is_array ($array = $array_or_string) && !empty ($array["period1"]))
|
@@ -430,7 +430,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
430 |
/**/
|
431 |
if (is_array ($array = $array_or_string) && (!empty ($array["PROFILEREFERENCE"]) || !empty ($array["rp_invoice_id"])))
|
432 |
{
|
433 |
-
list ($_reference, $_domain, $_item_number) = array_map ("trim", preg_split ("/~/", (
|
434 |
list ($_start_time, $_period1, $_period3) = array_map ("trim", preg_split ("/\:/", $_reference, 3));
|
435 |
}
|
436 |
else if (is_array ($array = $array_or_string) && !empty ($array["period3"]))
|
44 |
Custom conditionals can be applied by filters.
|
45 |
*/
|
46 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
47 |
+
if (!($postvars = apply_filters ("ws_plugin__s2member_during_paypal_postvars_conditionals", array (), get_defined_vars ())))
|
48 |
{
|
49 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
50 |
/**/
|
145 |
do_action ("ws_plugin__s2member_before_paypal_api_response", get_defined_vars ());
|
146 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
147 |
/**/
|
148 |
+
$url = "https://" . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "api-3t.sandbox.paypal.com" : "api-3t.paypal.com") . "/nvp";
|
149 |
/**/
|
150 |
$post_vars = apply_filters ("ws_plugin__s2member_paypal_api_post_vars", $post_vars, get_defined_vars ());
|
151 |
$post_vars = (is_array ($post_vars)) ? $post_vars : array (); /* Must be an array. */
|
290 |
else if (is_string ($string = $array_or_string) && !empty ($string))
|
291 |
$subscr_id = trim ($string);
|
292 |
/**/
|
293 |
+
return apply_filters ("ws_plugin__s2member_paypal_pro_subscr_id", ((!empty ($subscr_id)) ? $subscr_id : false), get_defined_vars ());
|
294 |
}
|
295 |
/**
|
296 |
* Get `item_number` from either an array with `PROFILEREFERENCE|rp_invoice_id|item_number1|item_number`, or use an existing string.
|
309 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
310 |
/**/
|
311 |
if (is_array ($array = $array_or_string) && (!empty ($array["PROFILEREFERENCE"]) || !empty ($array["rp_invoice_id"])))
|
312 |
+
list ($_reference, $_domain, $_item_number) = array_map ("trim", preg_split ("/~/", ((!empty ($array["PROFILEREFERENCE"])) ? $array["PROFILEREFERENCE"] : $array["rp_invoice_id"]), 3));
|
313 |
/**/
|
314 |
else if (is_array ($array = $array_or_string) && !empty ($array["item_number1"]))
|
315 |
$_item_number = trim ($array["item_number1"]);
|
320 |
else if (is_string ($string = $array_or_string) && !empty ($string))
|
321 |
$_item_number = trim ($string);
|
322 |
/**/
|
323 |
+
if (!empty ($_item_number) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_or_wo_level_regex"], $_item_number))
|
324 |
$item_number = $_item_number;
|
325 |
/**/
|
326 |
else if (!empty ($_item_number) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $_item_number))
|
327 |
$item_number = $_item_number;
|
328 |
/**/
|
329 |
+
return apply_filters ("ws_plugin__s2member_paypal_pro_item_number", ((!empty ($item_number)) ? $item_number : false), get_defined_vars ());
|
330 |
}
|
331 |
/**
|
332 |
* Get `item_name` from either an array with `product_name|item_name1|item_name`, or use an existing string.
|
355 |
else if (is_string ($string = $array_or_string) && !empty ($string))
|
356 |
$item_name = trim ($string);
|
357 |
/**/
|
358 |
+
return apply_filters ("ws_plugin__s2member_paypal_pro_item_name", ((!empty ($item_name)) ? $item_name : false), get_defined_vars ());
|
359 |
}
|
360 |
/**
|
361 |
* Get `period1` from either an array with `PROFILEREFERENCE|rp_invoice_id|period1`, or use an existing string.
|
378 |
/**/
|
379 |
if (is_array ($array = $array_or_string) && (!empty ($array["PROFILEREFERENCE"]) || !empty ($array["rp_invoice_id"])))
|
380 |
{
|
381 |
+
list ($_reference, $_domain, $_item_number) = array_map ("trim", preg_split ("/~/", ((!empty ($array["PROFILEREFERENCE"])) ? $array["PROFILEREFERENCE"] : $array["rp_invoice_id"]), 3));
|
382 |
list ($_start_time, $_period1, $_period3) = array_map ("trim", preg_split ("/\:/", $_reference, 3));
|
383 |
}
|
384 |
else if (is_array ($array = $array_or_string) && !empty ($array["period1"]))
|
430 |
/**/
|
431 |
if (is_array ($array = $array_or_string) && (!empty ($array["PROFILEREFERENCE"]) || !empty ($array["rp_invoice_id"])))
|
432 |
{
|
433 |
+
list ($_reference, $_domain, $_item_number) = array_map ("trim", preg_split ("/~/", ((!empty ($array["PROFILEREFERENCE"])) ? $array["PROFILEREFERENCE"] : $array["rp_invoice_id"]), 3));
|
434 |
list ($_start_time, $_period1, $_period3) = array_map ("trim", preg_split ("/\:/", $_reference, 3));
|
435 |
}
|
436 |
else if (is_array ($array = $array_or_string) && !empty ($array["period3"]))
|
includes/classes/profile-in.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
21 |
{
|
@@ -49,46 +49,26 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
49 |
/**/
|
50 |
if (($user = (is_user_logged_in ()) ? wp_get_current_user () : false) && ($user_id = $user->ID))
|
51 |
{
|
52 |
-
echo
|
53 |
-
/**/
|
54 |
-
echo '<html xmlns="http://www.w3.org/1999/xhtml">' . "\n";
|
55 |
-
echo '<head>' . "\n";
|
56 |
-
/**/
|
57 |
-
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . "\n";
|
58 |
-
/**/
|
59 |
-
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/jquery/jquery.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
60 |
-
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/l10n.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
61 |
-
echo '<script type="text/javascript">var pwsL10n = {empty: "Strength indicator", short: "Very weak", bad: "Weak", good: "Medium", strong: "Strong", mismatch: "Mismatch"}; try{convertEntities(pwsL10n);}catch(e){};</script>' . "\n";
|
62 |
-
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-admin/js/password-strength-meter.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
63 |
-
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/?ws_plugin__s2member_js_w_globals=" . urlencode (WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5) . "&qcABC=1&ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
64 |
-
echo '<link href="' . esc_attr (site_url ("/?ws_plugin__s2member_css=1&qcABC=1&ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '" type="text/css" rel="stylesheet" media="all" />' . "\n";
|
65 |
-
/**/
|
66 |
-
echo '<title>My Profile</title>' . "\n";
|
67 |
-
/**/
|
68 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
69 |
-
do_action ("ws_plugin__s2member_during_profile_head", get_defined_vars ());
|
70 |
-
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
71 |
-
/**/
|
72 |
-
echo '</head>' . "\n";
|
73 |
/**/
|
74 |
echo '<body style="' . esc_attr (apply_filters ("ws_plugin__s2member_profile_body_styles", "background:#FFFFFF; color:#333333; font-family:'Verdana', sans-serif; font-size:13px;", get_defined_vars ())) . '">' . "\n";
|
75 |
/**/
|
76 |
echo '<form method="post" name="ws_plugin__s2member_profile" id="ws-plugin--s2member-profile" action="' . esc_attr (site_url ("/")) . '">' . "\n";
|
77 |
/**/
|
78 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
79 |
do_action ("ws_plugin__s2member_during_profile_before_table", get_defined_vars ());
|
80 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
81 |
/**/
|
82 |
echo '<table cellpadding="0" cellspacing="0">' . "\n";
|
83 |
echo '<tbody>' . "\n";
|
84 |
/**/
|
85 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
86 |
do_action ("ws_plugin__s2member_during_profile_before_fields", get_defined_vars ());
|
87 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
88 |
/**/
|
89 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_username", true, get_defined_vars ()))
|
90 |
{
|
91 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
92 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_username", get_defined_vars ());
|
93 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
94 |
/**/
|
@@ -101,14 +81,14 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
101 |
echo '</td>' . "\n";
|
102 |
echo '</tr>' . "\n";
|
103 |
/**/
|
104 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
105 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_username", get_defined_vars ());
|
106 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
107 |
}
|
108 |
/**/
|
109 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_email", true, get_defined_vars ()))
|
110 |
{
|
111 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
112 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_email", get_defined_vars ());
|
113 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
114 |
/**/
|
@@ -121,7 +101,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
121 |
echo '</td>' . "\n";
|
122 |
echo '</tr>' . "\n";
|
123 |
/**/
|
124 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
125 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_email", get_defined_vars ());
|
126 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
127 |
}
|
@@ -130,7 +110,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
130 |
{
|
131 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_first_name", true, get_defined_vars ()))
|
132 |
{
|
133 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
134 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_first_name", get_defined_vars ());
|
135 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
136 |
/**/
|
@@ -143,14 +123,14 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
143 |
echo '</td>' . "\n";
|
144 |
echo '</tr>' . "\n";
|
145 |
/**/
|
146 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
147 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_first_name", get_defined_vars ());
|
148 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
149 |
}
|
150 |
/**/
|
151 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_last_name", true, get_defined_vars ()))
|
152 |
{
|
153 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
154 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_last_name", get_defined_vars ());
|
155 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
156 |
/**/
|
@@ -163,14 +143,14 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
163 |
echo '</td>' . "\n";
|
164 |
echo '</tr>' . "\n";
|
165 |
/**/
|
166 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
167 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_last_name", get_defined_vars ());
|
168 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
169 |
}
|
170 |
/**/
|
171 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_display_name", true, get_defined_vars ()))
|
172 |
{
|
173 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
174 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_display_name", get_defined_vars ());
|
175 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
176 |
/**/
|
@@ -183,7 +163,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
183 |
echo '</td>' . "\n";
|
184 |
echo '</tr>' . "\n";
|
185 |
/**/
|
186 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
187 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_display_name", get_defined_vars ());
|
188 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
189 |
}
|
@@ -196,13 +176,13 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
196 |
{
|
197 |
$fields = get_user_option ("s2member_custom_fields", $user_id);
|
198 |
/**/
|
199 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
200 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_custom_fields", get_defined_vars ());
|
201 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
202 |
/**/
|
203 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
204 |
{
|
205 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
206 |
do_action ("ws_plugin__s2member_during_profile_during_fields_during_custom_fields_before", get_defined_vars ());
|
207 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
208 |
/**/
|
@@ -211,7 +191,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
211 |
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
212 |
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
213 |
/**/
|
214 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
215 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_during_custom_fields_display", true, get_defined_vars ()))
|
216 |
{
|
217 |
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
@@ -228,12 +208,12 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
228 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
229 |
}
|
230 |
/**/
|
231 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
232 |
do_action ("ws_plugin__s2member_during_profile_during_fields_during_custom_fields_after", get_defined_vars ());
|
233 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
234 |
}
|
235 |
/**/
|
236 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
237 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_custom_fields", get_defined_vars ());
|
238 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
239 |
}
|
@@ -241,7 +221,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
241 |
/**/
|
242 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_password", true, get_defined_vars ()))
|
243 |
{
|
244 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
245 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_password", get_defined_vars ());
|
246 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
247 |
/**/
|
@@ -263,12 +243,12 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
263 |
echo '</td>' . "\n";
|
264 |
echo '</tr>' . "\n";
|
265 |
/**/
|
266 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
267 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_password", get_defined_vars ());
|
268 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
269 |
}
|
270 |
/**/
|
271 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
272 |
do_action ("ws_plugin__s2member_during_profile_after_fields", get_defined_vars ());
|
273 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
274 |
/**/
|
@@ -282,7 +262,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
|
282 |
echo '</tbody>' . "\n";
|
283 |
echo '</table>' . "\n";
|
284 |
/**/
|
285 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
286 |
do_action ("ws_plugin__s2member_during_profile_after_table", get_defined_vars ());
|
287 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
288 |
/**/
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_profile_in"))
|
21 |
{
|
49 |
/**/
|
50 |
if (($user = (is_user_logged_in ()) ? wp_get_current_user () : false) && ($user_id = $user->ID))
|
51 |
{
|
52 |
+
echo c_ws_plugin__s2member_utils_html::doctype_html_head ("My Profile", "ws_plugin__s2member_during_profile_head");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
/**/
|
54 |
echo '<body style="' . esc_attr (apply_filters ("ws_plugin__s2member_profile_body_styles", "background:#FFFFFF; color:#333333; font-family:'Verdana', sans-serif; font-size:13px;", get_defined_vars ())) . '">' . "\n";
|
55 |
/**/
|
56 |
echo '<form method="post" name="ws_plugin__s2member_profile" id="ws-plugin--s2member-profile" action="' . esc_attr (site_url ("/")) . '">' . "\n";
|
57 |
/**/
|
58 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
59 |
do_action ("ws_plugin__s2member_during_profile_before_table", get_defined_vars ());
|
60 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
61 |
/**/
|
62 |
echo '<table cellpadding="0" cellspacing="0">' . "\n";
|
63 |
echo '<tbody>' . "\n";
|
64 |
/**/
|
65 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
66 |
do_action ("ws_plugin__s2member_during_profile_before_fields", get_defined_vars ());
|
67 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
68 |
/**/
|
69 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_username", true, get_defined_vars ()))
|
70 |
{
|
71 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
72 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_username", get_defined_vars ());
|
73 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
74 |
/**/
|
81 |
echo '</td>' . "\n";
|
82 |
echo '</tr>' . "\n";
|
83 |
/**/
|
84 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
85 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_username", get_defined_vars ());
|
86 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
87 |
}
|
88 |
/**/
|
89 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_email", true, get_defined_vars ()))
|
90 |
{
|
91 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
92 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_email", get_defined_vars ());
|
93 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
94 |
/**/
|
101 |
echo '</td>' . "\n";
|
102 |
echo '</tr>' . "\n";
|
103 |
/**/
|
104 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
105 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_email", get_defined_vars ());
|
106 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
107 |
}
|
110 |
{
|
111 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_first_name", true, get_defined_vars ()))
|
112 |
{
|
113 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
114 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_first_name", get_defined_vars ());
|
115 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
116 |
/**/
|
123 |
echo '</td>' . "\n";
|
124 |
echo '</tr>' . "\n";
|
125 |
/**/
|
126 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
127 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_first_name", get_defined_vars ());
|
128 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
129 |
}
|
130 |
/**/
|
131 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_last_name", true, get_defined_vars ()))
|
132 |
{
|
133 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
134 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_last_name", get_defined_vars ());
|
135 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
136 |
/**/
|
143 |
echo '</td>' . "\n";
|
144 |
echo '</tr>' . "\n";
|
145 |
/**/
|
146 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
147 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_last_name", get_defined_vars ());
|
148 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
149 |
}
|
150 |
/**/
|
151 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_display_name", true, get_defined_vars ()))
|
152 |
{
|
153 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
154 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_display_name", get_defined_vars ());
|
155 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
156 |
/**/
|
163 |
echo '</td>' . "\n";
|
164 |
echo '</tr>' . "\n";
|
165 |
/**/
|
166 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
167 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_display_name", get_defined_vars ());
|
168 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
169 |
}
|
176 |
{
|
177 |
$fields = get_user_option ("s2member_custom_fields", $user_id);
|
178 |
/**/
|
179 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
180 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_custom_fields", get_defined_vars ());
|
181 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
182 |
/**/
|
183 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
184 |
{
|
185 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
186 |
do_action ("ws_plugin__s2member_during_profile_during_fields_during_custom_fields_before", get_defined_vars ());
|
187 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
188 |
/**/
|
191 |
$field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
|
192 |
$field_id_class = preg_replace ("/_/", "-", $field_var);
|
193 |
/**/
|
194 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
195 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_during_custom_fields_display", true, get_defined_vars ()))
|
196 |
{
|
197 |
if (!empty ($field["section"]) && $field["section"] === "yes") /* Starts a new section? */
|
208 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
209 |
}
|
210 |
/**/
|
211 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
212 |
do_action ("ws_plugin__s2member_during_profile_during_fields_during_custom_fields_after", get_defined_vars ());
|
213 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
214 |
}
|
215 |
/**/
|
216 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
217 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_custom_fields", get_defined_vars ());
|
218 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
219 |
}
|
221 |
/**/
|
222 |
if (apply_filters ("ws_plugin__s2member_during_profile_during_fields_display_password", true, get_defined_vars ()))
|
223 |
{
|
224 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
225 |
do_action ("ws_plugin__s2member_during_profile_during_fields_before_password", get_defined_vars ());
|
226 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
227 |
/**/
|
243 |
echo '</td>' . "\n";
|
244 |
echo '</tr>' . "\n";
|
245 |
/**/
|
246 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
247 |
do_action ("ws_plugin__s2member_during_profile_during_fields_after_password", get_defined_vars ());
|
248 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
249 |
}
|
250 |
/**/
|
251 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
252 |
do_action ("ws_plugin__s2member_during_profile_after_fields", get_defined_vars ());
|
253 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
254 |
/**/
|
262 |
echo '</tbody>' . "\n";
|
263 |
echo '</table>' . "\n";
|
264 |
/**/
|
265 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
266 |
do_action ("ws_plugin__s2member_during_profile_after_table", get_defined_vars ());
|
267 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
268 |
/**/
|
includes/classes/register-access.inc.php
CHANGED
@@ -97,7 +97,7 @@ if (!class_exists ("c_ws_plugin__s2member_register_access"))
|
|
97 |
/**/
|
98 |
do_action ("ws_plugin__s2member_before_reg_cookies_ok", get_defined_vars ());
|
99 |
/**/
|
100 |
-
if (isset ($_COOKIE["s2member_subscr_gateway"], $_COOKIE["s2member_subscr_id"], $_COOKIE["s2member_custom"], $_COOKIE["s2member_item_number"]) && ($subscr_gateway = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_subscr_gateway"])) && ($subscr_id = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_subscr_id"])) && preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", ($custom = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_custom"]))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["
|
101 |
$reg_cookies = array ("subscr_gateway" => $subscr_gateway, "subscr_id" => $subscr_id, "custom" => $custom, "item_number" => $item_number);
|
102 |
/**/
|
103 |
return apply_filters ("ws_plugin__s2member_reg_cookies_ok", ((isset ($reg_cookies) && is_array ($reg_cookies)) ? $reg_cookies : false), get_defined_vars ());
|
97 |
/**/
|
98 |
do_action ("ws_plugin__s2member_before_reg_cookies_ok", get_defined_vars ());
|
99 |
/**/
|
100 |
+
if (isset ($_COOKIE["s2member_subscr_gateway"], $_COOKIE["s2member_subscr_id"], $_COOKIE["s2member_custom"], $_COOKIE["s2member_item_number"]) && ($subscr_gateway = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_subscr_gateway"])) && ($subscr_id = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_subscr_id"])) && preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", ($custom = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_custom"]))) && preg_match ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"], ($item_number = c_ws_plugin__s2member_utils_encryption::decrypt ($_COOKIE["s2member_item_number"]))) && !$wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE `meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' AND `meta_value` = '" . $wpdb->escape ($subscr_id) . "' LIMIT 1"))
|
101 |
$reg_cookies = array ("subscr_gateway" => $subscr_gateway, "subscr_id" => $subscr_id, "custom" => $custom, "item_number" => $item_number);
|
102 |
/**/
|
103 |
return apply_filters ("ws_plugin__s2member_reg_cookies_ok", ((isset ($reg_cookies) && is_array ($reg_cookies)) ? $reg_cookies : false), get_defined_vars ());
|
includes/classes/register-in.inc.php
CHANGED
@@ -56,10 +56,10 @@ if (!class_exists ("c_ws_plugin__s2member_register_in"))
|
|
56 |
/**/
|
57 |
if (($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok ()) && extract ($reg_cookies))
|
58 |
{
|
59 |
-
setcookie ("s2member_subscr_gateway",
|
60 |
-
setcookie ("s2member_subscr_id",
|
61 |
-
setcookie ("s2member_custom",
|
62 |
-
setcookie ("s2member_item_number",
|
63 |
/**/
|
64 |
do_action ("ws_plugin__s2member_during_register", get_defined_vars ());
|
65 |
/**/
|
56 |
/**/
|
57 |
if (($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok ()) && extract ($reg_cookies))
|
58 |
{
|
59 |
+
setcookie ("s2member_subscr_gateway", $_COOKIE["s2member_subscr_gateway"], time () + 31556926, "/");
|
60 |
+
setcookie ("s2member_subscr_id", $_COOKIE["s2member_subscr_id"], time () + 31556926, "/");
|
61 |
+
setcookie ("s2member_custom", $_COOKIE["s2member_custom"], time () + 31556926, "/");
|
62 |
+
setcookie ("s2member_item_number", $_COOKIE["s2member_item_number"], time () + 31556926, "/");
|
63 |
/**/
|
64 |
do_action ("ws_plugin__s2member_during_register", get_defined_vars ());
|
65 |
/**/
|
includes/classes/registrations.inc.php
CHANGED
@@ -47,10 +47,19 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
47 |
do_action ("ws_plugin__s2member_before_generate_password", get_defined_vars ());
|
48 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
49 |
/**/
|
50 |
-
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"])
|
51 |
-
|
52 |
-
if (
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
/**/
|
55 |
$GLOBALS["ws_plugin__s2member_generate_password_return"] = $password; /* Global reference. */
|
56 |
/**/
|
@@ -77,7 +86,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
77 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
78 |
/**/
|
79 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
80 |
-
if (!is_admin () && isset ($result["user_name"], $result["user_email"]) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (
|
81 |
{
|
82 |
if (c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($result["user_name"], $result["user_email"]))
|
83 |
$result["errors"] = new WP_Error ();
|
@@ -107,7 +116,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
107 |
do_action ("ws_plugin__s2member_before_ms_process_signup_hidden_fields", get_defined_vars ());
|
108 |
/**/
|
109 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
110 |
-
if (!is_admin () && !empty ($_POST) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (
|
111 |
{
|
112 |
foreach ((array)c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)) as $key => $value)
|
113 |
if (preg_match ("/^ws_plugin__s2member_(custom_reg_field|user_new)_/", $key))
|
@@ -146,7 +155,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
146 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
147 |
/**/
|
148 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
149 |
-
if ((is_blog_admin () && !empty ($_POST) && $pagenow === "user-new.php") || (!is_admin () && !empty ($_POST) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (
|
150 |
{
|
151 |
c_ws_plugin__s2member_email_configs::email_config (); /* Configures From: header used in notifications. */
|
152 |
/**/
|
@@ -186,7 +195,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
186 |
extract ($vars); /* Extract all variables from ``wpmu_activate_signup()`` function. */
|
187 |
/**/
|
188 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
189 |
-
if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (
|
190 |
{
|
191 |
if (!empty ($user_id) && !empty ($user_login) && !empty ($user_email) && !empty ($password) && !empty ($meta) && !empty ($meta["add_to_blog"]) && !empty ($meta["new_role"]))
|
192 |
if (!empty ($user_already_exists) && c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email))
|
@@ -229,7 +238,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
229 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
230 |
/**/
|
231 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
232 |
-
if ((is_blog_admin () && $pagenow === "user-new.php" && isset ($_POST["noconfirmation"])) || (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (
|
233 |
{
|
234 |
c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : false));
|
235 |
delete_user_meta ($user_id, "s2member_ms_signup_meta");
|
@@ -268,7 +277,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
268 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
269 |
/**/
|
270 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
271 |
-
if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (
|
272 |
{
|
273 |
c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : false));
|
274 |
delete_user_meta ($user_id, "s2member_ms_signup_meta");
|
@@ -385,8 +394,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
385 |
* This function also receives hand-offs from s2Member's handlers for these two Hooks:
|
386 |
* ``wpmu_activate_user`` and ``wpmu_activate_blog``.
|
387 |
*
|
388 |
-
* This function also receives simulated events from s2Member Pro.
|
389 |
-
*
|
390 |
* @package s2Member\Registrations
|
391 |
* @since 3.5
|
392 |
*
|
@@ -421,9 +428,10 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
421 |
&& ((!empty ($_POST) && is_array ($_p = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)))) || is_array ($meta))/**/
|
422 |
/**/
|
423 |
/* These negative matches are designed to prevent this routine from running under certain conditions; where we need to wait for `wpmu_activate_user|blog`. */
|
424 |
-
&& !(is_multisite () && is_blog_admin () && $pagenow === "user-new.php" && isset ($_p["noconfirmation"]) && is_super_admin () && func_num_args () !== 3)
|
425 |
-
&& !(preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) && func_num_args () !== 3) /* If activating; we MUST have a $meta arg to proceed. */
|
426 |
-
&& !(
|
|
|
427 |
/**/
|
428 |
&& $user_id && is_object ($user = new WP_User ($user_id)) && ($user_id = $user->ID) && ($processed = true))
|
429 |
{
|
@@ -446,7 +454,8 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
446 |
/**/
|
447 |
$custom_reg_display_name = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"]; /* Can be configured by the site owner. */
|
448 |
/**/
|
449 |
-
if (!is_admin () && (
|
|
|
450 |
{ /* This routine could be processed through `wp-login.php?action=register`, `wp-activate.php`, or `/activate` via BuddyPress`.
|
451 |
This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
|
452 |
If processed through `wp-activate.php`, it could've originated inside the admin, via `user-new.php`. */
|
@@ -593,7 +602,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
593 |
}
|
594 |
/**/
|
595 |
if (!headers_sent ()) /* Only if headers are NOT yet sent. */
|
596 |
-
@setcookie ("s2member_signup_tracking", c_ws_plugin__s2member_utils_encryption::encrypt ($subscr_id), time () + 31556926, "/");
|
597 |
/**/
|
598 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
599 |
do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_paid", get_defined_vars ());
|
@@ -601,7 +610,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
601 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
602 |
}
|
603 |
/**/
|
604 |
-
else if (!is_admin ()
|
605 |
{ /* This routine could be processed through `wp-login.php?action=register`, `wp-activate.php`, or `/activate` via BuddyPress`.
|
606 |
This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
|
607 |
If processed through `wp-activate.php`, it could've originated inside the admin, via `user-new.php`. */
|
@@ -747,8 +756,8 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
747 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
748 |
}
|
749 |
/**/
|
750 |
-
else if (is_blog_admin () && $pagenow === "user-new.php")
|
751 |
-
{ /*
|
752 |
$processed = "yes"; /* Mark this as yes, to indicate that a routine was processed. */
|
753 |
/**/
|
754 |
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
47 |
do_action ("ws_plugin__s2member_before_generate_password", get_defined_vars ());
|
48 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
49 |
/**/
|
50 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] || (c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user")))
|
51 |
+
{
|
52 |
+
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] && !empty ($_POST["ws_plugin__s2member_custom_reg_field_user_pass1"]))
|
53 |
+
{
|
54 |
+
if (($custom = trim (stripslashes ($_POST["ws_plugin__s2member_custom_reg_field_user_pass1"]))))
|
55 |
+
$password = $custom; /* Yes, use s2Member custom Password supplied by User. */
|
56 |
+
}
|
57 |
+
else if (c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user") && !empty ($GLOBALS["ws_plugin__s2member_generate_password_return"]))
|
58 |
+
{
|
59 |
+
if (($custom = trim (stripslashes ($GLOBALS["ws_plugin__s2member_generate_password_return"]))))
|
60 |
+
$password = $custom; /* Yes, use s2Member custom Password supplied by Remote Op. */
|
61 |
+
}
|
62 |
+
}
|
63 |
/**/
|
64 |
$GLOBALS["ws_plugin__s2member_generate_password_return"] = $password; /* Global reference. */
|
65 |
/**/
|
86 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
87 |
/**/
|
88 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
89 |
+
if (!is_admin () && isset ($result["user_name"], $result["user_email"]) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())))
|
90 |
{
|
91 |
if (c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($result["user_name"], $result["user_email"]))
|
92 |
$result["errors"] = new WP_Error ();
|
116 |
do_action ("ws_plugin__s2member_before_ms_process_signup_hidden_fields", get_defined_vars ());
|
117 |
/**/
|
118 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
119 |
+
if (!is_admin () && !empty ($_POST) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())))
|
120 |
{
|
121 |
foreach ((array)c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)) as $key => $value)
|
122 |
if (preg_match ("/^ws_plugin__s2member_(custom_reg_field|user_new)_/", $key))
|
155 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
156 |
/**/
|
157 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
158 |
+
if ((is_blog_admin () && !empty ($_POST) && $pagenow === "user-new.php") || (!is_admin () && !empty ($_POST) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ()))))
|
159 |
{
|
160 |
c_ws_plugin__s2member_email_configs::email_config (); /* Configures From: header used in notifications. */
|
161 |
/**/
|
195 |
extract ($vars); /* Extract all variables from ``wpmu_activate_signup()`` function. */
|
196 |
/**/
|
197 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
198 |
+
if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ())))
|
199 |
{
|
200 |
if (!empty ($user_id) && !empty ($user_login) && !empty ($user_email) && !empty ($password) && !empty ($meta) && !empty ($meta["add_to_blog"]) && !empty ($meta["new_role"]))
|
201 |
if (!empty ($user_already_exists) && c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email))
|
238 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
239 |
/**/
|
240 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
241 |
+
if ((is_blog_admin () && $pagenow === "user-new.php" && isset ($_POST["noconfirmation"])) || (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ()))))
|
242 |
{
|
243 |
c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : false));
|
244 |
delete_user_meta ($user_id, "s2member_ms_signup_meta");
|
277 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
278 |
/**/
|
279 |
if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
|
280 |
+
if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ())))
|
281 |
{
|
282 |
c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : false));
|
283 |
delete_user_meta ($user_id, "s2member_ms_signup_meta");
|
394 |
* This function also receives hand-offs from s2Member's handlers for these two Hooks:
|
395 |
* ``wpmu_activate_user`` and ``wpmu_activate_blog``.
|
396 |
*
|
|
|
|
|
397 |
* @package s2Member\Registrations
|
398 |
* @since 3.5
|
399 |
*
|
428 |
&& ((!empty ($_POST) && is_array ($_p = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)))) || is_array ($meta))/**/
|
429 |
/**/
|
430 |
/* These negative matches are designed to prevent this routine from running under certain conditions; where we need to wait for `wpmu_activate_user|blog`. */
|
431 |
+
&& !(is_multisite () && is_blog_admin () && $pagenow === "user-new.php" && isset ($_p["noconfirmation"]) && is_super_admin () && func_num_args () !== 3) /* OK? */
|
432 |
+
&& !(preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) && func_num_args () !== 3) /* If activating; we MUST have a $meta arg to proceed. Otherwise ignore. */
|
433 |
+
&& !(c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user") && empty ($GLOBALS["ws_plugin__s2member_registration_vars"]))/**/
|
434 |
+
&& !(c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page () && func_num_args () !== 3)
|
435 |
/**/
|
436 |
&& $user_id && is_object ($user = new WP_User ($user_id)) && ($user_id = $user->ID) && ($processed = true))
|
437 |
{
|
454 |
/**/
|
455 |
$custom_reg_display_name = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"]; /* Can be configured by the site owner. */
|
456 |
/**/
|
457 |
+
if (!is_admin () && (!c_ws_plugin__s2member_utils_conds::pro_is_installed () || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user"))/**/
|
458 |
+
&& ($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok ()) && extract ($reg_cookies)) /* A Customer? */
|
459 |
{ /* This routine could be processed through `wp-login.php?action=register`, `wp-activate.php`, or `/activate` via BuddyPress`.
|
460 |
This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
|
461 |
If processed through `wp-activate.php`, it could've originated inside the admin, via `user-new.php`. */
|
602 |
}
|
603 |
/**/
|
604 |
if (!headers_sent ()) /* Only if headers are NOT yet sent. */
|
605 |
+
@setcookie ("s2member_signup_tracking", ($s2member_signup_tracking = c_ws_plugin__s2member_utils_encryption::encrypt ($subscr_id)), time () + 31556926, "/") . ($_COOKIE["s2member_signup_tracking"] = $s2member_signup_tracking);
|
606 |
/**/
|
607 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
608 |
do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_paid", get_defined_vars ());
|
610 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
611 |
}
|
612 |
/**/
|
613 |
+
else if (!is_admin () && (!c_ws_plugin__s2member_utils_conds::pro_is_installed () || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user")))
|
614 |
{ /* This routine could be processed through `wp-login.php?action=register`, `wp-activate.php`, or `/activate` via BuddyPress`.
|
615 |
This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
|
616 |
If processed through `wp-activate.php`, it could've originated inside the admin, via `user-new.php`. */
|
756 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
757 |
}
|
758 |
/**/
|
759 |
+
else if ((is_blog_admin () && $pagenow === "user-new.php") || (c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user")))
|
760 |
+
{ /* Can only be processed through `user-new.php` in the Admin panel, or through Remote Op: `create_user`. */
|
761 |
$processed = "yes"; /* Mark this as yes, to indicate that a routine was processed. */
|
762 |
/**/
|
763 |
$current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
|
includes/classes/return-templates.inc.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\Return_Templates
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_return_templates"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's Return Page template handler.
|
24 |
+
*
|
25 |
+
* @package s2Member\Return_Templates
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_return_templates
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* Handles Return templates w/ response message.
|
32 |
+
*
|
33 |
+
* @package s2Member\Return_Templates
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @param str $template Optional A Subscr. Gateway code should be used as the template name, or `default` is a multipurpose template. Defaults to `default`. Used in template selection.
|
37 |
+
* @param str $response Optional. Response message to fill template with, using the Replacement Code `%%response%%` inside the template file. Defaults to: `Thank you. Please click the link below.`.
|
38 |
+
* @param str $continue_html Optional. The HTML value of the continuation link presented within the template using Replacement Code `%%continue%%`. Defaults to: `Continue`.
|
39 |
+
* @param str $continue_link Optional. The HREF value for the continuation link presented within the template using Replacement Code `%%continue%%`. Defaults to: ``home_url ("/")``.
|
40 |
+
* @return str The full HTML code of the template. All Replacement Codes inside the template file will have already been filled by this routine.
|
41 |
+
*/
|
42 |
+
public static function return_template ($template = FALSE, $response = FALSE, $continue_html = FALSE, $continue_link = FALSE)
|
43 |
+
{
|
44 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
45 |
+
do_action ("ws_plugin__s2member_before_return_template", get_defined_vars ());
|
46 |
+
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
47 |
+
/**/
|
48 |
+
$template = ($template) ? $template : "default";
|
49 |
+
$continue_html = ($continue_html) ? $continue_html : "Continue";
|
50 |
+
$continue_link = ($continue_link) ? $continue_link : home_url ("/");
|
51 |
+
$response = ($response) ? $response : "Thank you. Please click the link below.";
|
52 |
+
/**/
|
53 |
+
$custom_template = (file_exists (TEMPLATEPATH . "/" . $template . "-return.html")) ? TEMPLATEPATH . "/" . $template . "-return.html" : false;
|
54 |
+
$custom_template = (file_exists (TEMPLATEPATH . "/" . $template . "-return.php")) ? TEMPLATEPATH . "/" . $template . "-return.php" : $custom_template;
|
55 |
+
$custom_template = (file_exists (WP_CONTENT_DIR . "/" . $template . "-return.html")) ? WP_CONTENT_DIR . "/" . $template . "-return.html" : $custom_template;
|
56 |
+
$custom_template = (file_exists (WP_CONTENT_DIR . "/" . $template . "-return.php")) ? WP_CONTENT_DIR . "/" . $template . "-return.php" : $custom_template;
|
57 |
+
/**/
|
58 |
+
$custom_template = (!$custom_template && file_exists (TEMPLATEPATH . "/default-return.html")) ? TEMPLATEPATH . "/default-return.html" : $custom_template;
|
59 |
+
$custom_template = (!$custom_template && file_exists (TEMPLATEPATH . "/default-return.php")) ? TEMPLATEPATH . "/default-return.php" : $custom_template;
|
60 |
+
$custom_template = (!$custom_template && file_exists (WP_CONTENT_DIR . "/default-return.html")) ? WP_CONTENT_DIR . "/default-return.html" : $custom_template;
|
61 |
+
$custom_template = (!$custom_template && file_exists (WP_CONTENT_DIR . "/default-return.php")) ? WP_CONTENT_DIR . "/default-return.php" : $custom_template;
|
62 |
+
/**/
|
63 |
+
$specific_template = ($custom_template) ? $custom_template : ((file_exists ($specific_template = dirname (dirname (__FILE__)) . "/templates/returns/" . $template . "-return.html")) ? $specific_template : false);
|
64 |
+
/**/
|
65 |
+
$code = trim (file_get_contents ((($specific_template) ? $specific_template : dirname (dirname (__FILE__)) . "/templates/returns/default-return.html")));
|
66 |
+
$code = (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? c_ws_plugin__s2member_utilities::evl ($code) : $code;
|
67 |
+
/**/
|
68 |
+
$doctype_html_head = c_ws_plugin__s2member_utils_html::doctype_html_head (get_bloginfo ("name"), "ws_plugin__s2member_during_return_template_head_" . (($specific_template) ? basename ($specific_template) : "default-return.html"));
|
69 |
+
$code = preg_replace ("/%%doctype_html_head%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (apply_filters ("ws_plugin__s2member_return_template_doctype_html_head", $doctype_html_head, get_defined_vars ())), $code);
|
70 |
+
/**/
|
71 |
+
$code = preg_replace ("/%%header%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (apply_filters ("ws_plugin__s2member_return_template_header", '[ ' . esc_html ($_SERVER["HTTP_HOST"]) . ' ] <strong><em>says…</em></strong>', get_defined_vars ())), $code);
|
72 |
+
/**/
|
73 |
+
$code = preg_replace ("/%%response%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (apply_filters ("ws_plugin__s2member_return_template_response", $response, get_defined_vars ())), $code);
|
74 |
+
$code = preg_replace ("/%%continue%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (apply_filters ("ws_plugin__s2member_return_template_continue", '<a href="' . esc_attr ($continue_link) . '">' . $continue_html . '</a>', get_defined_vars ())), $code);
|
75 |
+
$code = preg_replace ("/%%support%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (apply_filters ("ws_plugin__s2member_return_template_support", 'If you need assistance, please <a href="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_support_link"]) . '" target="_blank">contact support</a>.', get_defined_vars ())), $code);
|
76 |
+
$code = preg_replace ("/%%tracking%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (apply_filters ("ws_plugin__s2member_return_template_tracking", c_ws_plugin__s2member_tracking_codes::generate_all_tracking_codes (), get_defined_vars ())), $code);
|
77 |
+
/**/
|
78 |
+
return apply_filters ("ws_plugin__s2member_return_template", $code, get_defined_vars ());
|
79 |
+
}
|
80 |
+
}
|
81 |
+
}
|
82 |
+
?>
|
includes/classes/ruris.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_ruris"))
|
21 |
{
|
@@ -81,7 +81,7 @@ if (!class_exists ("c_ws_plugin__s2member_ruris"))
|
|
81 |
*/
|
82 |
public static function fill_ruri_level_access_rc_vars ($uris = FALSE, $user = FALSE)
|
83 |
{
|
84 |
-
eval
|
85 |
do_action ("ws_plugin__s2member_before_fill_ruri_level_access_rc_vars", get_defined_vars ());
|
86 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
87 |
/**/
|
@@ -95,12 +95,14 @@ if (!class_exists ("c_ws_plugin__s2member_ruris"))
|
|
95 |
$user_level = (string)c_ws_plugin__s2member_user_access::user_access_level ($user);
|
96 |
$user_role = (string)c_ws_plugin__s2member_user_access::user_access_role ($user);
|
97 |
$user_ccaps = (string)implode ("-", c_ws_plugin__s2member_user_access::user_access_ccaps ($user));
|
|
|
98 |
/**/
|
99 |
$uris = (strlen ($user_login)) ? preg_replace ("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_login), $uris) : $uris;
|
100 |
$uris = (strlen ($user_id)) ? preg_replace ("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $uris) : $uris;
|
101 |
$uris = (strlen ($user_level)) ? preg_replace ("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_level), $uris) : $uris;
|
102 |
$uris = (strlen ($user_role)) ? preg_replace ("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_role), $uris) : $uris;
|
103 |
$uris = (strlen ($user_ccaps)) ? preg_replace ("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_ccaps), $uris) : $uris;
|
|
|
104 |
/**/
|
105 |
return apply_filters ("ws_plugin__s2member_fill_ruri_level_access_rc_vars", $uris, get_defined_vars ());
|
106 |
}
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_ruris"))
|
21 |
{
|
81 |
*/
|
82 |
public static function fill_ruri_level_access_rc_vars ($uris = FALSE, $user = FALSE)
|
83 |
{
|
84 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
85 |
do_action ("ws_plugin__s2member_before_fill_ruri_level_access_rc_vars", get_defined_vars ());
|
86 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
87 |
/**/
|
95 |
$user_level = (string)c_ws_plugin__s2member_user_access::user_access_level ($user);
|
96 |
$user_role = (string)c_ws_plugin__s2member_user_access::user_access_role ($user);
|
97 |
$user_ccaps = (string)implode ("-", c_ws_plugin__s2member_user_access::user_access_ccaps ($user));
|
98 |
+
$user_logins = ($user) ? (string)(int)get_user_option ("s2member_login_counter", $user_id) : "-1";
|
99 |
/**/
|
100 |
$uris = (strlen ($user_login)) ? preg_replace ("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_login), $uris) : $uris;
|
101 |
$uris = (strlen ($user_id)) ? preg_replace ("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $uris) : $uris;
|
102 |
$uris = (strlen ($user_level)) ? preg_replace ("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_level), $uris) : $uris;
|
103 |
$uris = (strlen ($user_role)) ? preg_replace ("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_role), $uris) : $uris;
|
104 |
$uris = (strlen ($user_ccaps)) ? preg_replace ("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_ccaps), $uris) : $uris;
|
105 |
+
$uris = (strlen ($user_logins)) ? preg_replace ("/%%current_user_logins%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_logins), $uris) : $uris;
|
106 |
/**/
|
107 |
return apply_filters ("ws_plugin__s2member_fill_ruri_level_access_rc_vars", $uris, get_defined_vars ());
|
108 |
}
|
includes/classes/sc-paypal-button-in.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
21 |
{
|
@@ -42,7 +42,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
42 |
*/
|
43 |
public static function sc_paypal_button ($attr = FALSE, $content = FALSE, $shortcode = FALSE)
|
44 |
{
|
45 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
46 |
do_action ("ws_plugin__s2member_before_sc_paypal_button", get_defined_vars ());
|
47 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
48 |
/**/
|
@@ -63,7 +63,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
63 |
$attr["rr"] = ($attr["rt"] === "L") ? "BN" : $attr["rr"]; /* Lifetime Subscriptions require Buy Now. Only after running shortcode_atts(). */
|
64 |
$attr["ns"] = ($attr["dg"] === "1") ? "1" : $attr["ns"]; /* No shipping directive must be 1 for digital items. After shortcode_atts(). */
|
65 |
/**/
|
66 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
67 |
do_action ("ws_plugin__s2member_before_sc_paypal_button_after_shortcode_atts", get_defined_vars ());
|
68 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
69 |
/**/
|
@@ -83,7 +83,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
83 |
$code = ($attr["output"] === "anchor") ? $code : $code; /* Cancellation Buttons are already in anchor format; Button format is not used in Cancellations. */
|
84 |
$code = ($attr["output"] === "url") ? "https://" . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com") . "/cgi-bin/webscr?cmd=_subscr-find&alias=" . urlencode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"]) : $code;
|
85 |
/**/
|
86 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
87 |
do_action ("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ());
|
88 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
89 |
}
|
@@ -98,11 +98,13 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
98 |
$paypal_on1_input_value = "Customer IP Address"; /* Identifies the Customer's IP Address for tracking purposes. */
|
99 |
$paypal_os1_input_value = $_SERVER["REMOTE_ADDR"]; /* Current User's IP Address for tracking purposes. */
|
100 |
/**/
|
101 |
-
$
|
102 |
-
$success_return_url = apply_filters ("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
|
103 |
/**/
|
104 |
$attr["sp_ids_exp"] = "sp:" . $attr["ids"] . ":" . $attr["exp"]; /* Combined "sp:ids:expiration hours". */
|
105 |
/**/
|
|
|
|
|
|
|
106 |
$code = trim (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-sp-checkout-button.html"));
|
107 |
$code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images")), $code);
|
108 |
$code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ())), $code);
|
@@ -112,7 +114,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
112 |
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (home_url ("/"))), $code);
|
113 |
$code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ("/?s2member_paypal_notify=1"))), $code);
|
114 |
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($success_return_url)), $code);
|
115 |
-
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($
|
116 |
/**/
|
117 |
$code = preg_replace ('/ name\="lc" value\="(.*?)"/', ' name="lc" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["lc"])) . '"', $code);
|
118 |
$code = preg_replace ('/ name\="no_shipping" value\="(.*?)"/', ' name="no_shipping" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["ns"])) . '"', $code);
|
@@ -122,6 +124,8 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
122 |
$code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["cc"])) . '"', $code);
|
123 |
$code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["custom"])) . '"', $code);
|
124 |
/**/
|
|
|
|
|
125 |
$code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on0_input_value)) . '"', $code);
|
126 |
$code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_os0_input_value)) . '"', $code);
|
127 |
$code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on1_input_value)) . '"', $code);
|
@@ -134,7 +138,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
134 |
$code = ($attr["output"] === "anchor") ? '<a href="' . esc_attr (c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code)) . '"><img src="' . esc_attr (($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image) . '" style="width:auto; height:auto; border:0;" alt="PayPal®" /></a>' : $code;
|
135 |
$code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code;
|
136 |
/**/
|
137 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
138 |
do_action ("ws_plugin__s2member_during_sc_paypal_sp_button", get_defined_vars ());
|
139 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
140 |
}
|
@@ -148,14 +152,19 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
148 |
$paypal_on1_input_value = "Customer IP Address"; /* Identifies the Customer's IP Address for tracking purposes. */
|
149 |
$paypal_os1_input_value = $_SERVER["REMOTE_ADDR"]; /* Current User's IP Address for tracking purposes. */
|
150 |
/**/
|
151 |
-
$
|
152 |
-
$success_return_url = apply_filters ("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
|
153 |
/**/
|
154 |
$attr["desc"] = (!$attr["desc"]) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $attr["level"] . "_label"] : $attr["desc"];
|
155 |
/**/
|
156 |
$attr["level_ccaps_eotper"] = ($attr["rr"] === "BN" && $attr["rt"] !== "L") ? $attr["level"] . ":" . $attr["ccaps"] . ":" . $attr["rp"] . " " . $attr["rt"] : $attr["level"] . ":" . $attr["ccaps"];
|
157 |
$attr["level_ccaps_eotper"] = rtrim ($attr["level_ccaps_eotper"], ":"); /* Clean any trailing separators from this string. */
|
158 |
/**/
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
$code = trim (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-checkout-button.html"));
|
160 |
$code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images")), $code);
|
161 |
$code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ())), $code);
|
@@ -166,7 +175,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
166 |
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (home_url ("/"))), $code); /* This brings them back to Front Page. */
|
167 |
$code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ("/?s2member_paypal_notify=1"))), $code);
|
168 |
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($success_return_url)), $code);
|
169 |
-
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($
|
170 |
$code = preg_replace ("/%%level%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["level"])), $code);
|
171 |
/**/
|
172 |
$code = preg_replace ('/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/', " $1", $code);
|
@@ -184,6 +193,8 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
184 |
$code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["cc"])) . '"', $code);
|
185 |
$code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["custom"])) . '"', $code);
|
186 |
/**/
|
|
|
|
|
187 |
$code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on0_input_value)) . '"', $code);
|
188 |
$code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_os0_input_value)) . '"', $code);
|
189 |
$code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on1_input_value)) . '"', $code);
|
@@ -209,7 +220,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
|
209 |
$code = ($attr["output"] === "anchor") ? '<a href="' . esc_attr (c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code)) . '"><img src="' . esc_attr (($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image) . '" style="width:auto; height:auto; border:0;" alt="PayPal®" /></a>' : $code;
|
210 |
$code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code;
|
211 |
/**/
|
212 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
213 |
($attr["modify"]) ? do_action ("ws_plugin__s2member_during_sc_paypal_modification_button", get_defined_vars ())/**/
|
214 |
: do_action ("ws_plugin__s2member_during_sc_paypal_button", get_defined_vars ()); /* Else, we process normally. */
|
215 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
|
21 |
{
|
42 |
*/
|
43 |
public static function sc_paypal_button ($attr = FALSE, $content = FALSE, $shortcode = FALSE)
|
44 |
{
|
45 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
46 |
do_action ("ws_plugin__s2member_before_sc_paypal_button", get_defined_vars ());
|
47 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
48 |
/**/
|
63 |
$attr["rr"] = ($attr["rt"] === "L") ? "BN" : $attr["rr"]; /* Lifetime Subscriptions require Buy Now. Only after running shortcode_atts(). */
|
64 |
$attr["ns"] = ($attr["dg"] === "1") ? "1" : $attr["ns"]; /* No shipping directive must be 1 for digital items. After shortcode_atts(). */
|
65 |
/**/
|
66 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
67 |
do_action ("ws_plugin__s2member_before_sc_paypal_button_after_shortcode_atts", get_defined_vars ());
|
68 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
69 |
/**/
|
83 |
$code = ($attr["output"] === "anchor") ? $code : $code; /* Cancellation Buttons are already in anchor format; Button format is not used in Cancellations. */
|
84 |
$code = ($attr["output"] === "url") ? "https://" . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com") . "/cgi-bin/webscr?cmd=_subscr-find&alias=" . urlencode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"]) : $code;
|
85 |
/**/
|
86 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
87 |
do_action ("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ());
|
88 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
89 |
}
|
98 |
$paypal_on1_input_value = "Customer IP Address"; /* Identifies the Customer's IP Address for tracking purposes. */
|
99 |
$paypal_os1_input_value = $_SERVER["REMOTE_ADDR"]; /* Current User's IP Address for tracking purposes. */
|
100 |
/**/
|
101 |
+
$paypal_invoice_input_value = uniqid () . "~" . $_SERVER["REMOTE_ADDR"]; /* s2Member's Unique Code~IP combo. */
|
|
|
102 |
/**/
|
103 |
$attr["sp_ids_exp"] = "sp:" . $attr["ids"] . ":" . $attr["exp"]; /* Combined "sp:ids:expiration hours". */
|
104 |
/**/
|
105 |
+
$success_return_url = site_url ("/?s2member_paypal_return=1"); /* s2Member handles this all by itself. However, it can be Filtered. */
|
106 |
+
$success_return_url = apply_filters ("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
|
107 |
+
/**/
|
108 |
$code = trim (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-sp-checkout-button.html"));
|
109 |
$code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images")), $code);
|
110 |
$code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ())), $code);
|
114 |
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (home_url ("/"))), $code);
|
115 |
$code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ("/?s2member_paypal_notify=1"))), $code);
|
116 |
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($success_return_url)), $code);
|
117 |
+
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["custom"])), $code);
|
118 |
/**/
|
119 |
$code = preg_replace ('/ name\="lc" value\="(.*?)"/', ' name="lc" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["lc"])) . '"', $code);
|
120 |
$code = preg_replace ('/ name\="no_shipping" value\="(.*?)"/', ' name="no_shipping" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["ns"])) . '"', $code);
|
124 |
$code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["cc"])) . '"', $code);
|
125 |
$code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["custom"])) . '"', $code);
|
126 |
/**/
|
127 |
+
$code = preg_replace ('/ name\="invoice" value\="(.*?)"/', ' name="invoice" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_invoice_input_value)) . '"', $code);
|
128 |
+
/**/
|
129 |
$code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on0_input_value)) . '"', $code);
|
130 |
$code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_os0_input_value)) . '"', $code);
|
131 |
$code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on1_input_value)) . '"', $code);
|
138 |
$code = ($attr["output"] === "anchor") ? '<a href="' . esc_attr (c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code)) . '"><img src="' . esc_attr (($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image) . '" style="width:auto; height:auto; border:0;" alt="PayPal®" /></a>' : $code;
|
139 |
$code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code;
|
140 |
/**/
|
141 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
142 |
do_action ("ws_plugin__s2member_during_sc_paypal_sp_button", get_defined_vars ());
|
143 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
144 |
}
|
152 |
$paypal_on1_input_value = "Customer IP Address"; /* Identifies the Customer's IP Address for tracking purposes. */
|
153 |
$paypal_os1_input_value = $_SERVER["REMOTE_ADDR"]; /* Current User's IP Address for tracking purposes. */
|
154 |
/**/
|
155 |
+
$paypal_invoice_input_value = uniqid () . "~" . $_SERVER["REMOTE_ADDR"]; /* s2Member's Unique Code~IP combo. */
|
|
|
156 |
/**/
|
157 |
$attr["desc"] = (!$attr["desc"]) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $attr["level"] . "_label"] : $attr["desc"];
|
158 |
/**/
|
159 |
$attr["level_ccaps_eotper"] = ($attr["rr"] === "BN" && $attr["rt"] !== "L") ? $attr["level"] . ":" . $attr["ccaps"] . ":" . $attr["rp"] . " " . $attr["rt"] : $attr["level"] . ":" . $attr["ccaps"];
|
160 |
$attr["level_ccaps_eotper"] = rtrim ($attr["level_ccaps_eotper"], ":"); /* Clean any trailing separators from this string. */
|
161 |
/**/
|
162 |
+
$success_return_tra = array ("ta" => $attr["ta"], "tp" => $attr["tp"], "tt" => $attr["tt"], "ra" => $attr["ra"], "rp" => $attr["rp"], "rt" => $attr["rt"], "rr" => $attr["rr"], "rrt" => $attr["rrt"], "rra" => $attr["rra"], "invoice" => $paypal_invoice_input_value, "checksum" => md5 ($paypal_invoice_input_value . $_SERVER["REMOTE_ADDR"] . $attr["level_ccaps_eotper"]));
|
163 |
+
/**/
|
164 |
+
$success_return_url = site_url ("/?s2member_paypal_return=1"); /* s2Member handles this all by itself. However, it can be Filtered ( see below ). */
|
165 |
+
$success_return_url = add_query_arg ("s2member_paypal_return_tra", urlencode (c_ws_plugin__s2member_utils_encryption::encrypt (serialize ($success_return_tra))), $success_return_url);
|
166 |
+
$success_return_url = apply_filters ("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
|
167 |
+
/**/
|
168 |
$code = trim (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-checkout-button.html"));
|
169 |
$code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/images")), $code);
|
170 |
$code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ())), $code);
|
175 |
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (home_url ("/"))), $code); /* This brings them back to Front Page. */
|
176 |
$code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr (site_url ("/?s2member_paypal_notify=1"))), $code);
|
177 |
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($success_return_url)), $code);
|
178 |
+
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["custom"])), $code);
|
179 |
$code = preg_replace ("/%%level%%/", c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["level"])), $code);
|
180 |
/**/
|
181 |
$code = preg_replace ('/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/', " $1", $code);
|
193 |
$code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["cc"])) . '"', $code);
|
194 |
$code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($attr["custom"])) . '"', $code);
|
195 |
/**/
|
196 |
+
$code = preg_replace ('/ name\="invoice" value\="(.*?)"/', ' name="invoice" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_invoice_input_value)) . '"', $code);
|
197 |
+
/**/
|
198 |
$code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on0_input_value)) . '"', $code);
|
199 |
$code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_os0_input_value)) . '"', $code);
|
200 |
$code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_ds (esc_attr ($paypal_on1_input_value)) . '"', $code);
|
220 |
$code = ($attr["output"] === "anchor") ? '<a href="' . esc_attr (c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code)) . '"><img src="' . esc_attr (($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image) . '" style="width:auto; height:auto; border:0;" alt="PayPal®" /></a>' : $code;
|
221 |
$code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code;
|
222 |
/**/
|
223 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
224 |
($attr["modify"]) ? do_action ("ws_plugin__s2member_during_sc_paypal_modification_button", get_defined_vars ())/**/
|
225 |
: do_action ("ws_plugin__s2member_during_sc_paypal_button", get_defined_vars ()); /* Else, we process normally. */
|
226 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
includes/classes/sp-access.inc.php
CHANGED
@@ -166,7 +166,7 @@ if (!class_exists ("c_ws_plugin__s2member_sp_access"))
|
|
166 |
$cookie = implode (":.:|:.:", $sp_access_values); /* Implode the access values into a delimited string. */
|
167 |
$cookie = (strlen ($cookie) >= 4096) ? $add_sp_access_value : $cookie; /* Max cookie size is 4kbs. */
|
168 |
/**/
|
169 |
-
setcookie ("s2member_sp_access", $cookie, time () + 31556926, "/");
|
170 |
/**/
|
171 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
172 |
do_action ("ws_plugin__s2member_during_sp_access_session", get_defined_vars ());
|
166 |
$cookie = implode (":.:|:.:", $sp_access_values); /* Implode the access values into a delimited string. */
|
167 |
$cookie = (strlen ($cookie) >= 4096) ? $add_sp_access_value : $cookie; /* Max cookie size is 4kbs. */
|
168 |
/**/
|
169 |
+
setcookie ("s2member_sp_access", $cookie, time () + 31556926, "/") . ($_COOKIE["s2member_sp_access"] = $cookie);
|
170 |
/**/
|
171 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
172 |
do_action ("ws_plugin__s2member_during_sp_access_session", get_defined_vars ());
|
includes/classes/systematics-sp.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_systematics_sp"))
|
21 |
{
|
@@ -46,7 +46,7 @@ if (!class_exists ("c_ws_plugin__s2member_systematics_sp"))
|
|
46 |
{
|
47 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_specific_page", true, get_defined_vars ()));
|
48 |
}
|
49 |
-
else if ($uri && (preg_match ("/\/(wp-app|wp-signup|wp-register|wp-activate|wp-login|xmlrpc)\.php/", $uri) || (
|
50 |
{
|
51 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_specific_page", true, get_defined_vars ()));
|
52 |
}
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_systematics_sp"))
|
21 |
{
|
46 |
{
|
47 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_specific_page", true, get_defined_vars ()));
|
48 |
}
|
49 |
+
else if ($uri && (preg_match ("/\/(wp-app|wp-signup|wp-register|wp-activate|wp-login|xmlrpc)\.php/", $uri) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && preg_match ("/\/(" . preg_quote (BP_REGISTER_SLUG, "/") . "|" . preg_quote (BP_ACTIVATION_SLUG, "/") . ")/", $uri))))
|
50 |
{
|
51 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_specific_page", true, get_defined_vars ()));
|
52 |
}
|
includes/classes/systematics.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_systematics"))
|
21 |
{
|
@@ -51,11 +51,11 @@ if (!class_exists ("c_ws_plugin__s2member_systematics"))
|
|
51 |
{
|
52 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_page", true, get_defined_vars ()));
|
53 |
}
|
54 |
-
else if ($_SERVER["REMOTE_ADDR"] === $_SERVER["SERVER_ADDR"] && stripos ($_SERVER["HTTP_HOST"], "localhost") === false && (!defined ("LOCALHOST") || !LOCALHOST))
|
55 |
{
|
56 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_page", true, get_defined_vars ()));
|
57 |
}
|
58 |
-
else if (preg_match ("/\/(wp-app|wp-signup|wp-register|wp-activate|wp-login|xmlrpc)\.php/", $_SERVER["REQUEST_URI"]) || (
|
59 |
{
|
60 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_page", true, get_defined_vars ()));
|
61 |
}
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_systematics"))
|
21 |
{
|
51 |
{
|
52 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_page", true, get_defined_vars ()));
|
53 |
}
|
54 |
+
else if ($_SERVER["REMOTE_ADDR"] === $_SERVER["SERVER_ADDR"] && stripos ($_SERVER["HTTP_HOST"], "localhost") === false && strpos ($_SERVER["HTTP_HOST"], "127.0.0.1") !== 0 && (!defined ("LOCALHOST") || !LOCALHOST))
|
55 |
{
|
56 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_page", true, get_defined_vars ()));
|
57 |
}
|
58 |
+
else if (preg_match ("/\/(wp-app|wp-signup|wp-register|wp-activate|wp-login|xmlrpc)\.php/", $_SERVER["REQUEST_URI"]) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && (bp_is_register_page () || bp_is_activation_page ())))
|
59 |
{
|
60 |
return ($is_systematic = apply_filters ("ws_plugin__s2member_is_systematic_use_page", true, get_defined_vars ()));
|
61 |
}
|
includes/classes/tracking-codes.inc.php
CHANGED
@@ -44,6 +44,7 @@ if (!class_exists ("c_ws_plugin__s2member_tracking_codes"))
|
|
44 |
*
|
45 |
* @attaches-to: ``add_action("login_footer");``
|
46 |
* @attaches-to: ``add_action("wp_footer");``
|
|
|
47 |
*
|
48 |
* @return null After displaying possible Tracking Code(s).
|
49 |
*/
|
@@ -89,7 +90,9 @@ if (!class_exists ("c_ws_plugin__s2member_tracking_codes"))
|
|
89 |
* @package s2Member\Tracking
|
90 |
* @since 3.5
|
91 |
*
|
|
|
92 |
* @attaches-to: ``add_action("wp_footer");``
|
|
|
93 |
*
|
94 |
* @return null After displaying possible Tracking Code(s).
|
95 |
*/
|
@@ -124,6 +127,25 @@ if (!class_exists ("c_ws_plugin__s2member_tracking_codes"))
|
|
124 |
/**/
|
125 |
return; /* Return for uniformity. */
|
126 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
}
|
129 |
?>
|
44 |
*
|
45 |
* @attaches-to: ``add_action("login_footer");``
|
46 |
* @attaches-to: ``add_action("wp_footer");``
|
47 |
+
* @also-called-by: {@link s2Member\Tracking\c_ws_plugin__s2member_tracking_codes::generate_all_tracking_codes()}
|
48 |
*
|
49 |
* @return null After displaying possible Tracking Code(s).
|
50 |
*/
|
90 |
* @package s2Member\Tracking
|
91 |
* @since 3.5
|
92 |
*
|
93 |
+
* @attaches-to: ``add_action("login_footer");``
|
94 |
* @attaches-to: ``add_action("wp_footer");``
|
95 |
+
* @also-called-by: {@link s2Member\Tracking\c_ws_plugin__s2member_tracking_codes::generate_all_tracking_codes()}
|
96 |
*
|
97 |
* @return null After displaying possible Tracking Code(s).
|
98 |
*/
|
127 |
/**/
|
128 |
return; /* Return for uniformity. */
|
129 |
}
|
130 |
+
/**
|
131 |
+
* Generates/returns all Tracking Codes integrated with s2Member.
|
132 |
+
*
|
133 |
+
* This method may be used in areas where s2Member needs to build tracking codes in a more dynamic way.
|
134 |
+
*
|
135 |
+
* @package s2Member\Tracking
|
136 |
+
* @since 110720
|
137 |
+
*
|
138 |
+
* @return str HTML output for all Tracking Codes integrated with s2Member.
|
139 |
+
*/
|
140 |
+
public static function generate_all_tracking_codes ()
|
141 |
+
{
|
142 |
+
ob_start (); /* Begin output buffering so we can "return". */
|
143 |
+
/**/
|
144 |
+
c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes ();
|
145 |
+
c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes ();
|
146 |
+
/**/
|
147 |
+
return apply_filters ("ws_plugin__s2member_generate_all_tracking_codes", ob_get_clean (), get_defined_vars ());
|
148 |
+
}
|
149 |
}
|
150 |
}
|
151 |
?>
|
includes/classes/user-deletions.inc.php
CHANGED
@@ -121,6 +121,7 @@ if (!class_exists ("c_ws_plugin__s2member_user_deletions"))
|
|
121 |
delete_user_option ($user_id, "s2member_last_payment_time");
|
122 |
delete_user_option ($user_id, "s2member_last_status_scan");
|
123 |
delete_user_option ($user_id, "s2member_auto_eot_time");
|
|
|
124 |
delete_user_option ($user_id, "s2member_notes");
|
125 |
/**/
|
126 |
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
121 |
delete_user_option ($user_id, "s2member_last_payment_time");
|
122 |
delete_user_option ($user_id, "s2member_last_status_scan");
|
123 |
delete_user_option ($user_id, "s2member_auto_eot_time");
|
124 |
+
delete_user_option ($user_id, "s2member_login_counter");
|
125 |
delete_user_option ($user_id, "s2member_notes");
|
126 |
/**/
|
127 |
delete_user_option ($user_id, "s2member_file_download_access_arc");
|
includes/classes/user-new-in.inc.php
CHANGED
@@ -96,7 +96,7 @@ if (!class_exists ("c_ws_plugin__s2member_user_new_in"))
|
|
96 |
/**/
|
97 |
$unfs .= '<tr>' . "\n";
|
98 |
$unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID ( or a Buy Now Transaction ID ) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank® Receipt #, a Google® TID/SID ( with an s2 prefix ), an AliPay® Trade No. ). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid® Subscr. ID, can be a PayPal® Standard `Subscription ID`, or a PayPal® Pro `Recurring Profile ID`, or a PayPal® `Transaction ID`; depending on the type of sale. Your PayPal® account will supply this information. If you\\\'re using Google® Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank® provides a Receipt #, ccBill® provides a Subscription ID, Authorize.Net® provides a Subscription ID, and AliPay® provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
|
99 |
-
$unfs .= '<td><select name="ws_plugin__s2member_user_new_s2member_subscr_gateway" id="ws-plugin--s2member-user-new-s2member-subscr-gateway" style="width:
|
100 |
foreach (apply_filters ("ws_plugin__s2member_profile_s2member_subscr_gateways", array ("paypal" => "PayPal® ( code: paypal )"), get_defined_vars ()) as $gateway => $gateway_name)
|
101 |
$unfs .= '<option value="' . esc_attr ($gateway) . '"' . (($gateway === $_p["ws_plugin__s2member_user_new_s2member_subscr_gateway"]) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
|
102 |
$unfs .= '</select>' . "\n";
|
96 |
/**/
|
97 |
$unfs .= '<tr>' . "\n";
|
98 |
$unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID ( or a Buy Now Transaction ID ) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank® Receipt #, a Google® TID/SID ( with an s2 prefix ), an AliPay® Trade No. ). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid® Subscr. ID, can be a PayPal® Standard `Subscription ID`, or a PayPal® Pro `Recurring Profile ID`, or a PayPal® `Transaction ID`; depending on the type of sale. Your PayPal® account will supply this information. If you\\\'re using Google® Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank® provides a Receipt #, ccBill® provides a Subscription ID, Authorize.Net® provides a Subscription ID, and AliPay® provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
|
99 |
+
$unfs .= '<td><select name="ws_plugin__s2member_user_new_s2member_subscr_gateway" id="ws-plugin--s2member-user-new-s2member-subscr-gateway" style="width:25em;"><option value=""></option>' . "\n";
|
100 |
foreach (apply_filters ("ws_plugin__s2member_profile_s2member_subscr_gateways", array ("paypal" => "PayPal® ( code: paypal )"), get_defined_vars ()) as $gateway => $gateway_name)
|
101 |
$unfs .= '<option value="' . esc_attr ($gateway) . '"' . (($gateway === $_p["ws_plugin__s2member_user_new_s2member_subscr_gateway"]) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
|
102 |
$unfs .= '</select>' . "\n";
|
includes/classes/users-list-in.inc.php
CHANGED
@@ -89,7 +89,7 @@ if (!class_exists ("c_ws_plugin__s2member_users_list_in"))
|
|
89 |
/**/
|
90 |
echo '<tr>' . "\n";
|
91 |
echo '<th><label for="ws-plugin--s2member-profile-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID ( or a Buy Now Transaction ID ) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank® Receipt #, a Google® TID/SID ( with an s2 prefix ), an AliPay® Trade No. ). This will be filled automatically by s2Member.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid® Subscr. ID, can be a PayPal® Standard `Subscription ID`, or a PayPal® Pro `Recurring Profile ID`, or a PayPal® `Transaction ID`; depending on the type of sale. Your PayPal® account will supply this information. If you\\\'re using Google® Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank® provides a Receipt #, ccBill® provides a Subscription ID, Authorize.Net® provides a Subscription ID, and AliPay® provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
|
92 |
-
echo '<td><select name="ws_plugin__s2member_profile_s2member_subscr_gateway" id="ws-plugin--s2member-profile-s2member-subscr-gateway" style="width:
|
93 |
foreach (apply_filters ("ws_plugin__s2member_profile_s2member_subscr_gateways", array ("paypal" => "PayPal® ( code: paypal )"), get_defined_vars ()) as $gateway => $gateway_name)
|
94 |
echo '<option value="' . esc_attr ($gateway) . '"' . (($gateway === get_user_option ("s2member_subscr_gateway", $user_id)) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
|
95 |
echo '</select>' . "\n";
|
89 |
/**/
|
90 |
echo '<tr>' . "\n";
|
91 |
echo '<th><label for="ws-plugin--s2member-profile-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID ( or a Buy Now Transaction ID ) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank® Receipt #, a Google® TID/SID ( with an s2 prefix ), an AliPay® Trade No. ). This will be filled automatically by s2Member.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid® Subscr. ID, can be a PayPal® Standard `Subscription ID`, or a PayPal® Pro `Recurring Profile ID`, or a PayPal® `Transaction ID`; depending on the type of sale. Your PayPal® account will supply this information. If you\\\'re using Google® Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank® provides a Receipt #, ccBill® provides a Subscription ID, Authorize.Net® provides a Subscription ID, and AliPay® provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
|
92 |
+
echo '<td><select name="ws_plugin__s2member_profile_s2member_subscr_gateway" id="ws-plugin--s2member-profile-s2member-subscr-gateway" style="width:25em;"><option value=""></option>' . "\n";
|
93 |
foreach (apply_filters ("ws_plugin__s2member_profile_s2member_subscr_gateways", array ("paypal" => "PayPal® ( code: paypal )"), get_defined_vars ()) as $gateway => $gateway_name)
|
94 |
echo '<option value="' . esc_attr ($gateway) . '"' . (($gateway === get_user_option ("s2member_subscr_gateway", $user_id)) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
|
95 |
echo '</select>' . "\n";
|
includes/classes/users-list.inc.php
CHANGED
@@ -92,7 +92,7 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
92 |
$query->query_where .= " OR `user_login` LIKE '" . $s . "' OR `user_nicename` LIKE '" . $s . "' OR `user_email` LIKE '" . $s . "' OR `user_url` LIKE '" . $s . "' OR `display_name` LIKE '" . $s . "'";
|
93 |
$query->query_where .= apply_filters ("ws_plugin__s2member_before_users_list_search_where_or_after", "", get_defined_vars ()) . ")"; /* Leaving room for additional searches here. */
|
94 |
$query->query_where .= " AND `" . $wpdb->users . "`.`ID` IN(SELECT DISTINCT(`user_id`) FROM `" . $wpdb->usermeta . "` WHERE `meta_key` = '" . $wpdb->prefix . "capabilities'" ./**/
|
95 |
-
(
|
96 |
/**/
|
97 |
$query->query_from = apply_filters ("ws_plugin__s2member_before_users_list_search_from", $query->query_from, get_defined_vars ());
|
98 |
$query->query_where = apply_filters ("ws_plugin__s2member_before_users_list_search_where", $query->query_where, get_defined_vars ());
|
@@ -121,16 +121,15 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
121 |
do_action ("ws_plugin__s2member_before_users_list_cols", get_defined_vars ());
|
122 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
123 |
/**/
|
124 |
-
$cols["s2member_registration_time"] = "Registration Date";
|
125 |
/**/
|
126 |
if (apply_filters ("ws_plugin__s2member_users_list_cols_display_paid_registration_times", false))
|
127 |
-
$cols["s2member_paid_registration_times"] = "Paid Registr. Date";
|
128 |
/**/
|
129 |
-
$cols["s2member_subscr_id"] = "Paid Subscr. ID";
|
130 |
/**/
|
131 |
if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
|
132 |
-
|
133 |
-
$cols["s2member_ccaps"] = "Custom Capabilities"; /* Custom Capabilities. */
|
134 |
/**/
|
135 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
136 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
@@ -142,6 +141,8 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
142 |
$cols["s2member_custom_field_" . $field_var] = $field_title;
|
143 |
}
|
144 |
/**/
|
|
|
|
|
145 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
146 |
do_action ("ws_plugin__s2member_during_users_list_cols", get_defined_vars ());
|
147 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
@@ -173,7 +174,7 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
173 |
$user = (is_object ($user) && $user_id === $last_user_id) ? $user : new WP_User ($user_id);
|
174 |
/**/
|
175 |
if ($col === "s2member_registration_time")
|
176 |
-
$val = (
|
177 |
/**/
|
178 |
else if ($col === "s2member_paid_registration_times")
|
179 |
{
|
@@ -221,9 +222,12 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
221 |
$last_fields_id = $user_id; /* Record this. */
|
222 |
}
|
223 |
/**/
|
|
|
|
|
|
|
224 |
$last_user_id = $user_id; /* Record this for internal optimizations. */
|
225 |
/**/
|
226 |
-
return apply_filters ("ws_plugin__s2member_users_list_display_cols", (
|
227 |
}
|
228 |
}
|
229 |
}
|
92 |
$query->query_where .= " OR `user_login` LIKE '" . $s . "' OR `user_nicename` LIKE '" . $s . "' OR `user_email` LIKE '" . $s . "' OR `user_url` LIKE '" . $s . "' OR `display_name` LIKE '" . $s . "'";
|
93 |
$query->query_where .= apply_filters ("ws_plugin__s2member_before_users_list_search_where_or_after", "", get_defined_vars ()) . ")"; /* Leaving room for additional searches here. */
|
94 |
$query->query_where .= " AND `" . $wpdb->users . "`.`ID` IN(SELECT DISTINCT(`user_id`) FROM `" . $wpdb->usermeta . "` WHERE `meta_key` = '" . $wpdb->prefix . "capabilities'" ./**/
|
95 |
+
(($qv["role"]) ? " AND `meta_value` LIKE '%" . esc_sql (like_escape ($qv["role"])) . "%'" : "") . ")";
|
96 |
/**/
|
97 |
$query->query_from = apply_filters ("ws_plugin__s2member_before_users_list_search_from", $query->query_from, get_defined_vars ());
|
98 |
$query->query_where = apply_filters ("ws_plugin__s2member_before_users_list_search_where", $query->query_where, get_defined_vars ());
|
121 |
do_action ("ws_plugin__s2member_before_users_list_cols", get_defined_vars ());
|
122 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
123 |
/**/
|
124 |
+
$cols["s2member_registration_time"] = "Registration Date";
|
125 |
/**/
|
126 |
if (apply_filters ("ws_plugin__s2member_users_list_cols_display_paid_registration_times", false))
|
127 |
+
$cols["s2member_paid_registration_times"] = "Paid Registr. Date";
|
128 |
/**/
|
129 |
+
$cols["s2member_subscr_id"] = "Paid Subscr. ID";
|
130 |
/**/
|
131 |
if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
|
132 |
+
$cols["s2member_ccaps"] = "Custom Capabilities";
|
|
|
133 |
/**/
|
134 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
135 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
141 |
$cols["s2member_custom_field_" . $field_var] = $field_title;
|
142 |
}
|
143 |
/**/
|
144 |
+
$cols["s2member_login_counter"] = "# Of Logins";
|
145 |
+
/**/
|
146 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
147 |
do_action ("ws_plugin__s2member_during_users_list_cols", get_defined_vars ());
|
148 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
174 |
$user = (is_object ($user) && $user_id === $last_user_id) ? $user : new WP_User ($user_id);
|
175 |
/**/
|
176 |
if ($col === "s2member_registration_time")
|
177 |
+
$val = (($time = strtotime (get_date_from_gmt ($user->user_registered)))) ? esc_html (date ("D M jS, Y", $time)) . '<br /><small>@ precisely ' . esc_html (date ("g:i a", $time)) . '</small>' : "—";
|
178 |
/**/
|
179 |
else if ($col === "s2member_paid_registration_times")
|
180 |
{
|
222 |
$last_fields_id = $user_id; /* Record this. */
|
223 |
}
|
224 |
/**/
|
225 |
+
else if ($col === "s2member_login_counter")
|
226 |
+
$val = ($v = get_user_option ("s2member_login_counter", $user_id)) ? esc_html ($v) : "—";
|
227 |
+
/**/
|
228 |
$last_user_id = $user_id; /* Record this for internal optimizations. */
|
229 |
/**/
|
230 |
+
return apply_filters ("ws_plugin__s2member_users_list_display_cols", ((strlen ($val)) ? $val : "—"), get_defined_vars ());
|
231 |
}
|
232 |
}
|
233 |
}
|
includes/classes/utilities.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_utilities"))
|
21 |
{
|
@@ -40,7 +40,7 @@ if (!class_exists ("c_ws_plugin__s2member_utilities"))
|
|
40 |
{
|
41 |
ob_start (); /* Output buffer. */
|
42 |
/**/
|
43 |
-
eval
|
44 |
/**/
|
45 |
return ob_get_clean ();
|
46 |
}
|
@@ -93,7 +93,7 @@ if (!class_exists ("c_ws_plugin__s2member_utilities"))
|
|
93 |
public static function ver_checksum ()
|
94 |
{
|
95 |
$checksum = WS_PLUGIN__S2MEMBER_VERSION; /* Software version string. */
|
96 |
-
$checksum .= (
|
97 |
$checksum .= "-" . abs (crc32 ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["checksum"] . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["options_checksum"] . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["options_version"]));
|
98 |
/**/
|
99 |
return $checksum; /* ( i.e. version-pro version-checksum ) */
|
@@ -109,7 +109,7 @@ if (!class_exists ("c_ws_plugin__s2member_utilities"))
|
|
109 |
public static function ver_details ()
|
110 |
{
|
111 |
$details = "WordPress® v" . get_bloginfo ("version") . " :: s2Member® v" . WS_PLUGIN__S2MEMBER_VERSION;
|
112 |
-
$details .= (
|
113 |
/**/
|
114 |
return $details; /* Return all details. */
|
115 |
}
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_utilities"))
|
21 |
{
|
40 |
{
|
41 |
ob_start (); /* Output buffer. */
|
42 |
/**/
|
43 |
+
eval("?>" . trim ($code));
|
44 |
/**/
|
45 |
return ob_get_clean ();
|
46 |
}
|
93 |
public static function ver_checksum ()
|
94 |
{
|
95 |
$checksum = WS_PLUGIN__S2MEMBER_VERSION; /* Software version string. */
|
96 |
+
$checksum .= (c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? "-" . WS_PLUGIN__S2MEMBER_PRO_VERSION : ""; /* Pro version string? */
|
97 |
$checksum .= "-" . abs (crc32 ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["checksum"] . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["options_checksum"] . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["options_version"]));
|
98 |
/**/
|
99 |
return $checksum; /* ( i.e. version-pro version-checksum ) */
|
109 |
public static function ver_details ()
|
110 |
{
|
111 |
$details = "WordPress® v" . get_bloginfo ("version") . " :: s2Member® v" . WS_PLUGIN__S2MEMBER_VERSION;
|
112 |
+
$details .= (c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? " :: s2Member® Pro v" . WS_PLUGIN__S2MEMBER_PRO_VERSION : "";
|
113 |
/**/
|
114 |
return $details; /* Return all details. */
|
115 |
}
|
includes/classes/utils-arrays.inc.php
CHANGED
@@ -124,6 +124,36 @@ if (!class_exists ("c_ws_plugin__s2member_utils_arrays"))
|
|
124 |
else /* False. */
|
125 |
return false;
|
126 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
}
|
129 |
?>
|
124 |
else /* False. */
|
125 |
return false;
|
126 |
}
|
127 |
+
/**
|
128 |
+
* Removes all null-value array keys from an array *( or even a multi-dimensional array )*.
|
129 |
+
*
|
130 |
+
* @package s2Member\Utilities
|
131 |
+
* @since 110720
|
132 |
+
*
|
133 |
+
* @param array $array An input array.
|
134 |
+
* @return array|mixed The output array, or whatever was passed in.
|
135 |
+
*/
|
136 |
+
public static function remove_null_keys ($array = FALSE)
|
137 |
+
{
|
138 |
+
if (is_array ($array) && !empty ($array))
|
139 |
+
{
|
140 |
+
foreach ($array as $key => $value)
|
141 |
+
{
|
142 |
+
if (is_array ($value)) /* Recursive function call. */
|
143 |
+
{
|
144 |
+
$array[$key] = c_ws_plugin__s2member_utils_arrays::remove_null_keys ($value);
|
145 |
+
}
|
146 |
+
else if (is_null ($value)) /* Is it null? */
|
147 |
+
{
|
148 |
+
unset($array[$key]);
|
149 |
+
}
|
150 |
+
}
|
151 |
+
/**/
|
152 |
+
return $array;
|
153 |
+
}
|
154 |
+
else /* Return same. */
|
155 |
+
return $array;
|
156 |
+
}
|
157 |
}
|
158 |
}
|
159 |
?>
|
includes/classes/utils-conds.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_utils_conds"))
|
21 |
{
|
@@ -28,6 +28,30 @@ if (!class_exists ("c_ws_plugin__s2member_utils_conds"))
|
|
28 |
class c_ws_plugin__s2member_utils_conds
|
29 |
{
|
30 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
* Determines whether or not this is a Multisite Farm;
|
32 |
* *( i.e. if ``MULTISITE_FARM == true`` inside `/wp-config.php` )*.
|
33 |
*
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_utils_conds"))
|
21 |
{
|
28 |
class c_ws_plugin__s2member_utils_conds
|
29 |
{
|
30 |
/**
|
31 |
+
* Determines whether or not BuddyPress is installed.
|
32 |
+
*
|
33 |
+
* @package s2Member\Utilities
|
34 |
+
* @since 110720
|
35 |
+
*
|
36 |
+
* @return bool True if BuddyPress is installed, else false.
|
37 |
+
*/
|
38 |
+
public static function bp_is_installed ()
|
39 |
+
{
|
40 |
+
return defined ("BP_VERSION");
|
41 |
+
}
|
42 |
+
/**
|
43 |
+
* Determines whether or not s2Member Pro is installed.
|
44 |
+
*
|
45 |
+
* @package s2Member\Utilities
|
46 |
+
* @since 110720
|
47 |
+
*
|
48 |
+
* @return bool True if s2Member Pro is installed, else false.
|
49 |
+
*/
|
50 |
+
public static function pro_is_installed ()
|
51 |
+
{
|
52 |
+
return defined ("WS_PLUGIN__S2MEMBER_PRO_VERSION");
|
53 |
+
}
|
54 |
+
/**
|
55 |
* Determines whether or not this is a Multisite Farm;
|
56 |
* *( i.e. if ``MULTISITE_FARM == true`` inside `/wp-config.php` )*.
|
57 |
*
|
includes/classes/utils-html.inc.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
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.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\Utilities
|
15 |
+
* @since 110720
|
16 |
+
*/
|
17 |
+
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
+
/**/
|
20 |
+
if (!class_exists ("c_ws_plugin__s2member_utils_html"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* HTML utilities.
|
24 |
+
*
|
25 |
+
* @package s2Member\Utilities
|
26 |
+
* @since 110720
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_utils_html
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* Returns a DOCTYPE tag along with the HEAD section and title tag.
|
32 |
+
*
|
33 |
+
* This method should NOT be called upon until
|
34 |
+
* {@link s2Member\API_Constants\c_ws_plugin__s2member_constants::constants()}
|
35 |
+
* has been processed. We need access to: ``WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5``.
|
36 |
+
*
|
37 |
+
* @package s2Member\Utilities
|
38 |
+
* @since 110720
|
39 |
+
*
|
40 |
+
* @param str $doctype_html_head_title Optional. The title of the HTML document being generated.
|
41 |
+
* @param str $doctype_html_head_action Optional. An action Hook to process during HEAD generation.
|
42 |
+
* @return str A DOCTYPE tag along with the HEAD section and title tag, configured by parameters.
|
43 |
+
*/
|
44 |
+
public static function doctype_html_head ($doctype_html_head_title = FALSE, $doctype_html_head_action = FALSE)
|
45 |
+
{
|
46 |
+
ob_start (); /* Start output buffering here so we can "return" the output from this utility. */
|
47 |
+
/**/
|
48 |
+
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . "\n";
|
49 |
+
/**/
|
50 |
+
echo '<html xmlns="http://www.w3.org/1999/xhtml">' . "\n";
|
51 |
+
echo '<head>' . "\n";
|
52 |
+
/**/
|
53 |
+
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . "\n";
|
54 |
+
/**/
|
55 |
+
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/jquery/jquery.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
56 |
+
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/l10n.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
57 |
+
echo '<script type="text/javascript">var pwsL10n = {empty: "Strength indicator", short: "Very weak", bad: "Weak", good: "Medium", strong: "Strong", mismatch: "Mismatch"}; try{convertEntities(pwsL10n);}catch(e){};</script>' . "\n";
|
58 |
+
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-admin/js/password-strength-meter.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
59 |
+
echo '<script type="text/javascript" src="' . esc_attr (site_url ("/?ws_plugin__s2member_js_w_globals=" . urlencode (WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5) . "&qcABC=1&ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
|
60 |
+
echo '<link href="' . esc_attr (site_url ("/?ws_plugin__s2member_css=1&qcABC=1&ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '" type="text/css" rel="stylesheet" media="all" />' . "\n";
|
61 |
+
/**/
|
62 |
+
if ($doctype_html_head_title) /* Add <title></title> tag? */
|
63 |
+
echo '<title>' . $doctype_html_head_title . '</title>' . "\n";
|
64 |
+
/**/
|
65 |
+
if ($doctype_html_head_action) /* Add content from Hook? */
|
66 |
+
do_action ($doctype_html_head_action, get_defined_vars ());
|
67 |
+
/**/
|
68 |
+
echo '</head>' . "\n";
|
69 |
+
/**/
|
70 |
+
return ob_get_clean ();
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
74 |
+
?>
|
includes/classes/utils-users.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
21 |
{
|
@@ -44,8 +44,8 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
44 |
/**/
|
45 |
$users = (int)mysql_result ($q2, 0);
|
46 |
/**/
|
47 |
-
mysql_free_result($q2);
|
48 |
-
mysql_free_result($q1);
|
49 |
/**/
|
50 |
return $users;
|
51 |
}
|
@@ -74,7 +74,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
74 |
}
|
75 |
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
|
76 |
{
|
77 |
-
if ($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1"))
|
78 |
if (($custom = get_user_option ("s2member_custom", $q->user_id)))
|
79 |
return $custom;
|
80 |
}
|
@@ -105,7 +105,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
105 |
}
|
106 |
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
|
107 |
{
|
108 |
-
if ($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1"))
|
109 |
return $q->user_id;
|
110 |
}
|
111 |
/**/
|
@@ -136,7 +136,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
136 |
}
|
137 |
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
|
138 |
{
|
139 |
-
if ($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1"))
|
140 |
if (is_object ($user = new WP_User ($q->user_id)) && $user->ID && ($email = $user->user_email))
|
141 |
return $email;
|
142 |
}
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
21 |
{
|
44 |
/**/
|
45 |
$users = (int)mysql_result ($q2, 0);
|
46 |
/**/
|
47 |
+
mysql_free_result ($q2);
|
48 |
+
mysql_free_result ($q1);
|
49 |
/**/
|
50 |
return $users;
|
51 |
}
|
74 |
}
|
75 |
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
|
76 |
{
|
77 |
+
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1")))
|
78 |
if (($custom = get_user_option ("s2member_custom", $q->user_id)))
|
79 |
return $custom;
|
80 |
}
|
105 |
}
|
106 |
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
|
107 |
{
|
108 |
+
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1")))
|
109 |
return $q->user_id;
|
110 |
}
|
111 |
/**/
|
136 |
}
|
137 |
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
|
138 |
{
|
139 |
+
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1")))
|
140 |
if (is_object ($user = new WP_User ($q->user_id)) && $user->ID && ($email = $user->user_email))
|
141 |
return $email;
|
142 |
}
|
includes/functions/api-functions.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**
|
20 |
* Conditional to determine if the current User is NOT logged in.
|
21 |
*
|
@@ -2013,6 +2013,7 @@ if (!function_exists ("s2member_paid_registration_time"))
|
|
2013 |
* $s2member_access_level = get_user_field ("s2member_access_level"); # An s2Member Membership Access Level number.
|
2014 |
* $s2member_access_label = get_user_field ("s2member_access_label"); # An s2Member Membership Access Label ( i.e. Bronze, Gold, Silver, Platinum, or whatever is configured ).
|
2015 |
* $s2member_access_ccaps = get_user_field ("s2member_access_ccaps"); # An array of Custom Capabilities the current User has ( i.e. music,videos ).
|
|
|
2016 |
* !>
|
2017 |
* ```
|
2018 |
* ———— Practical Shortcode Equivalents ————
|
@@ -2025,6 +2026,7 @@ if (!function_exists ("s2member_paid_registration_time"))
|
|
2025 |
* [s2Get user_field="s2member_access_role" /] # A WordPress® Role ID ( i.e. s2member_level[0-9]+, administrator, editor, author, contributor, subscriber ).
|
2026 |
* [s2Get user_field="s2member_access_level" /] # An s2Member Membership Access Level number.
|
2027 |
* [s2Get user_field="s2member_access_label" /] # An s2Member Membership Access Label ( i.e. Bronze, Gold, Silver, Platinum, or whatever is configured ).
|
|
|
2028 |
* ```
|
2029 |
* ———— Pulling Data From Your Own Custom Fields ————
|
2030 |
* ```
|
@@ -2088,6 +2090,7 @@ if (!function_exists ("s2member_paid_registration_time"))
|
|
2088 |
* $s2member_auto_eot_time = get_user_option ("s2member_auto_eot_time"); # Auto EOT-Time for the current User ( when applicable ).
|
2089 |
* $s2member_last_payment_time = get_user_option ("s2member_last_payment_time"); # Timestamp. Last time an actual payment was received by s2Member.
|
2090 |
* $s2member_paid_registration_times = get_user_option ("s2member_paid_registration_times"); # Timestamps. Associative array of all Paid Registration Times.
|
|
|
2091 |
* !>
|
2092 |
* ```
|
2093 |
* ———— Practical Shortcode Equivalents ————
|
@@ -2096,6 +2099,7 @@ if (!function_exists ("s2member_paid_registration_time"))
|
|
2096 |
* [s2Get user_option="s2member_subscr_id" /] # Paid Subscr. ID for the current User.
|
2097 |
* [s2Get user_option="s2member_subscr_gateway" /] # Paid Subscr. Gateway Code for the current User.
|
2098 |
* [s2Get user_option="s2member_registration_ip" /] # IP the current User had during registration.
|
|
|
2099 |
* ```
|
2100 |
*
|
2101 |
* @package s2Member\API_Functions
|
@@ -2108,7 +2112,7 @@ if (!function_exists ("s2member_paid_registration_time"))
|
|
2108 |
* `s2member_subscr_gateway`, `s2member_custom_fields`, `s2member_file_download_access_log`,
|
2109 |
* `s2member_auto_eot_time`, `s2member_last_payment_time`, `s2member_paid_registration_times`,
|
2110 |
* `s2member_access_role`, `s2member_access_level`, `s2member_access_label`,
|
2111 |
-
* `s2member_access_ccaps`, etc, etc. ).
|
2112 |
* @param int $user_id Optional. Defaults to the current User's ID.
|
2113 |
* @return mixed The value of the requested field, or false if the field does not exist.
|
2114 |
*
|
@@ -2126,4 +2130,36 @@ if (!function_exists ("get_user_field"))
|
|
2126 |
return c_ws_plugin__s2member_utils_users::get_user_field ($field_id, $user_id);
|
2127 |
}
|
2128 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2129 |
?>
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**
|
20 |
* Conditional to determine if the current User is NOT logged in.
|
21 |
*
|
2013 |
* $s2member_access_level = get_user_field ("s2member_access_level"); # An s2Member Membership Access Level number.
|
2014 |
* $s2member_access_label = get_user_field ("s2member_access_label"); # An s2Member Membership Access Label ( i.e. Bronze, Gold, Silver, Platinum, or whatever is configured ).
|
2015 |
* $s2member_access_ccaps = get_user_field ("s2member_access_ccaps"); # An array of Custom Capabilities the current User has ( i.e. music,videos ).
|
2016 |
+
* $s2member_login_counter = get_user_field ("s2member_login_counter"); # Number of times the User has logged into your site.
|
2017 |
* !>
|
2018 |
* ```
|
2019 |
* ———— Practical Shortcode Equivalents ————
|
2026 |
* [s2Get user_field="s2member_access_role" /] # A WordPress® Role ID ( i.e. s2member_level[0-9]+, administrator, editor, author, contributor, subscriber ).
|
2027 |
* [s2Get user_field="s2member_access_level" /] # An s2Member Membership Access Level number.
|
2028 |
* [s2Get user_field="s2member_access_label" /] # An s2Member Membership Access Label ( i.e. Bronze, Gold, Silver, Platinum, or whatever is configured ).
|
2029 |
+
* [s2Get user_field="s2member_login_counter" /] # Number of times the User has logged into your site.
|
2030 |
* ```
|
2031 |
* ———— Pulling Data From Your Own Custom Fields ————
|
2032 |
* ```
|
2090 |
* $s2member_auto_eot_time = get_user_option ("s2member_auto_eot_time"); # Auto EOT-Time for the current User ( when applicable ).
|
2091 |
* $s2member_last_payment_time = get_user_option ("s2member_last_payment_time"); # Timestamp. Last time an actual payment was received by s2Member.
|
2092 |
* $s2member_paid_registration_times = get_user_option ("s2member_paid_registration_times"); # Timestamps. Associative array of all Paid Registration Times.
|
2093 |
+
* $s2member_login_counter = get_user_option ("s2member_login_counter"); # Number of times the User has logged into your site.
|
2094 |
* !>
|
2095 |
* ```
|
2096 |
* ———— Practical Shortcode Equivalents ————
|
2099 |
* [s2Get user_option="s2member_subscr_id" /] # Paid Subscr. ID for the current User.
|
2100 |
* [s2Get user_option="s2member_subscr_gateway" /] # Paid Subscr. Gateway Code for the current User.
|
2101 |
* [s2Get user_option="s2member_registration_ip" /] # IP the current User had during registration.
|
2102 |
+
* [s2Get user_option="s2member_login_counter" /] # Number of times the User has logged in.
|
2103 |
* ```
|
2104 |
*
|
2105 |
* @package s2Member\API_Functions
|
2112 |
* `s2member_subscr_gateway`, `s2member_custom_fields`, `s2member_file_download_access_log`,
|
2113 |
* `s2member_auto_eot_time`, `s2member_last_payment_time`, `s2member_paid_registration_times`,
|
2114 |
* `s2member_access_role`, `s2member_access_level`, `s2member_access_label`,
|
2115 |
+
* `s2member_access_ccaps`, `s2member_login_counter`, etc, etc. ).
|
2116 |
* @param int $user_id Optional. Defaults to the current User's ID.
|
2117 |
* @return mixed The value of the requested field, or false if the field does not exist.
|
2118 |
*
|
2130 |
return c_ws_plugin__s2member_utils_users::get_user_field ($field_id, $user_id);
|
2131 |
}
|
2132 |
}
|
2133 |
+
/**
|
2134 |
+
* Can be used to auto-fill the `invoice` for PayPal® Button Codes, with a unique Code~IP combination.
|
2135 |
+
*
|
2136 |
+
* ———— PHP Code Sample ————
|
2137 |
+
* ```
|
2138 |
+
* <!php echo S2MEMBER_VALUE_FOR_PP_INV(); !>
|
2139 |
+
* ```
|
2140 |
+
* ———— Shortcode & JavaScript Equivalents ————
|
2141 |
+
* ```
|
2142 |
+
* [s2Get constant="S2MEMBER_VALUE_FOR_PP_INV" /]
|
2143 |
+
*
|
2144 |
+
* <script type="text/javascript">
|
2145 |
+
* document.write(S2MEMBER_VALUE_FOR_PP_INV_GEN());
|
2146 |
+
* </script>
|
2147 |
+
* ```
|
2148 |
+
*
|
2149 |
+
* @package s2Member\API_Functions
|
2150 |
+
* @since 110720
|
2151 |
+
*
|
2152 |
+
* @return str A unique Invoice.
|
2153 |
+
*
|
2154 |
+
* @see s2Member\API_Constants\S2MEMBER_VALUE_FOR_PP_INV
|
2155 |
+
*
|
2156 |
+
* @todo Create a true Shortcode equivalent function.
|
2157 |
+
*/
|
2158 |
+
if (!function_exists ("S2MEMBER_VALUE_FOR_PP_INV"))
|
2159 |
+
{
|
2160 |
+
function S2MEMBER_VALUE_FOR_PP_INV ()
|
2161 |
+
{
|
2162 |
+
return uniqid () . "~" . $_SERVER["REMOTE_ADDR"];
|
2163 |
+
}
|
2164 |
+
}
|
2165 |
?>
|
includes/hooks.inc.php
CHANGED
@@ -29,7 +29,6 @@ add_action ("init", "c_ws_plugin__s2member_user_securities::initialize", 1);
|
|
29 |
add_action ("init", "c_ws_plugin__s2member_no_cache::no_cache", 1);
|
30 |
/**/
|
31 |
add_action ("init", "c_ws_plugin__s2member_register::register", 1);
|
32 |
-
add_action ("init", "c_ws_plugin__s2member_paypal_return::paypal_return", 1);
|
33 |
add_action ("init", "c_ws_plugin__s2member_paypal_notify::paypal_notify", 1);
|
34 |
add_action ("init", "c_ws_plugin__s2member_files::check_file_download_access", 1);
|
35 |
add_action ("init", "c_ws_plugin__s2member_profile_mods::handle_profile_modifications", 1);
|
@@ -44,10 +43,12 @@ add_action ("init", "c_ws_plugin__s2member_admin_css_js::menu_pages_css", 1);
|
|
44 |
add_action ("init", "c_ws_plugin__s2member_admin_css_js::menu_pages_js", 1);
|
45 |
/**/
|
46 |
add_action ("init", "c_ws_plugin__s2member_css_js::css", 1);
|
|
|
47 |
add_action ("init", "c_ws_plugin__s2member_constants::constants", 1);
|
48 |
-
add_action ("init", "c_ws_plugin__s2member_css_js::js_w_globals", 1);
|
49 |
/**/
|
|
|
50 |
add_action ("init", "c_ws_plugin__s2member_profile::profile", 1);
|
|
|
51 |
/**/
|
52 |
add_action ("init", "c_ws_plugin__s2member_labels::config_label_translations");
|
53 |
add_action ("init", "c_ws_plugin__s2member_login_redirects_r::remove_login_redirect_filters", 11);
|
@@ -107,7 +108,10 @@ add_action ("login_footer", "c_ws_plugin__s2member_login_customizations::login_f
|
|
107 |
/**/
|
108 |
add_action ("login_footer", "c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes");
|
109 |
add_action ("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes");
|
|
|
|
|
110 |
add_action ("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes");
|
|
|
111 |
add_action ("wp_footer", "c_ws_plugin__s2member_wp_footer::wp_footer_code");
|
112 |
/**/
|
113 |
add_action ("admin_init", "c_ws_plugin__s2member_admin_lockouts::admin_lockout", 1);
|
29 |
add_action ("init", "c_ws_plugin__s2member_no_cache::no_cache", 1);
|
30 |
/**/
|
31 |
add_action ("init", "c_ws_plugin__s2member_register::register", 1);
|
|
|
32 |
add_action ("init", "c_ws_plugin__s2member_paypal_notify::paypal_notify", 1);
|
33 |
add_action ("init", "c_ws_plugin__s2member_files::check_file_download_access", 1);
|
34 |
add_action ("init", "c_ws_plugin__s2member_profile_mods::handle_profile_modifications", 1);
|
43 |
add_action ("init", "c_ws_plugin__s2member_admin_css_js::menu_pages_js", 1);
|
44 |
/**/
|
45 |
add_action ("init", "c_ws_plugin__s2member_css_js::css", 1);
|
46 |
+
/**/
|
47 |
add_action ("init", "c_ws_plugin__s2member_constants::constants", 1);
|
|
|
48 |
/**/
|
49 |
+
add_action ("init", "c_ws_plugin__s2member_css_js::js_w_globals", 1);
|
50 |
add_action ("init", "c_ws_plugin__s2member_profile::profile", 1);
|
51 |
+
add_action ("init", "c_ws_plugin__s2member_paypal_return::paypal_return", 1);
|
52 |
/**/
|
53 |
add_action ("init", "c_ws_plugin__s2member_labels::config_label_translations");
|
54 |
add_action ("init", "c_ws_plugin__s2member_login_redirects_r::remove_login_redirect_filters", 11);
|
108 |
/**/
|
109 |
add_action ("login_footer", "c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes");
|
110 |
add_action ("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes");
|
111 |
+
/**/
|
112 |
+
add_action ("login_footer", "c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes");
|
113 |
add_action ("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes");
|
114 |
+
/**/
|
115 |
add_action ("wp_footer", "c_ws_plugin__s2member_wp_footer::wp_footer_code");
|
116 |
/**/
|
117 |
add_action ("admin_init", "c_ws_plugin__s2member_admin_lockouts::admin_lockout", 1);
|
includes/menu-pages/code-samples/current-user-login-counter.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php echo S2MEMBER_CURRENT_USER_LOGIN_COUNTER; ?>
|
2 |
+
This may output something like: 47
|
3 |
+
( the number of times the User has logged into your site )
|
4 |
+
|
5 |
+
---- s2member Shortcode Equivalent ----
|
6 |
+
|
7 |
+
[s2Get constant="S2MEMBER_CURRENT_USER_LOGIN_COUNTER" /].
|
includes/menu-pages/down-ops.inc.php
CHANGED
@@ -221,7 +221,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
221 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-remote-authorization-section">' . "\n";
|
222 |
echo '<h3>Remote Header Authorization ( optional )</h3>' . "\n";
|
223 |
echo '<p>This can be enabled on a case-by-case basis. Just add this to the end of your download links: <code>&s2member_file_remote=yes</code>.</p>' . "\n";
|
224 |
-
echo '<p>Remote Header Authorization allows access to file downloads through an entirely different approach. Instead of asking the Member to log into your site through a browser, a Member will be prompted automatically, to log in through HTTP Header Authorization prompts; which is the same technique used in more traditional security systems via .htaccess files. In other words, Remote Header Authorization makes it possible for your Members to access files through remote applications that may NOT use a browser. This is often the case when a Member needs to access protected files through a software client like iTunes®; typical with podcasts
|
225 |
do_action ("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_remote_authorization", get_defined_vars ());
|
226 |
echo '</div>' . "\n";
|
227 |
/**/
|
221 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-remote-authorization-section">' . "\n";
|
222 |
echo '<h3>Remote Header Authorization ( optional )</h3>' . "\n";
|
223 |
echo '<p>This can be enabled on a case-by-case basis. Just add this to the end of your download links: <code>&s2member_file_remote=yes</code>.</p>' . "\n";
|
224 |
+
echo '<p>Remote Header Authorization allows access to file downloads through an entirely different approach. Instead of asking the Member to log into your site through a browser, a Member will be prompted automatically, to log in through HTTP Header Authorization prompts; which is the same technique used in more traditional security systems via .htaccess files. In other words, Remote Header Authorization makes it possible for your Members to access files through remote applications that may NOT use a browser. This is often the case when a Member needs to access protected files through a software client like iTunes®; typical with podcasts. See <a href="http://www.primothemes.com/forums/viewtopic.php?f=4&t=837&p=28558#p28558" target="_blank" rel="external">tutorial here</a> for details about how to setup a Podcast for iTunes®.</p>' . "\n";
|
225 |
do_action ("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_remote_authorization", get_defined_vars ());
|
226 |
echo '</div>' . "\n";
|
227 |
/**/
|
includes/menu-pages/els-ops.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_menu_page_els_ops"))
|
21 |
{
|
@@ -164,7 +164,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_els_ops"))
|
|
164 |
/**/
|
165 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-opt-in-section">' . "\n";
|
166 |
echo '<h3>Double Opt-In Checkbox Field ( optional )</h3>' . "\n";
|
167 |
-
echo '<p>A Double Opt-In Checkbox will ONLY be displayed, if you\'ve integrated one <em>or more</em> List Servers
|
168 |
do_action ("ws_plugin__s2member_during_els_ops_page_during_left_sections_during_opt_in", get_defined_vars ());
|
169 |
/**/
|
170 |
echo '<table class="form-table">' . "\n";
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_menu_page_els_ops"))
|
21 |
{
|
164 |
/**/
|
165 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-opt-in-section">' . "\n";
|
166 |
echo '<h3>Double Opt-In Checkbox Field ( optional )</h3>' . "\n";
|
167 |
+
echo '<p>A Double Opt-In Checkbox will ONLY be displayed, if you\'ve integrated one <em>or more</em> List Servers.</p>' . "\n";
|
168 |
do_action ("ws_plugin__s2member_during_els_ops_page_during_left_sections_during_opt_in", get_defined_vars ());
|
169 |
/**/
|
170 |
echo '<table class="form-table">' . "\n";
|
includes/menu-pages/gen-ops.inc.php
CHANGED
@@ -238,6 +238,24 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
238 |
echo '</td>' . "\n";
|
239 |
/**/
|
240 |
echo '</tr>' . "\n";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
echo '</tbody>' . "\n";
|
242 |
echo '</table>' . "\n";
|
243 |
/**/
|
@@ -924,7 +942,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
924 |
echo '<p>Custom Fields will appear in your Standard Registration Form:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
|
925 |
echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>A Multisite Blog Farm uses this Form instead. It supports Custom Fields too.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
|
926 |
/**/
|
927 |
-
if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()
|
928 |
echo '<p><em>* For security purposes, Custom Passwords are NOT possible on the Main Site of a Blog Farm. A User MUST wait for the activation/confirmation email; where a randomly generated Password will be assigned. Please note... this limitation only affects your Main Site, via <code>/wp-signup.php</code>. In other words, your Customers ( i.e. other Blog Owners ) will still have the ability to allow Custom Passwords with s2Member. YOU are affected by this limitation, NOT them. * NOTE: s2Member (Pro) removes this limitation. If you install the s2Member Pro Module, you WILL be able to allow Custom Passwords through s2Member Pro Forms; even on a Multisite Blog Farm.</em></p>' . "\n";
|
929 |
/**/
|
930 |
do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_custom_reg_fields", get_defined_vars ());
|
@@ -965,7 +983,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
965 |
echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"]) ? ' selected="selected"' : '') . '>No ( do NOT collect First/Last Names during registration )</option>' . "\n";
|
966 |
echo '</select><br />' . "\n";
|
967 |
echo 'Recommended setting ( <code>Yes</code> ). It\'s usually a good idea to leave this on.' . "\n";
|
968 |
-
echo (
|
969 |
echo '</td>' . "\n";
|
970 |
/**/
|
971 |
echo '</tr>' . "\n";
|
@@ -1003,7 +1021,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
1003 |
echo '<tr>' . "\n";
|
1004 |
/**/
|
1005 |
echo '<td>' . "\n";
|
1006 |
-
echo '<select name="ws_plugin__s2member_custom_reg_password" id="ws-plugin--s2member-custom-reg-password"' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site () && !
|
1007 |
echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>No ( send auto-generated passwords via email; after registration )</option>' . "\n";
|
1008 |
echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>Yes ( allow members to create their own password during registration )</option>' . "\n";
|
1009 |
echo '</select><br />' . "\n";
|
@@ -1043,11 +1061,11 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
1043 |
/**/
|
1044 |
echo '<td>' . "\n";
|
1045 |
echo '<div class="ws-menu-page-scrollbox" style="height:65px;">' . "\n";
|
1046 |
-
echo '<input type="hidden" name="ws_plugin__s2member_custom_reg_fields_4bp[]" value="update-signal"' . ((!
|
1047 |
foreach (array ("profile-view" => "Yes, integrate with BuddyPress Public Profiles.", "registration" => "Yes, integrate with BuddyPress Registration Form.", "profile" => "Yes, integrate with BuddyPress Profile Editing Panel.") as $ws_plugin__s2member_temp_s_value => $ws_plugin__s2member_temp_s_label)
|
1048 |
-
echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_fields_4bp[]" id="ws-plugin--s2member-custom-reg-fields-4bp-' . esc_attr (preg_replace ("/[^a-z0-9_\-]/", "-", $ws_plugin__s2member_temp_s_value)) . '" value="' . esc_attr ($ws_plugin__s2member_temp_s_value) . '"' . ((in_array ($ws_plugin__s2member_temp_s_value, $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"])) ? ' checked="checked"' : '') . ((!
|
1049 |
echo '</div>' . "\n";
|
1050 |
-
echo (!
|
1051 |
echo 'Also, see below: <code>Member Profile Modifications</code>.' . "\n";
|
1052 |
echo '</td>' . "\n";
|
1053 |
/**/
|
@@ -1093,7 +1111,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
1093 |
echo '<option value="' . esc_attr ($ws_plugin__s2member_temp_o->ID) . '"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"] && $ws_plugin__s2member_temp_o->ID == $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"]) ? ' selected="selected"' : '') . '>' . esc_html ($ws_plugin__s2member_temp_o->post_title) . '</option>' . "\n";
|
1094 |
echo '</select><br />' . "\n";
|
1095 |
echo 'Please choose a Page to be used as the first page Members will see after logging in. This Page can contain anything you like. We recommend the following title: <code>Welcome To Our Members Area</code>.<br /><br />' . "\n";
|
1096 |
-
echo '↓ Or, you may configure a Special Redirection URL, if you prefer. You\'ll need to type in the full URL, starting with: <code>http://</code>. <em>A few <a href="#" onclick="alert(\'Replacement Codes:\\n\\n%%current_user_login%% = The current User\\\'s
|
1097 |
echo '<input type="text" name="ws_plugin__s2member_login_redirection_override" id="ws-plugin--s2member-login-redirection-override" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"]) . '" /><br />' . "\n";
|
1098 |
echo '</td>' . "\n";
|
1099 |
/**/
|
238 |
echo '</td>' . "\n";
|
239 |
/**/
|
240 |
echo '</tr>' . "\n";
|
241 |
+
echo '<tr>' . "\n";
|
242 |
+
/**/
|
243 |
+
echo '<th>' . "\n";
|
244 |
+
echo '<label for="ws-plugin--s2member-reg-email-support-link">' . "\n";
|
245 |
+
echo 'Email Support/Contact Link:' . "\n";
|
246 |
+
echo '</label>' . "\n";
|
247 |
+
echo '</th>' . "\n";
|
248 |
+
/**/
|
249 |
+
echo '</tr>' . "\n";
|
250 |
+
echo '<tr>' . "\n";
|
251 |
+
/**/
|
252 |
+
echo '<td>' . "\n";
|
253 |
+
echo '<input type="text" name="ws_plugin__s2member_reg_email_support_link" id="ws-plugin--s2member-reg-email-support-link" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_support_link"]) . '" /><br />' . "\n";
|
254 |
+
echo 'Ex: <code>mailto:support@your-domain.com</code> ( <em>mailto link</em> ).<br />' . "\n";
|
255 |
+
echo 'Or: <code>' . esc_html (site_url ("/contact-us/")) . '</code>.' . "\n";
|
256 |
+
echo '</td>' . "\n";
|
257 |
+
/**/
|
258 |
+
echo '</tr>' . "\n";
|
259 |
echo '</tbody>' . "\n";
|
260 |
echo '</table>' . "\n";
|
261 |
/**/
|
942 |
echo '<p>Custom Fields will appear in your Standard Registration Form:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
|
943 |
echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>A Multisite Blog Farm uses this Form instead. It supports Custom Fields too.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
|
944 |
/**/
|
945 |
+
if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ())
|
946 |
echo '<p><em>* For security purposes, Custom Passwords are NOT possible on the Main Site of a Blog Farm. A User MUST wait for the activation/confirmation email; where a randomly generated Password will be assigned. Please note... this limitation only affects your Main Site, via <code>/wp-signup.php</code>. In other words, your Customers ( i.e. other Blog Owners ) will still have the ability to allow Custom Passwords with s2Member. YOU are affected by this limitation, NOT them. * NOTE: s2Member (Pro) removes this limitation. If you install the s2Member Pro Module, you WILL be able to allow Custom Passwords through s2Member Pro Forms; even on a Multisite Blog Farm.</em></p>' . "\n";
|
947 |
/**/
|
948 |
do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_custom_reg_fields", get_defined_vars ());
|
983 |
echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"]) ? ' selected="selected"' : '') . '>No ( do NOT collect First/Last Names during registration )</option>' . "\n";
|
984 |
echo '</select><br />' . "\n";
|
985 |
echo 'Recommended setting ( <code>Yes</code> ). It\'s usually a good idea to leave this on.' . "\n";
|
986 |
+
echo (c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? '<br /><em>* s2Member Pro (Checkout) Forms always require a First/Last Name.</em>' . "\n" : '';
|
987 |
echo '</td>' . "\n";
|
988 |
/**/
|
989 |
echo '</tr>' . "\n";
|
1021 |
echo '<tr>' . "\n";
|
1022 |
/**/
|
1023 |
echo '<td>' . "\n";
|
1024 |
+
echo '<select name="ws_plugin__s2member_custom_reg_password" id="ws-plugin--s2member-custom-reg-password"' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site () && !c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? ' disabled="disabled"' : '') . '>' . "\n";
|
1025 |
echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>No ( send auto-generated passwords via email; after registration )</option>' . "\n";
|
1026 |
echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>Yes ( allow members to create their own password during registration )</option>' . "\n";
|
1027 |
echo '</select><br />' . "\n";
|
1061 |
/**/
|
1062 |
echo '<td>' . "\n";
|
1063 |
echo '<div class="ws-menu-page-scrollbox" style="height:65px;">' . "\n";
|
1064 |
+
echo '<input type="hidden" name="ws_plugin__s2member_custom_reg_fields_4bp[]" value="update-signal"' . ((!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? ' disabled="disabled"' : '') . ' />' . "\n";
|
1065 |
foreach (array ("profile-view" => "Yes, integrate with BuddyPress Public Profiles.", "registration" => "Yes, integrate with BuddyPress Registration Form.", "profile" => "Yes, integrate with BuddyPress Profile Editing Panel.") as $ws_plugin__s2member_temp_s_value => $ws_plugin__s2member_temp_s_label)
|
1066 |
+
echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_fields_4bp[]" id="ws-plugin--s2member-custom-reg-fields-4bp-' . esc_attr (preg_replace ("/[^a-z0-9_\-]/", "-", $ws_plugin__s2member_temp_s_value)) . '" value="' . esc_attr ($ws_plugin__s2member_temp_s_value) . '"' . ((in_array ($ws_plugin__s2member_temp_s_value, $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"])) ? ' checked="checked"' : '') . ((!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? ' disabled="disabled"' : '') . ' /> <label for="ws-plugin--s2member-custom-reg-fields-4bp-' . esc_attr (preg_replace ("/[^a-z0-9_\-]/", "-", $ws_plugin__s2member_temp_s_value)) . '">' . $ws_plugin__s2member_temp_s_label . '</label><br />' . "\n";
|
1067 |
echo '</div>' . "\n";
|
1068 |
+
echo (!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? 'BuddyPress is NOT installed; which is perfectly OK. BuddyPress is NOT a requirement.<br />' . "\n" : '';
|
1069 |
echo 'Also, see below: <code>Member Profile Modifications</code>.' . "\n";
|
1070 |
echo '</td>' . "\n";
|
1071 |
/**/
|
1111 |
echo '<option value="' . esc_attr ($ws_plugin__s2member_temp_o->ID) . '"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"] && $ws_plugin__s2member_temp_o->ID == $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"]) ? ' selected="selected"' : '') . '>' . esc_html ($ws_plugin__s2member_temp_o->post_title) . '</option>' . "\n";
|
1112 |
echo '</select><br />' . "\n";
|
1113 |
echo 'Please choose a Page to be used as the first page Members will see after logging in. This Page can contain anything you like. We recommend the following title: <code>Welcome To Our Members Area</code>.<br /><br />' . "\n";
|
1114 |
+
echo '↓ Or, you may configure a Special Redirection URL, if you prefer. You\'ll need to type in the full URL, starting with: <code>http://</code>. <em>A few <a href="#" onclick="alert(\'Replacement Codes:\\n\\n%%current_user_login%% = The current User\\\'s Username, lowercase.\\n%%current_user_id%% = The current User\\\'s ID.\\n%%current_user_level%% = The current User\\\'s s2Member Level.\\n%%current_user_role%% = The current User\\\'s WordPress® Role.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '\\n%%current_user_ccaps%% = The current User\\\'s Custom Capabilities.' : '') . '\\n%%current_user_logins%% = Number of times the current User has logged in.\\n\\nFor example, if you\\\'re using BuddyPress, and you want to redirect Members to their BuddyPress Profile page after logging in, you would setup a Special Redirection URL, like this: ' . site_url ("/members/%%current_user_login%%/profile/") . '\\n\\nOr ... using %%current_user_level%%, you could have a separate Login Welcome Page for each Membership Level that you plan to offer. BuddyPress not required.\'); return false;">Replacement Codes</a> are also supported here.</em>' . "\n";
|
1115 |
echo '<input type="text" name="ws_plugin__s2member_login_redirection_override" id="ws-plugin--s2member-login-redirection-override" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"]) . '" /><br />' . "\n";
|
1116 |
echo '</td>' . "\n";
|
1117 |
/**/
|
includes/menu-pages/menu-pages-s-min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function($){var esc_attr=esc_html=function(str){return String(str).replace(/"/g,""").replace(/\</g,"<").replace(/\>/g,">")};if(location.href.match(/page\=ws-plugin--s2member/)){$("input.ws-plugin--s2member-update-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.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_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="0"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val("Update Roles/Capabilities")}else{if(response==="1"){alert("s2Member's Roles/Capabilities updated successfully."),$this.val("Update Roles/Capabilities")}}});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"){$("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")[(($("select#ws-plugin--s2member-mms-registration-grants").val()==="all")?"show":"hide")](),$("input#ws-plugin--s2member-mms-registration-blogs-level0").val((($("select#ws-plugin--s2member-mms-registration-grants").val()==="all")?"1":"0"))}else{if($(this).val()==="wp-login"){$("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(),$("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")})}else{if(location.href.match(/page\=ws-plugin--s2member-integrations/)){$("select#ws-plugin--s2member-bbpress-ovg").change(function(){if($(this).val()==="0"){$("span#ws-plugin--s2member-bbpress-ovg-off-note").css("display","inline");var l='form#ws-plugin--s2member-bridge-bbpress-form label[for="ws_plugin--s2member-bridge-bbpress-min-level"]';$(l).text($(l).text().replace(/to (read\/)?participate/i,"to read/participate")),$("select#ws-plugin--s2member-bbpress-min-level option").each(function(){$(this).text($(this).text().replace(/\( to( read and)? participate \)/i,"( to read and participate )"))})}else{if($(this).val()==="1"){$("span#ws-plugin--s2member-bbpress-ovg-off-note").css("display","none");var l='form#ws-plugin--s2member-bridge-bbpress-form label[for="ws_plugin--s2member-bridge-bbpress-min-level"]';$(l).text($(l).text().replace(/to (read\/)?participate/i,"to participate")),$("select#ws-plugin--s2member-bbpress-min-level option").each(function(){$(this).text($(this).text().replace(/\( to( read and)? participate \)/i,"( to participate )"))})}}}).trigger("change")}else{if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_generateSecurityKey=function(){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)}$("input#ws-plugin--s2member-sec-encryption-key").val(key);return false};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 some very unhappy Customers. Data corruption WILL occur!\n\nFor 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");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".');$(row).effect("highlight",1500)},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".');$(row).effect("highlight",1500)},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" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';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" value="'+esc_attr(field.sectitle)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';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"> </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" value="'+esc_attr(field.label)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" value="'+esc_attr(field.id)+'" maxlength="25" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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"> </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" rows="1" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt">'+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"> </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" rows="3" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">'+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"> </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 & 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 & Punctuation ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-spaces-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics, Spaces & Punctuation ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Spaces Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-'+i+'"'+((field.expected==="alphanumerics-spaces-"+i)?' selected="selected"':"")+'">Alphanumerics & Spaces ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected==="alphanumerics-spaces-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & Spaces ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-punctuation-'+i+'"'+((field.expected==="alphanumerics-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics & Punctuation ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & 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"> </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" value="'+esc_attr(field.levels)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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 & totally invisible 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"> </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" value="'+esc_attr(field.classes)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" value="'+esc_attr(field.styles)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" value="'+esc_attr(field.attrs)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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 Field":"New Custom Registration Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form"),$(window).trigger("resize");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var attachTBResizer=function(){$(window).resize(function(){var w,h;w=$(window).width(),h=$(window).height(),w=(w>720)?720:w;$("#TB_ajaxContent").css({width:w-50,height:h-75,margin:0,padding:0})})};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(),attachTBResizer(),buildTable()})()}}else{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_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_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})}else{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()}})}else{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")}else{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)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^\+/,""),plus=(this.value.match(/^\+/))?"+":"";if(value.match(/[^a-z_0-9,]/)){this.value=plus+$.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(/[ \-]/g,"_").replace(/[^A-Z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^\+/))?"+"+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&®Term!=="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){alert("— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00");return false}else{if(trialTerm==="D"&&trialPeriod>7){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 7.\nIf you want to offer more than 7 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>12){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 12.\nIf you want to offer more than 12 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>1){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 1.");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){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_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_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_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate."):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_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){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_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_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_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));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_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_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_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_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}}}}}}}}});
|
1 |
+
jQuery(document).ready(function($){var esc_attr=esc_html=function(str){return String(str).replace(/"/g,""").replace(/\</g,"<").replace(/\>/g,">")};if(location.href.match(/page\=ws-plugin--s2member/)){$("input.ws-plugin--s2member-update-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.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_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="0"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val("Update Roles/Capabilities")}else{if(response==="1"){alert("s2Member's Roles/Capabilities updated successfully."),$this.val("Update Roles/Capabilities")}}});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")})}else{if(location.href.match(/page\=ws-plugin--s2member-integrations/)){$("select#ws-plugin--s2member-bbpress-ovg").change(function(){if($(this).val()==="0"){$("span#ws-plugin--s2member-bbpress-ovg-off-note").css("display","inline");var l='form#ws-plugin--s2member-bridge-bbpress-form label[for="ws_plugin--s2member-bridge-bbpress-min-level"]';$(l).text($(l).text().replace(/to (read\/)?participate/i,"to read/participate")),$("select#ws-plugin--s2member-bbpress-min-level option").each(function(){$(this).text($(this).text().replace(/\( to( read and)? participate \)/i,"( to read and participate )"))})}else{if($(this).val()==="1"){$("span#ws-plugin--s2member-bbpress-ovg-off-note").css("display","none");var l='form#ws-plugin--s2member-bridge-bbpress-form label[for="ws_plugin--s2member-bridge-bbpress-min-level"]';$(l).text($(l).text().replace(/to (read\/)?participate/i,"to participate")),$("select#ws-plugin--s2member-bbpress-min-level option").each(function(){$(this).text($(this).text().replace(/\( to( read and)? participate \)/i,"( to participate )"))})}}}).trigger("change")}else{if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_generateSecurityKey=function(){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)}$("input#ws-plugin--s2member-sec-encryption-key").val(key);return false};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 some very unhappy Customers. Data corruption WILL occur!\n\nFor 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");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".');$(row).effect("highlight",1500)},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".');$(row).effect("highlight",1500)},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" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';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" value="'+esc_attr(field.sectitle)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';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"> </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" value="'+esc_attr(field.label)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" value="'+esc_attr(field.id)+'" maxlength="25" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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"> </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" rows="1" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt">'+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"> </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" rows="3" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">'+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"> </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 & 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 & Punctuation ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-spaces-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics, Spaces & Punctuation ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Spaces Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-'+i+'"'+((field.expected==="alphanumerics-spaces-"+i)?' selected="selected"':"")+'">Alphanumerics & Spaces ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected==="alphanumerics-spaces-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & Spaces ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-punctuation-'+i+'"'+((field.expected==="alphanumerics-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics & Punctuation ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & 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"> </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" value="'+esc_attr(field.levels)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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 & totally invisible 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"> </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" value="'+esc_attr(field.classes)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" value="'+esc_attr(field.styles)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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" value="'+esc_attr(field.attrs)+'" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-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"> </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 Field":"New Custom Registration Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form"),$(window).trigger("resize");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var attachTBResizer=function(){$(window).resize(function(){var w,h;w=$(window).width(),h=$(window).height(),w=(w>720)?720:w;$("#TB_ajaxContent").css({width:w-50,height:h-75,margin:0,padding:0})})};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(),attachTBResizer(),buildTable()})()}}else{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_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_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})}else{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()}})}else{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")}else{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)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^\+/,""),plus=(this.value.match(/^\+/))?"+":"";if(value.match(/[^a-z_0-9,]/)){this.value=plus+$.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(/[ \-]/g,"_").replace(/[^A-Z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^\+/))?"+"+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&®Term!=="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){alert("— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00");return false}else{if(trialTerm==="D"&&trialPeriod>7){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 7.\nIf you want to offer more than 7 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>12){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 12.\nIf you want to offer more than 12 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>1){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 1.");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){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_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_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_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 Format into your Login Welcome Page, or wherever you feel it would be most appropriate."):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_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){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_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_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_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 Format into your Membership Options Page.");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_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_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_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}}}}}}}}});
|
includes/menu-pages/menu-pages-s.js
CHANGED
@@ -48,12 +48,17 @@ jQuery(document).ready (function($)
|
|
48 |
{
|
49 |
if ($(this).val () === 'wp-signup') /* Expand/collapse relevant options; based on file selection. */
|
50 |
{
|
|
|
51 |
$('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 ();
|
52 |
-
$('div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0')[((
|
|
|
53 |
}
|
54 |
else if ($(this).val () === 'wp-login') /* Expand/collapse relevant options. */
|
55 |
{
|
56 |
-
|
|
|
|
|
|
|
57 |
}
|
58 |
/**/
|
59 |
}).trigger ('change'); /* Fire on ready too. */
|
@@ -1065,7 +1070,7 @@ jQuery(document).ready (function($)
|
|
1065 |
code.html (code.val ().replace (/ name\="p3" value\="(.*?)"/, ' name="p3" value="' + esc_attr(regPeriod) + '"'));
|
1066 |
code.html (code.val ().replace (/ name\="t3" value\="(.*?)"/, ' name="t3" value="' + esc_attr(regTerm) + '"'));
|
1067 |
/**/
|
1068 |
-
$('div#ws-plugin--s2member-' + button + '-button-prev').html (code.val ().replace (/\<form/, '<form target="_blank"').replace (/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g, ''));
|
1069 |
/**/
|
1070 |
(button === 'modification') ? alert('Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate.') : alert('Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.');
|
1071 |
/**/
|
@@ -1136,7 +1141,7 @@ jQuery(document).ready (function($)
|
|
1136 |
/**/
|
1137 |
code.html (code.val ().replace (/ name\="amount" value\="(.*?)"/, ' name="amount" value="' + esc_attr(regAmount) + '"'));
|
1138 |
/**/
|
1139 |
-
$('div#ws-plugin--s2member-sp-button-prev').html (code.val ().replace (/\<form/, '<form target="_blank"').replace (/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g, ''));
|
1140 |
/**/
|
1141 |
alert('Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.');
|
1142 |
/**/
|
48 |
{
|
49 |
if ($(this).val () === 'wp-signup') /* Expand/collapse relevant options; based on file selection. */
|
50 |
{
|
51 |
+
var gv = $('select#ws-plugin--s2member-mms-registration-grants').val (), l0v = $('input#ws-plugin--s2member-mms-registration-blogs-level0').val ();
|
52 |
$('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 ();
|
53 |
+
$('div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0')[((gv === 'all') ? 'show' : 'hide')] ();
|
54 |
+
$('input#ws-plugin--s2member-mms-registration-blogs-level0').val (((gv === 'all') ? ((l0v > 0) ? l0v : '1') : '0'));
|
55 |
}
|
56 |
else if ($(this).val () === 'wp-login') /* Expand/collapse relevant options. */
|
57 |
{
|
58 |
+
var gv = $('select#ws-plugin--s2member-mms-registration-grants').val (), l0v = $('input#ws-plugin--s2member-mms-registration-blogs-level0').val ();
|
59 |
+
$('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 ();
|
60 |
+
$('div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0').hide ();
|
61 |
+
$('input#ws-plugin--s2member-mms-registration-blogs-level0').val ('0');
|
62 |
}
|
63 |
/**/
|
64 |
}).trigger ('change'); /* Fire on ready too. */
|
1070 |
code.html (code.val ().replace (/ name\="p3" value\="(.*?)"/, ' name="p3" value="' + esc_attr(regPeriod) + '"'));
|
1071 |
code.html (code.val ().replace (/ name\="t3" value\="(.*?)"/, ' name="t3" value="' + esc_attr(regTerm) + '"'));
|
1072 |
/**/
|
1073 |
+
$('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_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace (/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g, ''));
|
1074 |
/**/
|
1075 |
(button === 'modification') ? alert('Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate.') : alert('Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.');
|
1076 |
/**/
|
1141 |
/**/
|
1142 |
code.html (code.val ().replace (/ name\="amount" value\="(.*?)"/, ' name="amount" value="' + esc_attr(regAmount) + '"'));
|
1143 |
/**/
|
1144 |
+
$('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_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace (/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g, ''));
|
1145 |
/**/
|
1146 |
alert('Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.');
|
1147 |
/**/
|
includes/menu-pages/paypal-ops.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_ops"))
|
21 |
{
|
@@ -252,7 +252,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_ops"))
|
|
252 |
echo '<h3>PayPal® PDT Identity Token ( required, please enable )</h3>' . "\n";
|
253 |
echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Website Payment Preferences</code></p>' . "\n";
|
254 |
echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>' . "\n";
|
255 |
-
echo '<p>You\'ll need your Auto-Return URL
|
256 |
echo '<p>You MUST also enable PDT ( Payment Data Transfer ): <strong><code>On</code></strong><br /><em>You\'ll be issued an Identity Token that you MUST enter below.</em></p>' . "\n";
|
257 |
do_action ("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt", get_defined_vars ());
|
258 |
/**/
|
@@ -285,6 +285,9 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_ops"))
|
|
285 |
echo '<p><em><strong>*Quick Tip*</strong> In addition to the <a href="https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_html_paymentdatatransfer" target="_blank" rel="external">default Auto-Return/PDT configuration inside your PayPal® account</a>, the Auto-Return URL is also set on a per-transaction basis from within the special PayPal® Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal® account, that\'s OK. s2Member dynamically sets the Auto-Return URL for each transaction. The result is that the Auto-Return URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per-transaction basis.</em></p>' . "\n";
|
286 |
do_action ("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt_after_quick_tip", get_defined_vars ());
|
287 |
echo '</div>' . "\n";
|
|
|
|
|
|
|
288 |
echo '</div>' . "\n";
|
289 |
/**/
|
290 |
echo '</div>' . "\n";
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_ops"))
|
21 |
{
|
252 |
echo '<h3>PayPal® PDT Identity Token ( required, please enable )</h3>' . "\n";
|
253 |
echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Website Payment Preferences</code></p>' . "\n";
|
254 |
echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>' . "\n";
|
255 |
+
echo '<p>You\'ll need your <a href="' . esc_attr (site_url ("/?s2member_paypal_return=1&s2member_paypal_proxy=paypal&s2member_paypal_proxy_use=x-preview")) . '" target="_blank" rel="external">Auto-Return URL</a>, which is:<br /><code>' . esc_html (site_url ("/?s2member_paypal_return=1")) . '</code></p>' . "\n";
|
256 |
echo '<p>You MUST also enable PDT ( Payment Data Transfer ): <strong><code>On</code></strong><br /><em>You\'ll be issued an Identity Token that you MUST enter below.</em></p>' . "\n";
|
257 |
do_action ("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt", get_defined_vars ());
|
258 |
/**/
|
285 |
echo '<p><em><strong>*Quick Tip*</strong> In addition to the <a href="https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_html_paymentdatatransfer" target="_blank" rel="external">default Auto-Return/PDT configuration inside your PayPal® account</a>, the Auto-Return URL is also set on a per-transaction basis from within the special PayPal® Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal® account, that\'s OK. s2Member dynamically sets the Auto-Return URL for each transaction. The result is that the Auto-Return URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per-transaction basis.</em></p>' . "\n";
|
286 |
do_action ("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt_after_quick_tip", get_defined_vars ());
|
287 |
echo '</div>' . "\n";
|
288 |
+
/**/
|
289 |
+
do_action ("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt_after_more_info", get_defined_vars ());
|
290 |
+
/**/
|
291 |
echo '</div>' . "\n";
|
292 |
/**/
|
293 |
echo '</div>' . "\n";
|
includes/menu-pages/res-ops.inc.php
CHANGED
@@ -237,7 +237,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_res_ops"))
|
|
237 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-uri-level-access-section">' . "\n";
|
238 |
echo '<h3>URI Level Access Restrictions ( optional )</h3>' . "\n";
|
239 |
echo '<p>Here you can specify URIs ( or word fragments found in URIs ) that are restricted to certain Membership Access Levels. Control over URIs is a little more complex. This section is intended for advanced webmasters only. That being said, here are the basics... A REQUEST_URI, is the portion of the URL that comes after the domain. This is a URL <code>http://www.example.com/path/to/file.php</code>, and this is the URI: <code>/path/to/file.php</code>.</p>' . "\n";
|
240 |
-
echo '<p>In the fields below, you can provide a list ( one per line ) of URIs on your site that should be off-limits based on Membership Level. You can also use word fragments instead of a full URI. If a word fragment is found anywhere in the URI, it will be protected. Wildcards and other regex patterns are not supported here, and therefore you don\'t need to escape special characters or anything. Please note, these ARE caSe sensitive. You must be specific with respect to case sensitivity. The word fragment <code>some-path/</code> would NOT match a URI that contains <code>some-Path/</code>. <em>A few <a href="#" onclick="alert(\'URI Replacement Codes:\\n\\n%%current_user_login%% = The current User\\\'s
|
241 |
echo '<p><em><strong>*BuddyPress ( and similar )*</strong> URI Restrictions work great with plugins like BuddyPress that add new areas to your site ( where those new areas are NOT necessarily a Post/Page/Tag/Category ). In other words, anytime you\'d like to protect a specific feature offered by BuddyPress ( or other plugins ), you\'ll need to nail down some word fragments found in the URIs associated with those areas. For instance, with BuddyPress you might have: [ <a href="#" onclick="alert(\'/members/\\n/groups/\\n/blogs/\\n/activity/\\n/messages/\\n/profile/\\n/friends/\\n/settings/\'); return false;">click for example</a> ].</em></p>' . "\n";
|
242 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_uri_level_access", get_defined_vars ());
|
243 |
/**/
|
237 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-uri-level-access-section">' . "\n";
|
238 |
echo '<h3>URI Level Access Restrictions ( optional )</h3>' . "\n";
|
239 |
echo '<p>Here you can specify URIs ( or word fragments found in URIs ) that are restricted to certain Membership Access Levels. Control over URIs is a little more complex. This section is intended for advanced webmasters only. That being said, here are the basics... A REQUEST_URI, is the portion of the URL that comes after the domain. This is a URL <code>http://www.example.com/path/to/file.php</code>, and this is the URI: <code>/path/to/file.php</code>.</p>' . "\n";
|
240 |
+
echo '<p>In the fields below, you can provide a list ( one per line ) of URIs on your site that should be off-limits based on Membership Level. You can also use word fragments instead of a full URI. If a word fragment is found anywhere in the URI, it will be protected. Wildcards and other regex patterns are not supported here, and therefore you don\'t need to escape special characters or anything. Please note, these ARE caSe sensitive. You must be specific with respect to case sensitivity. The word fragment <code>some-path/</code> would NOT match a URI that contains <code>some-Path/</code>. <em>A few <a href="#" onclick="alert(\'URI Replacement Codes:\\n\\n%%current_user_login%% = The current User\\\'s Username, lowercase.\\n%%current_user_id%% = The current User\\\'s ID.\\n%%current_user_level%% = The current User\\\'s s2Member Level.\\n%%current_user_role%% = The current User\\\'s WordPress® Role.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '\\n%%current_user_ccaps%% = The current User\\\'s Custom Capabilities.' : '') . '\\n%%current_user_logins%% = Number of times the current User has logged in.\\n\\nFor example, if you\\\'re using BuddyPress, and want to protect BuddyPress Groups, you could add URI protection, like this: /members/%%current_user_login%%/groups/\'); return false;">Replacement Codes</a> are also supported here.</em></p>' . "\n";
|
241 |
echo '<p><em><strong>*BuddyPress ( and similar )*</strong> URI Restrictions work great with plugins like BuddyPress that add new areas to your site ( where those new areas are NOT necessarily a Post/Page/Tag/Category ). In other words, anytime you\'d like to protect a specific feature offered by BuddyPress ( or other plugins ), you\'ll need to nail down some word fragments found in the URIs associated with those areas. For instance, with BuddyPress you might have: [ <a href="#" onclick="alert(\'/members/\\n/groups/\\n/blogs/\\n/activity/\\n/messages/\\n/profile/\\n/friends/\\n/settings/\'); return false;">click for example</a> ].</em></p>' . "\n";
|
242 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_uri_level_access", get_defined_vars ());
|
243 |
/**/
|
includes/menu-pages/scripting.inc.php
CHANGED
@@ -485,6 +485,10 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
485 |
/**/
|
486 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
487 |
/**/
|
|
|
|
|
|
|
|
|
488 |
echo '<p><strong>S2MEMBER_CURRENT_USER_IS_LOGGED_IN</strong><br />This will always be (bool) true or false. True if a User/Member is currently logged in with an Access Level >= 0.</p>' . "\n";
|
489 |
echo '<p><em>See: <code>S2MEMBER_CURRENT_USER_ACCESS_LEVEL</code> below for a full explanation.</em></p>' . "\n";
|
490 |
/**/
|
@@ -718,6 +722,11 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
718 |
/**/
|
719 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
720 |
/**/
|
|
|
|
|
|
|
|
|
|
|
721 |
echo '<p><strong>S2MEMBER_CURRENT_USER_IS_LOGGED_IN</strong><br />This will always be (bool) true or false. True if a User/Member is currently logged in with an Access Level >= 0.</p>' . "\n";
|
722 |
echo '<p>' . c_ws_plugin__s2member_utils_strings::highlight_php (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-is-logged-in.php")) . '</p>' . "\n";
|
723 |
echo '<p><em>See: <code>S2MEMBER_CURRENT_USER_ACCESS_LEVEL</code> below for a full explanation.</em></p>' . "\n";
|
485 |
/**/
|
486 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
487 |
/**/
|
488 |
+
echo '<p><strong>S2MEMBER_CURRENT_USER_LOGIN_COUNTER</strong><br />This will always be (int) <code>-1</code> or higher <em>( representing the number of times a User/Member has logged into your site )</em>. <code>-1</code> if no User is logged in. <code>0</code> if the current User has NEVER logged in.</p>' . "\n";
|
489 |
+
/**/
|
490 |
+
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
491 |
+
/**/
|
492 |
echo '<p><strong>S2MEMBER_CURRENT_USER_IS_LOGGED_IN</strong><br />This will always be (bool) true or false. True if a User/Member is currently logged in with an Access Level >= 0.</p>' . "\n";
|
493 |
echo '<p><em>See: <code>S2MEMBER_CURRENT_USER_ACCESS_LEVEL</code> below for a full explanation.</em></p>' . "\n";
|
494 |
/**/
|
722 |
/**/
|
723 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
724 |
/**/
|
725 |
+
echo '<p><strong>S2MEMBER_CURRENT_USER_LOGIN_COUNTER</strong><br />This will always be (int) <code>-1</code> or higher <em>( representing the number of times a User/Member has logged into your site )</em>. <code>-1</code> if no User is logged in. <code>0</code> if the current User has NEVER logged in.</p>' . "\n";
|
726 |
+
echo '<p>' . c_ws_plugin__s2member_utils_strings::highlight_php (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-login-counter.php")) . '</p>' . "\n";
|
727 |
+
/**/
|
728 |
+
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
729 |
+
/**/
|
730 |
echo '<p><strong>S2MEMBER_CURRENT_USER_IS_LOGGED_IN</strong><br />This will always be (bool) true or false. True if a User/Member is currently logged in with an Access Level >= 0.</p>' . "\n";
|
731 |
echo '<p>' . c_ws_plugin__s2member_utils_strings::highlight_php (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-is-logged-in.php")) . '</p>' . "\n";
|
732 |
echo '<p><em>See: <code>S2MEMBER_CURRENT_USER_ACCESS_LEVEL</code> below for a full explanation.</em></p>' . "\n";
|
includes/menu-pages/trk-ops.inc.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
-
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
|
21 |
{
|
@@ -53,7 +53,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
|
|
53 |
/**/
|
54 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-signup-tracking-section">' . "\n";
|
55 |
echo '<h3>Membership Signup Tracking Codes ( optional )</h3>' . "\n";
|
56 |
-
echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, after a Customer completes Signup through your Payment Gateway. Tracking Codes are only displayed/processed one time for each Customer. s2Member will display your Tracking Codes in one of
|
57 |
echo '<p>Signup Tracking Codes are displayed for all types of Membership Level Access. Including: Recurring Subscriptions ( with or without a Free Trial Period ), Non-Recurring Subscriptions ( with or without a Free Trial Period ), Lifetime Subscriptions, and even Fixed-Term Subscriptions. All of these are supported by s2Member\'s Button/Form Generators, and all of these are supported here.</p>' . "\n";
|
58 |
do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_signup_tracking", get_defined_vars ());
|
59 |
/**/
|
@@ -119,7 +119,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
|
|
119 |
/**/
|
120 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-tracking-section">' . "\n";
|
121 |
echo '<h3>Tracking Codes For Specific Post/Page Access ( optional )</h3>' . "\n";
|
122 |
-
echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, after a Customer completes a successful transaction through your Payment Gateway; specifically for Post/Page Access. These Codes are NOT injected for any type of
|
123 |
do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_sp_tracking", get_defined_vars ());
|
124 |
/**/
|
125 |
echo '<table class="form-table">' . "\n";
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
18 |
+
exit ("Do not access this file directly.");
|
19 |
/**/
|
20 |
if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
|
21 |
{
|
53 |
/**/
|
54 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-signup-tracking-section">' . "\n";
|
55 |
echo '<h3>Membership Signup Tracking Codes ( optional )</h3>' . "\n";
|
56 |
+
echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, after a Customer completes Signup through your Payment Gateway. Tracking Codes are only displayed/processed one time for each Customer. s2Member will display your Tracking Codes in one of four possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Registration Form, after returning from your Payment Gateway. <em>Note. If you offer a 100% free Trial Period, Tracking Codes will be displayed in location #2 when using PayPal® Standard Button integration.</em> <strong>3.</strong> Otherwise, if possible, on the Login Form after Registration is completed. <strong>4.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( common with s2Member Pro Form integration )</em>; or after the Customer\'s very first login.</p>' . "\n";
|
57 |
echo '<p>Signup Tracking Codes are displayed for all types of Membership Level Access. Including: Recurring Subscriptions ( with or without a Free Trial Period ), Non-Recurring Subscriptions ( with or without a Free Trial Period ), Lifetime Subscriptions, and even Fixed-Term Subscriptions. All of these are supported by s2Member\'s Button/Form Generators, and all of these are supported here.</p>' . "\n";
|
58 |
do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_signup_tracking", get_defined_vars ());
|
59 |
/**/
|
119 |
/**/
|
120 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-tracking-section">' . "\n";
|
121 |
echo '<h3>Tracking Codes For Specific Post/Page Access ( optional )</h3>' . "\n";
|
122 |
+
echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, after a Customer completes a successful transaction through your Payment Gateway; specifically for Post/Page Access. These Codes are NOT injected for any type of Membership Level Access. These are only for Specific Post/Page transactions. The Tracking Codes that you enter below, will be displayed in one of two possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( common with s2Member Pro Form integration )</em>.</p>' . "\n";
|
123 |
do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_sp_tracking", get_defined_vars ());
|
124 |
/**/
|
125 |
echo '<table class="form-table">' . "\n";
|
includes/s2member-min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function(b){ws_plugin__s2member_uniqueFilesDownloaded=[];var a='<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((defined ("BP_VERSION")) ? "/" . ltrim (BP_REGISTER_SLUG,"/") : ""), "/"); ?>';var c='<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((defined ("BP_VERSION")) ? "/" . ltrim (BP_XPROFILE_SLUG,"/") : ""), "/"); ?>';if(S2MEMBER_CURRENT_USER_IS_LOGGED_IN&&S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED){b('a[href*="s2member_file_download"]').click(function(){if(!this.href.match(/s2member_file_download_key\=(.+)/i)){var d="** Please Confirm This File Download **\n\n";d+="You've downloaded "+S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY+" protected file"+((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY!==1)?"s":"")+" in the last "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" days.\n\n";d+="You're entitled to "+((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED)?"UNLIMITED downloads though ( so, no worries ).":S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED+" unique downloads every "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" day period.");if(this.href.match(/s2member_skip_confirmation/i)||confirm(d)){if(b.inArray(this.href,ws_plugin__s2member_uniqueFilesDownloaded)===-1){ws_plugin__s2member_uniqueFilesDownloaded.push(this.href),S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY++}return true}else{return false}}else{return true}})}if(!location.href.match(/\/wp-admin\//)){b("input#ws-plugin--s2member-profile-password1, input#ws-plugin--s2member-profile-password2").keyup(function(){ws_plugin__s2member_passwordStrength(b("input#ws-plugin--s2member-profile-login"),b("input#ws-plugin--s2member-profile-password1"),b("input#ws-plugin--s2member-profile-password2"),b("div#ws-plugin--s2member-profile-password-strength"))});b("form#ws-plugin--s2member-profile").submit(function(){var f=this,e="",d="",j="";var h=b("input#ws-plugin--s2member-profile-password1",f);var g=b("input#ws-plugin--s2member-profile-password2",f);var i=b("input#ws-plugin--s2member-profile-submit",f);b(":input",f).each(function(){var k=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(k&&(e=b.trim(b('label[for="'+k+'"]',f).first().children("strong").first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){j+=d+"\n\n"}}});if(j=b.trim(j)){alert("— Oops, you missed something: —\n\n"+j);return false}else{if(b.trim(h.val())&&b.trim(h.val())!==b.trim(g.val())){alert("— Oops, you missed something: —\n\nPasswords do not match up. Please try again.");return false}}ws_plugin__s2member_animateProcessing(i);return true})}if(location.href.match(/\/wp-signup\.php/)){b("div#content > div.mu_register > form#setupform").submit(function(){var f=this,e="",d="",h="";b("input#user_email",f).attr("data-expected","email");var g=b('p.submit input[type="submit"]',f);b("input#user_name, input#user_email, input#blogname, input#blog_title, input#captcha_code",f).attr({"aria-required":"true"});b(":input",f).each(function(){var i=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(i&&(e=b.trim(b('label[for="'+i+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){h+=d+"\n\n"}}});if(h=b.trim(h)){alert("— Oops, you missed something: —\n\n"+h);return false}ws_plugin__s2member_animateProcessing(g);return true})}else{if(location.href.match(/\/wp-login\.php/)){b("input#ws-plugin--s2member-custom-reg-field-user-pass1, input#ws-plugin--s2member-custom-reg-field-user-pass2").keyup(function(){ws_plugin__s2member_passwordStrength(b("input#user_login"),b("input#ws-plugin--s2member-custom-reg-field-user-pass1"),b("input#ws-plugin--s2member-custom-reg-field-user-pass2"),b("div#ws-plugin--s2member-custom-reg-field-user-pass-strength"))});b("div#login > form#registerform input#wp-submit").attr("tabindex","1000");b("div#login > form#registerform").submit(function(){var f=this,e="",d="",j="";b("input#user_email",f).attr("data-expected","email");var i=b('input#ws-plugin--s2member-custom-reg-field-user-pass1[aria-required="true"]',f);var g=b("input#ws-plugin--s2member-custom-reg-field-user-pass2",f);var h=b("input#wp-submit",f);b("input#user_login, input#user_email, input#captcha_code",f).attr({"aria-required":"true"});b(":input",f).each(function(){var k=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(b.inArray(k,["user_login","user_email","captcha_code"])!==-1){if((e=b.trim(b(this).parent("label").text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){j+=d+"\n\n"}}}else{if(k&&(e=b.trim(b('label[for="'+k+'"]',f).first().children("span").first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){j+=d+"\n\n"}}}});if(j=b.trim(j)){alert("— Oops, you missed something: —\n\n"+j);return false}else{if(i.length&&b.trim(i.val())!==b.trim(g.val())){alert("— Oops, you missed something: —\n\nPasswords do not match up. Please try again.");return false}}ws_plugin__s2member_animateProcessing(h);return true})}else{if(location.href.match(/\/wp-admin\/(user\/)?profile\.php/)){b("form#your-profile").submit(function(){var f=this,e="",d="",g="";b("input#email",f).attr("data-expected","email");b(':input[id^="ws-plugin--s2member-profile-"]',f).each(function(){var h=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(h&&(e=b.trim(b('label[for="'+h+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){g+=d+"\n\n"}}});if(g=b.trim(g)){alert("— Oops, you missed something: —\n\n"+g);return false}return true})}else{if(a&&location.href.match(a)){b("body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section").closest("form").submit(function(){var f=this,e="",d="",g="";b("input#signup_email",f).attr("data-expected","email");b("input#signup_username, input#signup_email, input#signup_password, input#field_1",f).attr({"aria-required":"true"});b(":input",f).each(function(){var h=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(h&&(e=b.trim(b('label[for="'+h+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){g+=d+"\n\n"}}});if(g=b.trim(g)){alert("— Oops, you missed something: —\n\n"+g);return false}return true})}else{if(c&&location.href.match(c)&&location.href.match(/\/edit\//)){b('body.logged-in.profile.profile-edit input.ws-plugin--s2member-profile-field-4bp[type = "text"]').closest("form").submit(function(){var f=this,e="",d="",g="";b("input#field_1",f).attr({"aria-required":"true"});b(":input",f).each(function(){var h=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(h&&(e=b.trim(b('label[for="'+h+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){g+=d+"\n\n"}}});if(g=b.trim(g)){alert("— Oops, you missed something: —\n\n"+g);return false}return true})}}}}}ws_plugin__s2member_passwordStrength=function(e,g,f,d){if(e instanceof jQuery&&g instanceof jQuery&&f instanceof jQuery&&d instanceof jQuery&&typeof passwordStrength==="function"&&typeof pwsL10n==="object"){d.removeClass("ws-plugin--s2member-password-strength-short ws-plugin--s2member-password-strength-bad ws-plugin--s2member-password-strength-good ws-plugin--s2member-password-strength-strong ws-plugin--s2member-password-strength-mismatch");switch(passwordStrength(g.val(),e.val(),f.val())){case 1:d.addClass("ws-plugin--s2member-password-strength-short").html(pwsL10n["short"]);break;case 2:d.addClass("ws-plugin--s2member-password-strength-bad").html(pwsL10n.bad);break;case 3:d.addClass("ws-plugin--s2member-password-strength-good").html(pwsL10n.good);break;case 4:d.addClass("ws-plugin--s2member-password-strength-strong").html(pwsL10n.strong);break;case 5:d.addClass("ws-plugin--s2member-password-strength-mismatch").html(pwsL10n.mismatch);break;default:d.addClass("ws-plugin--s2member-password-strength-short").html(pwsL10n["short"])}}return};ws_plugin__s2member_validationErrors=function(p,o,e,k,j){if(typeof p==="string"&&p&&typeof o==="object"&&typeof e==="object"){if(typeof o.tagName==="string"&&o.tagName.match(/^(input|textarea|select)$/i)&&!o.disabled){var r=o.tagName.toLowerCase(),n=b(o),m=b.trim(n.attr("type")).toLowerCase(),d=b.trim(n.attr("name")),q=n.val();var k=(typeof k==="boolean")?k:(n.attr("aria-required")==="true"),j=(typeof j==="string")?j:b.trim(n.attr("data-expected"));var i=('<?php echo strlen($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]); ?>'>0)?true:false;var g=new RegExp('^(<?php echo c_ws_plugin__s2member_utils_strings::esc_sq(implode("|", preg_split("/[\r\n\t ;,]+/", preg_quote($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"], "/")))); ?>)@',"i");if(r==="input"&&m==="checkbox"&&d.match(/\[\]$/)){if(typeof o.id==="string"&&o.id.match(/-0$/)){if(k&&!b('input[name="'+d.replace(/([\[\]])/g,"$1")+'"]:checked',e).length){return p+"\nPlease check at least one of the boxes."}}}else{if(r==="input"&&m==="checkbox"){if(k&&!o.checked){return p+"\nRequired. This box must be checked."}}else{if(r==="input"&&m==="radio"){if(typeof o.id==="string"&&o.id.match(/-0$/)){if(k&&!b('input[name="'+d.replace(/([\[\]])/g,"$1")+'"]:checked',e).length){return p+"\nPlease select one of the options."}}}else{if(r==="select"&&n.attr("multiple")){if(k&&(!(q instanceof Array)||!q.length)){return p+"\nPlease select at least one of the options."}}else{if(typeof q!=="string"||(k&&!(q=b.trim(q)).length)){return p+"\nThis is a required field, please try again."}else{if((q=b.trim(q)).length&&((r==="input"&&m.match(/^(text|password)$/i))||r==="textarea")&&typeof j==="string"&&j.length){if(j==="numeric-wp-commas"&&(!q.match(/^[0-9\.,]+$/)||isNaN(q.replace(/,/g,"")))){return p+"\nMust be numeric ( with or without decimals, commas allowed )."}else{if(j==="numeric"&&(!q.match(/^[0-9\.]+$/)||isNaN(q))){return p+"\nMust be numeric ( with or without decimals, no commas )."}else{if(j==="integer"&&(!q.match(/^[0-9]+$/)||isNaN(q))){return p+"\nMust be an integer ( a whole number, without any decimals )."}else{if(j==="integer-gt-0"&&(!q.match(/^[0-9]+$/)||isNaN(q)||q<=0)){return p+"\nMust be an integer > 0 ( whole number, no decimals, greater than 0 )."}else{if(j==="float"&&(!q.match(/^[0-9\.]+$/)||!q.match(/[0-9]/)||!q.match(/\./)||isNaN(q))){return p+"\nMust be a float ( floating point number, decimals required )."}else{if(j==="float-gt-0"&&(!q.match(/^[0-9\.]+$/)||!q.match(/[0-9]/)||!q.match(/\./)||isNaN(q)||q<=0)){return p+"\nMust be a float > 0 ( floating point number, decimals required, greater than 0 )."}else{if(j==="date"&&!q.match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)){return p+"\nMust be a date ( required date format: dd/mm/yyyy )."}else{if(j==="email"&&!q.match(/^([a-z_~0-9\+\-]+)(((\.?)([a-z_~0-9\+\-]+))*)(@)([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return p+"\nMust be a valid email address."}else{if(j==="email"&&i&&q.match(g)){return p+"\nPlease use a personal email address.\nAddresses like <"+q.split("@")[0]+"@> are problematic."}else{if(j==="url"&&!q.match(/^http(s?)\:\/\/(.{5,})$/i)){return p+"\nMust be a full URL ( starting with http or https )."}else{if(j==="domain"&&!q.match(/^([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return p+"\nMust be a domain name ( domain name only, without http )."}else{if(j==="phone"&&(!q.match(/^[0-9 \(\)\-]+$/)||q.replace(/[^0-9]/g,"").length!==10)){return p+"\nMust be a phone # ( 10 digits w/possible hyphens,spaces,brackets )."}else{if(j==="uszip"&&!q.match(/^[0-9]{5}(-[0-9]{4})?$/)){return p+"\nMust be a US zipcode ( 5-9 digits w/possible hyphen )."}else{if(j==="cazip"&&!q.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return p+"\nMust be a Canadian zipcode ( 6 alpha-numerics w/possible space )."}else{if(j==="uczip"&&!q.match(/^[0-9]{5}(-[0-9]{4})?$/)&&!q.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return p+"\nMust be a zipcode ( either a US or Canadian zipcode )."}else{if(j.match(/^alphanumerics-spaces-punctuation-([0-9]+)(-e)?$/)&&!q.match(/^[a-z 0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return p+"\nPlease use alphanumerics, spaces & punctuation only."}else{if(j.match(/^alphanumerics-spaces-([0-9]+)(-e)?$/)&&!q.match(/^[a-z 0-9]+$/i)){return p+"\nPlease use alphanumerics & spaces only."}else{if(j.match(/^alphanumerics-punctuation-([0-9]+)(-e)?$/)&&!q.match(/^[a-z0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return p+"\nPlease use alphanumerics & punctuation only ( no spaces )."}else{if(j.match(/^alphanumerics-([0-9]+)(-e)?$/)&&!q.match(/^[a-z0-9]+$/i)){return p+"\nPlease use alphanumerics only ( no spaces/punctuation )."}else{if(j.match(/^alphabetics-([0-9]+)(-e)?$/)&&!q.match(/^[a-z]+$/i)){return p+"\nPlease use alphabetics only ( no digits/spaces/punctuation )."}else{if(j.match(/^numerics-([0-9]+)(-e)?$/)&&!q.match(/^[0-9]+$/i)){return p+"\nPlease use numeric digits only."}else{if(j.match(/^(any|alphanumerics-spaces-punctuation|alphanumerics-spaces|alphanumerics-punctuation|alphanumerics|alphabetics|numerics)-([0-9]+)(-e)?$/)){var l=j.split("-"),f=Number(l[1]),h=(l.length>2)?Number(l[2]):"";if(h&&q.length!==f){return p+"\nMust be exactly "+f+" "+((l[0]==="numerics")?"digit":"character")+((f>1)?"s":"")+"."}else{if(q.length<f){return p+"\nMust be at least "+f+" "+((l[0]==="numerics")?"digit":"character")+((f>1)?"s":"")+"."}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return""};ws_plugin__s2member_animateProcessingConfig={originalText:"",interval:null,speed:100},ws_plugin__s2member_animateProcessing=function(e,d){if(e instanceof jQuery){if(d){clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);if(ws_plugin__s2member_animateProcessingConfig.originalText){e.val(ws_plugin__s2member_animateProcessingConfig.originalText)}return}e.first().each(function(){var h=b(this),g=0,f="r",j=[".","..","..."];ws_plugin__s2member_animateProcessingConfig.originalText=h.val();clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);ws_plugin__s2member_animateProcessingConfig.interval=setInterval(function(){if(f==="r"){if(g+1<=j.length-1){g=g+1,f="r"}else{g=g-1,f="l"}}else{if(f==="l"){if(g-1>=0){g=g-1,f="l"}else{g=g+1,f="r"}}}for(var k=j[g],i=j[g].length;i<j.length;i++){k+=" "}h.val("Processing"+k)},ws_plugin__s2member_animateProcessingConfig.speed)})}}});
|
1 |
+
jQuery(document).ready(function(b){ws_plugin__s2member_uniqueFilesDownloaded=[];var a='<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? "/" . ltrim (BP_REGISTER_SLUG,"/") : ""), "/"); ?>';var c='<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? "/" . ltrim (BP_XPROFILE_SLUG,"/") : ""), "/"); ?>';if(S2MEMBER_CURRENT_USER_IS_LOGGED_IN&&S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED){b('a[href*="s2member_file_download"]').click(function(){if(!this.href.match(/s2member_file_download_key\=(.+)/i)){var d="** Please Confirm This File Download **\n\n";d+="You've downloaded "+S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY+" protected file"+((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY!==1)?"s":"")+" in the last "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" days.\n\n";d+="You're entitled to "+((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED)?"UNLIMITED downloads though ( so, no worries ).":S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED+" unique downloads every "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" day period.");if(this.href.match(/s2member_skip_confirmation/i)||confirm(d)){if(b.inArray(this.href,ws_plugin__s2member_uniqueFilesDownloaded)===-1){ws_plugin__s2member_uniqueFilesDownloaded.push(this.href),S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY++}return true}else{return false}}else{return true}})}if(!location.href.match(/\/wp-admin\//)){b("input#ws-plugin--s2member-profile-password1, input#ws-plugin--s2member-profile-password2").keyup(function(){ws_plugin__s2member_passwordStrength(b("input#ws-plugin--s2member-profile-login"),b("input#ws-plugin--s2member-profile-password1"),b("input#ws-plugin--s2member-profile-password2"),b("div#ws-plugin--s2member-profile-password-strength"))});b("form#ws-plugin--s2member-profile").submit(function(){var f=this,e="",d="",j="";var h=b("input#ws-plugin--s2member-profile-password1",f);var g=b("input#ws-plugin--s2member-profile-password2",f);var i=b("input#ws-plugin--s2member-profile-submit",f);b(":input",f).each(function(){var k=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(k&&(e=b.trim(b('label[for="'+k+'"]',f).first().children("strong").first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){j+=d+"\n\n"}}});if(j=b.trim(j)){alert("— Oops, you missed something: —\n\n"+j);return false}else{if(b.trim(h.val())&&b.trim(h.val())!==b.trim(g.val())){alert("— Oops, you missed something: —\n\nPasswords do not match up. Please try again.");return false}}ws_plugin__s2member_animateProcessing(i);return true})}if(location.href.match(/\/wp-signup\.php/)){b("div#content > div.mu_register > form#setupform").submit(function(){var f=this,e="",d="",h="";b("input#user_email",f).attr("data-expected","email");var g=b('p.submit input[type="submit"]',f);b("input#user_name, input#user_email, input#blogname, input#blog_title, input#captcha_code",f).attr({"aria-required":"true"});b(":input",f).each(function(){var i=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(i&&(e=b.trim(b('label[for="'+i+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){h+=d+"\n\n"}}});if(h=b.trim(h)){alert("— Oops, you missed something: —\n\n"+h);return false}ws_plugin__s2member_animateProcessing(g);return true})}else{if(location.href.match(/\/wp-login\.php/)){b("input#ws-plugin--s2member-custom-reg-field-user-pass1, input#ws-plugin--s2member-custom-reg-field-user-pass2").keyup(function(){ws_plugin__s2member_passwordStrength(b("input#user_login"),b("input#ws-plugin--s2member-custom-reg-field-user-pass1"),b("input#ws-plugin--s2member-custom-reg-field-user-pass2"),b("div#ws-plugin--s2member-custom-reg-field-user-pass-strength"))});b("div#login > form#registerform input#wp-submit").attr("tabindex","1000");b("div#login > form#registerform").submit(function(){var f=this,e="",d="",j="";b("input#user_email",f).attr("data-expected","email");var i=b('input#ws-plugin--s2member-custom-reg-field-user-pass1[aria-required="true"]',f);var g=b("input#ws-plugin--s2member-custom-reg-field-user-pass2",f);var h=b("input#wp-submit",f);b("input#user_login, input#user_email, input#captcha_code",f).attr({"aria-required":"true"});b(":input",f).each(function(){var k=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(b.inArray(k,["user_login","user_email","captcha_code"])!==-1){if((e=b.trim(b(this).parent("label").text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){j+=d+"\n\n"}}}else{if(k&&(e=b.trim(b('label[for="'+k+'"]',f).first().children("span").first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){j+=d+"\n\n"}}}});if(j=b.trim(j)){alert("— Oops, you missed something: —\n\n"+j);return false}else{if(i.length&&b.trim(i.val())!==b.trim(g.val())){alert("— Oops, you missed something: —\n\nPasswords do not match up. Please try again.");return false}}ws_plugin__s2member_animateProcessing(h);return true})}else{if(location.href.match(/\/wp-admin\/(user\/)?profile\.php/)){b("form#your-profile").submit(function(){var f=this,e="",d="",g="";b("input#email",f).attr("data-expected","email");b(':input[id^="ws-plugin--s2member-profile-"]',f).each(function(){var h=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(h&&(e=b.trim(b('label[for="'+h+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){g+=d+"\n\n"}}});if(g=b.trim(g)){alert("— Oops, you missed something: —\n\n"+g);return false}return true})}else{if(a&&location.href.match(a)){b("body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section").closest("form").submit(function(){var f=this,e="",d="",g="";b("input#signup_email",f).attr("data-expected","email");b("input#signup_username, input#signup_email, input#signup_password, input#field_1",f).attr({"aria-required":"true"});b(":input",f).each(function(){var h=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(h&&(e=b.trim(b('label[for="'+h+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){g+=d+"\n\n"}}});if(g=b.trim(g)){alert("— Oops, you missed something: —\n\n"+g);return false}return true})}else{if(c&&location.href.match(c)&&location.href.match(/\/edit\//)){b('body.logged-in.profile.profile-edit input.ws-plugin--s2member-profile-field-4bp[type = "text"]').closest("form").submit(function(){var f=this,e="",d="",g="";b("input#field_1",f).attr({"aria-required":"true"});b(":input",f).each(function(){var h=b.trim(b(this).attr("id")).replace(/-[0-9]+$/g,"");if(h&&(e=b.trim(b('label[for="'+h+'"]',f).first().text().replace(/[\r\n\t]+/g," ")))){if(d=ws_plugin__s2member_validationErrors(e,this,f)){g+=d+"\n\n"}}});if(g=b.trim(g)){alert("— Oops, you missed something: —\n\n"+g);return false}return true})}}}}}ws_plugin__s2member_passwordStrength=function(e,g,f,d){if(e instanceof jQuery&&g instanceof jQuery&&f instanceof jQuery&&d instanceof jQuery&&typeof passwordStrength==="function"&&typeof pwsL10n==="object"){d.removeClass("ws-plugin--s2member-password-strength-short ws-plugin--s2member-password-strength-bad ws-plugin--s2member-password-strength-good ws-plugin--s2member-password-strength-strong ws-plugin--s2member-password-strength-mismatch");switch(passwordStrength(g.val(),e.val(),f.val())){case 1:d.addClass("ws-plugin--s2member-password-strength-short").html(pwsL10n["short"]);break;case 2:d.addClass("ws-plugin--s2member-password-strength-bad").html(pwsL10n.bad);break;case 3:d.addClass("ws-plugin--s2member-password-strength-good").html(pwsL10n.good);break;case 4:d.addClass("ws-plugin--s2member-password-strength-strong").html(pwsL10n.strong);break;case 5:d.addClass("ws-plugin--s2member-password-strength-mismatch").html(pwsL10n.mismatch);break;default:d.addClass("ws-plugin--s2member-password-strength-short").html(pwsL10n["short"])}}return};ws_plugin__s2member_validationErrors=function(p,o,e,k,j){if(typeof p==="string"&&p&&typeof o==="object"&&typeof e==="object"){if(typeof o.tagName==="string"&&o.tagName.match(/^(input|textarea|select)$/i)&&!o.disabled){var r=o.tagName.toLowerCase(),n=b(o),m=b.trim(n.attr("type")).toLowerCase(),d=b.trim(n.attr("name")),q=n.val();var k=(typeof k==="boolean")?k:(n.attr("aria-required")==="true"),j=(typeof j==="string")?j:b.trim(n.attr("data-expected"));var i=('<?php echo strlen($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]); ?>'>0)?true:false;var g=new RegExp('^(<?php echo c_ws_plugin__s2member_utils_strings::esc_sq(implode("|", preg_split("/[\r\n\t ;,]+/", preg_quote($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"], "/")))); ?>)@',"i");if(r==="input"&&m==="checkbox"&&d.match(/\[\]$/)){if(typeof o.id==="string"&&o.id.match(/-0$/)){if(k&&!b('input[name="'+d.replace(/([\[\]])/g,"$1")+'"]:checked',e).length){return p+"\nPlease check at least one of the boxes."}}}else{if(r==="input"&&m==="checkbox"){if(k&&!o.checked){return p+"\nRequired. This box must be checked."}}else{if(r==="input"&&m==="radio"){if(typeof o.id==="string"&&o.id.match(/-0$/)){if(k&&!b('input[name="'+d.replace(/([\[\]])/g,"$1")+'"]:checked',e).length){return p+"\nPlease select one of the options."}}}else{if(r==="select"&&n.attr("multiple")){if(k&&(!(q instanceof Array)||!q.length)){return p+"\nPlease select at least one of the options."}}else{if(typeof q!=="string"||(k&&!(q=b.trim(q)).length)){return p+"\nThis is a required field, please try again."}else{if((q=b.trim(q)).length&&((r==="input"&&m.match(/^(text|password)$/i))||r==="textarea")&&typeof j==="string"&&j.length){if(j==="numeric-wp-commas"&&(!q.match(/^[0-9\.,]+$/)||isNaN(q.replace(/,/g,"")))){return p+"\nMust be numeric ( with or without decimals, commas allowed )."}else{if(j==="numeric"&&(!q.match(/^[0-9\.]+$/)||isNaN(q))){return p+"\nMust be numeric ( with or without decimals, no commas )."}else{if(j==="integer"&&(!q.match(/^[0-9]+$/)||isNaN(q))){return p+"\nMust be an integer ( a whole number, without any decimals )."}else{if(j==="integer-gt-0"&&(!q.match(/^[0-9]+$/)||isNaN(q)||q<=0)){return p+"\nMust be an integer > 0 ( whole number, no decimals, greater than 0 )."}else{if(j==="float"&&(!q.match(/^[0-9\.]+$/)||!q.match(/[0-9]/)||!q.match(/\./)||isNaN(q))){return p+"\nMust be a float ( floating point number, decimals required )."}else{if(j==="float-gt-0"&&(!q.match(/^[0-9\.]+$/)||!q.match(/[0-9]/)||!q.match(/\./)||isNaN(q)||q<=0)){return p+"\nMust be a float > 0 ( floating point number, decimals required, greater than 0 )."}else{if(j==="date"&&!q.match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)){return p+"\nMust be a date ( required date format: dd/mm/yyyy )."}else{if(j==="email"&&!q.match(/^([a-z_~0-9\+\-]+)(((\.?)([a-z_~0-9\+\-]+))*)(@)([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return p+"\nMust be a valid email address."}else{if(j==="email"&&i&&q.match(g)){return p+"\nPlease use a personal email address.\nAddresses like <"+q.split("@")[0]+"@> are problematic."}else{if(j==="url"&&!q.match(/^http(s?)\:\/\/(.{5,})$/i)){return p+"\nMust be a full URL ( starting with http or https )."}else{if(j==="domain"&&!q.match(/^([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return p+"\nMust be a domain name ( domain name only, without http )."}else{if(j==="phone"&&(!q.match(/^[0-9 \(\)\-]+$/)||q.replace(/[^0-9]/g,"").length!==10)){return p+"\nMust be a phone # ( 10 digits w/possible hyphens,spaces,brackets )."}else{if(j==="uszip"&&!q.match(/^[0-9]{5}(-[0-9]{4})?$/)){return p+"\nMust be a US zipcode ( 5-9 digits w/possible hyphen )."}else{if(j==="cazip"&&!q.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return p+"\nMust be a Canadian zipcode ( 6 alpha-numerics w/possible space )."}else{if(j==="uczip"&&!q.match(/^[0-9]{5}(-[0-9]{4})?$/)&&!q.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return p+"\nMust be a zipcode ( either a US or Canadian zipcode )."}else{if(j.match(/^alphanumerics-spaces-punctuation-([0-9]+)(-e)?$/)&&!q.match(/^[a-z 0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return p+"\nPlease use alphanumerics, spaces & punctuation only."}else{if(j.match(/^alphanumerics-spaces-([0-9]+)(-e)?$/)&&!q.match(/^[a-z 0-9]+$/i)){return p+"\nPlease use alphanumerics & spaces only."}else{if(j.match(/^alphanumerics-punctuation-([0-9]+)(-e)?$/)&&!q.match(/^[a-z0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return p+"\nPlease use alphanumerics & punctuation only ( no spaces )."}else{if(j.match(/^alphanumerics-([0-9]+)(-e)?$/)&&!q.match(/^[a-z0-9]+$/i)){return p+"\nPlease use alphanumerics only ( no spaces/punctuation )."}else{if(j.match(/^alphabetics-([0-9]+)(-e)?$/)&&!q.match(/^[a-z]+$/i)){return p+"\nPlease use alphabetics only ( no digits/spaces/punctuation )."}else{if(j.match(/^numerics-([0-9]+)(-e)?$/)&&!q.match(/^[0-9]+$/i)){return p+"\nPlease use numeric digits only."}else{if(j.match(/^(any|alphanumerics-spaces-punctuation|alphanumerics-spaces|alphanumerics-punctuation|alphanumerics|alphabetics|numerics)-([0-9]+)(-e)?$/)){var l=j.split("-"),f=Number(l[1]),h=(l.length>2)?Number(l[2]):"";if(h&&q.length!==f){return p+"\nMust be exactly "+f+" "+((l[0]==="numerics")?"digit":"character")+((f>1)?"s":"")+"."}else{if(q.length<f){return p+"\nMust be at least "+f+" "+((l[0]==="numerics")?"digit":"character")+((f>1)?"s":"")+"."}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return""};ws_plugin__s2member_animateProcessingConfig={originalText:"",interval:null,speed:100},ws_plugin__s2member_animateProcessing=function(e,d){if(e instanceof jQuery){if(d){clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);if(ws_plugin__s2member_animateProcessingConfig.originalText){e.val(ws_plugin__s2member_animateProcessingConfig.originalText)}return}e.first().each(function(){var h=b(this),g=0,f="r",j=[".","..","..."];ws_plugin__s2member_animateProcessingConfig.originalText=h.val();clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);ws_plugin__s2member_animateProcessingConfig.interval=setInterval(function(){if(f==="r"){if(g+1<=j.length-1){g=g+1,f="r"}else{g=g-1,f="l"}}else{if(f==="l"){if(g-1>=0){g=g-1,f="l"}else{g=g+1,f="r"}}}for(var k=j[g],i=j[g].length;i<j.length;i++){k+=" "}h.val("Processing"+k)},ws_plugin__s2member_animateProcessingConfig.speed)})}}});
|
includes/s2member.css
CHANGED
@@ -150,6 +150,114 @@ div#content > div.mu_register > div.mu_alert
|
|
150 |
display: none;
|
151 |
}
|
152 |
/*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
Structural styles for Shortcode Profile Editing panel.
|
154 |
|
155 |
These are basic CSS rules. You can override any of these
|
150 |
display: none;
|
151 |
}
|
152 |
/*
|
153 |
+
Structural styles for Return Pages.
|
154 |
+
|
155 |
+
These are basic CSS rules. You can override any of these
|
156 |
+
through the `/style.css` file for your WordPress® theme.
|
157 |
+
|
158 |
+
If you're using a `PriMo Theme`, you can use:
|
159 |
+
PriMoTheme Options -> Custom CSS
|
160 |
+
See: http://www.primothemes.com/
|
161 |
+
*/
|
162 |
+
body.s2member-return-body
|
163 |
+
{
|
164 |
+
color: #000000;
|
165 |
+
font-size: 14px;
|
166 |
+
background: #CCCCCC;
|
167 |
+
}
|
168 |
+
body.s2member-return-body a
|
169 |
+
{
|
170 |
+
color: #333333;
|
171 |
+
text-decoration: none;
|
172 |
+
border-bottom: 1px dotted;
|
173 |
+
}
|
174 |
+
body.s2member-return-body a:hover
|
175 |
+
{
|
176 |
+
color: #000000;
|
177 |
+
}
|
178 |
+
body.s2member-return-body *
|
179 |
+
{
|
180 |
+
font-family: 'Trebuchet MS', 'Arial', 'Helvetica', sans-serif;
|
181 |
+
}
|
182 |
+
body.s2member-return-body pre,
|
183 |
+
body.s2member-return-body pre *,
|
184 |
+
body.s2member-return-body code,
|
185 |
+
body.s2member-return-body code *
|
186 |
+
{
|
187 |
+
font-family: 'Consolas', 'Courier New', monospace;
|
188 |
+
}
|
189 |
+
div.s2member-return-section
|
190 |
+
{
|
191 |
+
margin: 20px auto 20px auto;
|
192 |
+
}
|
193 |
+
div.s2member-return-header-section
|
194 |
+
{
|
195 |
+
padding: 0;
|
196 |
+
width: 800px;
|
197 |
+
font-size: 120%;
|
198 |
+
}
|
199 |
+
div.s2member-return-response-section
|
200 |
+
{
|
201 |
+
width: 768px;
|
202 |
+
padding: 15px;
|
203 |
+
background: #FFFFFF;
|
204 |
+
border: 1px solid #666666;
|
205 |
+
-moz-border-radius: 3px;
|
206 |
+
-webkit-border-radius: 3px;
|
207 |
+
border-radius: 3px;
|
208 |
+
-moz-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
|
209 |
+
-webkit-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
|
210 |
+
box-shadow: 1px 1px 0 #999999, -1px -1px 1px #999999;
|
211 |
+
}
|
212 |
+
div.s2member-return-response-section div.s2member-return-continue
|
213 |
+
{
|
214 |
+
margin: 20px auto 0 auto;
|
215 |
+
}
|
216 |
+
div.s2member-return-response-section div.s2member-return-continue a
|
217 |
+
{
|
218 |
+
border: 0;
|
219 |
+
padding: 8px;
|
220 |
+
display: block;
|
221 |
+
font-size: 120%;
|
222 |
+
text-align: center;
|
223 |
+
background: #EEEEEE;
|
224 |
+
border: 1px solid #999999;
|
225 |
+
-moz-border-radius: 3px;
|
226 |
+
-webkit-border-radius: 3px;
|
227 |
+
border-radius: 3px;
|
228 |
+
-moz-box-shadow: 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
|
229 |
+
-webkit-box-shadow: 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
|
230 |
+
box-shadow: 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
|
231 |
+
}
|
232 |
+
div.s2member-return-response-section div.s2member-return-continue a:hover,
|
233 |
+
div.s2member-return-response-section div.s2member-return-continue a:active,
|
234 |
+
div.s2member-return-response-section div.s2member-return-continue a:focus
|
235 |
+
{
|
236 |
+
color: #FFFFFF;
|
237 |
+
background: #151515;
|
238 |
+
border: 1px solid #FFFFFF;
|
239 |
+
}
|
240 |
+
div.s2member-return-support-section
|
241 |
+
{
|
242 |
+
padding: 0;
|
243 |
+
width: 800px;
|
244 |
+
text-align: center;
|
245 |
+
}
|
246 |
+
div.s2member-return-support-section div.cc-reminder
|
247 |
+
{
|
248 |
+
padding: 15px;
|
249 |
+
text-align: center;
|
250 |
+
background: #FFFFFF;
|
251 |
+
margin: 20px auto 0 auto;
|
252 |
+
border: 1px solid #666666;
|
253 |
+
-moz-border-radius: 3px;
|
254 |
+
-webkit-border-radius: 3px;
|
255 |
+
border-radius: 3px;
|
256 |
+
-moz-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
|
257 |
+
-webkit-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
|
258 |
+
box-shadow: 1px 1px 0 #999999, -1px -1px 1px #999999;
|
259 |
+
}
|
260 |
+
/*
|
261 |
Structural styles for Shortcode Profile Editing panel.
|
262 |
|
263 |
These are basic CSS rules. You can override any of these
|
includes/s2member.js
CHANGED
@@ -24,8 +24,8 @@ jQuery(document).ready (function($)
|
|
24 |
ws_plugin__s2member_uniqueFilesDownloaded = []; /* Real-time counts. */
|
25 |
/* This is used in case a user downloads multiple files from a single page. */
|
26 |
/**/
|
27 |
-
var bpRegisterSlug = '<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((
|
28 |
-
var bpxProfileSlug = '<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((
|
29 |
/**/
|
30 |
if (S2MEMBER_CURRENT_USER_IS_LOGGED_IN && S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY < S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED)
|
31 |
{
|
24 |
ws_plugin__s2member_uniqueFilesDownloaded = []; /* Real-time counts. */
|
25 |
/* This is used in case a user downloads multiple files from a single page. */
|
26 |
/**/
|
27 |
+
var bpRegisterSlug = '<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? "/" . ltrim (BP_REGISTER_SLUG,"/") : ""), "/"); ?>';
|
28 |
+
var bpxProfileSlug = '<?php echo c_ws_plugin__s2member_utils_strings::esc_sq (preg_quote ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? "/" . ltrim (BP_XPROFILE_SLUG,"/") : ""), "/"); ?>';
|
29 |
/**/
|
30 |
if (S2MEMBER_CURRENT_USER_IS_LOGGED_IN && S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY < S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED)
|
31 |
{
|
includes/syscon.inc.php
CHANGED
@@ -34,8 +34,9 @@ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["max_levels"] = apply_filters ("ws_plug
|
|
34 |
/*
|
35 |
Configure regular expression matches for Membership Access Item Numbers ( including those with only Custom Capabilities ).
|
36 |
*/
|
37 |
-
$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["
|
38 |
-
$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["
|
|
|
39 |
/*
|
40 |
Configure regular expression match for Specific Post/Page Access Item Numbers ( all elements required here ).
|
41 |
*/
|
@@ -155,6 +156,7 @@ if (!function_exists ("ws_plugin__s2member_configure_options_and_their_defaults"
|
|
155 |
/**/
|
156 |
$default_options["reg_email_from_name"] = get_bloginfo ("name");
|
157 |
$default_options["reg_email_from_email"] = get_bloginfo ("admin_email");
|
|
|
158 |
/**/
|
159 |
$default_options["new_user_emails_enabled"] = "0";
|
160 |
/**/
|
@@ -383,7 +385,7 @@ if (!function_exists ("ws_plugin__s2member_configure_options_and_their_defaults"
|
|
383 |
else if (preg_match ("/^login_reg_(background|logo|font|footer)_/", $key) && !preg_match ("/background_image/", $key) && (!is_string ($value) || !strlen ($value)))
|
384 |
$value = $default_options[$key];
|
385 |
/**/
|
386 |
-
else if (preg_match ("/^
|
387 |
$value = $default_options[$key];
|
388 |
/**/
|
389 |
else if ($key === "new_user_emails_enabled" && (!is_string ($value) || !is_numeric ($value)))
|
34 |
/*
|
35 |
Configure regular expression matches for Membership Access Item Numbers ( including those with only Custom Capabilities ).
|
36 |
*/
|
37 |
+
$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"] = "/^([1-9][0-9]*)(?:(?:\:(\+?[a-z_0-9,]+|\+)?)?(?:\:([0-9]+ [A-Z])?)?)?$/";
|
38 |
+
$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_wo_level_regex"] = "/^(\*)(?:(?:\:(\+?[a-z_0-9,]+|\+)?)?(?:\:([0-9]+ [A-Z])?)?)?$/";
|
39 |
+
$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_or_wo_level_regex"] = "/^([1-9][0-9]*|\*)(?:(?:\:(\+?[a-z_0-9,]+|\+)?)?(?:\:([0-9]+ [A-Z])?)?)?$/";
|
40 |
/*
|
41 |
Configure regular expression match for Specific Post/Page Access Item Numbers ( all elements required here ).
|
42 |
*/
|
156 |
/**/
|
157 |
$default_options["reg_email_from_name"] = get_bloginfo ("name");
|
158 |
$default_options["reg_email_from_email"] = get_bloginfo ("admin_email");
|
159 |
+
$default_options["reg_email_support_link"] = "mailto:" . get_bloginfo ("admin_email");
|
160 |
/**/
|
161 |
$default_options["new_user_emails_enabled"] = "0";
|
162 |
/**/
|
385 |
else if (preg_match ("/^login_reg_(background|logo|font|footer)_/", $key) && !preg_match ("/background_image/", $key) && (!is_string ($value) || !strlen ($value)))
|
386 |
$value = $default_options[$key];
|
387 |
/**/
|
388 |
+
else if (preg_match ("/^reg_email_(from_name|from_email|support_link)$/", $key) && (!is_string ($value) || !strlen ($value)))
|
389 |
$value = $default_options[$key];
|
390 |
/**/
|
391 |
else if ($key === "new_user_emails_enabled" && (!is_string ($value) || !is_numeric ($value)))
|
includes/templates/buttons/paypal-checkout-button.html
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
<input type="hidden" name="cancel_return" value="%%cancel_return%%" />
|
7 |
<input type="hidden" name="return" value="%%return%%" />
|
8 |
<input type="hidden" name="rm" value="2" />
|
9 |
-
<!-- Configures
|
10 |
<input type="hidden" name="lc" value="" />
|
11 |
<input type="hidden" name="no_shipping" value="1" />
|
12 |
<input type="hidden" name="no_note" value="1" />
|
@@ -16,6 +16,8 @@
|
|
16 |
<input type="hidden" name="charset" value="utf-8" />
|
17 |
<input type="hidden" name="item_name" value="%%level_label%% / description and pricing details here." />
|
18 |
<input type="hidden" name="item_number" value="%%level%%" />
|
|
|
|
|
19 |
<!-- Identifies/Updates An Existing User/Member ( when/if applicable ) -->
|
20 |
<input type="hidden" name="on0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0; ?>" />
|
21 |
<input type="hidden" name="os0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0; ?>" />
|
6 |
<input type="hidden" name="cancel_return" value="%%cancel_return%%" />
|
7 |
<input type="hidden" name="return" value="%%return%%" />
|
8 |
<input type="hidden" name="rm" value="2" />
|
9 |
+
<!-- Configures Basic Checkout Fields -->
|
10 |
<input type="hidden" name="lc" value="" />
|
11 |
<input type="hidden" name="no_shipping" value="1" />
|
12 |
<input type="hidden" name="no_note" value="1" />
|
16 |
<input type="hidden" name="charset" value="utf-8" />
|
17 |
<input type="hidden" name="item_name" value="%%level_label%% / description and pricing details here." />
|
18 |
<input type="hidden" name="item_number" value="%%level%%" />
|
19 |
+
<!-- Configures s2Member's Unique Invoice ID/Code -->
|
20 |
+
<input type="hidden" name="invoice" value="<?php echo S2MEMBER_VALUE_FOR_PP_INV(); ?>" />
|
21 |
<!-- Identifies/Updates An Existing User/Member ( when/if applicable ) -->
|
22 |
<input type="hidden" name="on0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0; ?>" />
|
23 |
<input type="hidden" name="os0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0; ?>" />
|
includes/templates/buttons/paypal-sp-checkout-button.html
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
<input type="hidden" name="cancel_return" value="%%cancel_return%%" />
|
7 |
<input type="hidden" name="return" value="%%return%%" />
|
8 |
<input type="hidden" name="rm" value="2" />
|
9 |
-
<!-- Configures
|
10 |
<input type="hidden" name="lc" value="" />
|
11 |
<input type="hidden" name="no_shipping" value="1" />
|
12 |
<input type="hidden" name="no_note" value="1" />
|
@@ -17,6 +17,8 @@
|
|
17 |
<input type="hidden" name="item_name" value="Description and pricing details here." />
|
18 |
<input type="hidden" name="item_number" value="sp:0:72" />
|
19 |
<input type="hidden" name="amount" value="0.01" />
|
|
|
|
|
20 |
<!-- Associates Purchase With A User/Member ( when/if applicable ) -->
|
21 |
<input type="hidden" name="on0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0; ?>" />
|
22 |
<input type="hidden" name="os0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0; ?>" />
|
6 |
<input type="hidden" name="cancel_return" value="%%cancel_return%%" />
|
7 |
<input type="hidden" name="return" value="%%return%%" />
|
8 |
<input type="hidden" name="rm" value="2" />
|
9 |
+
<!-- Configures Basic Checkout Fields -->
|
10 |
<input type="hidden" name="lc" value="" />
|
11 |
<input type="hidden" name="no_shipping" value="1" />
|
12 |
<input type="hidden" name="no_note" value="1" />
|
17 |
<input type="hidden" name="item_name" value="Description and pricing details here." />
|
18 |
<input type="hidden" name="item_number" value="sp:0:72" />
|
19 |
<input type="hidden" name="amount" value="0.01" />
|
20 |
+
<!-- Configures s2Member's Unique Invoice ID/Code -->
|
21 |
+
<input type="hidden" name="invoice" value="<?php echo S2MEMBER_VALUE_FOR_PP_INV(); ?>" />
|
22 |
<!-- Associates Purchase With A User/Member ( when/if applicable ) -->
|
23 |
<input type="hidden" name="on0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0; ?>" />
|
24 |
<input type="hidden" name="os0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0; ?>" />
|
includes/templates/returns/default-return.html
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
%%doctype_html_head%%
|
2 |
+
<!-- Note. The DOCTYPE and HEAD Replacement Code can be removed if you would rather build your own. -->
|
3 |
+
<!-- Note. It is OK to use PHP code inside this template file ( when/if needed ). -->
|
4 |
+
<body class="s2member-return-body s2member-default-return-body">
|
5 |
+
|
6 |
+
<!-- Header Section ( contains information and possible custom code from the originating site/domain ). -->
|
7 |
+
<div id="s2member-default-return-header-section" class="s2member-return-section s2member-return-header-section s2member-default-return-header-section">
|
8 |
+
<div id="s2member-default-return-header-div" class="s2member-return-div s2member-return-header-div s2member-default-return-header-div">
|
9 |
+
%%header%% <!-- ( this is auto-filled by s2Member, based on configuration ). -->
|
10 |
+
</div>
|
11 |
+
<div style="clear:both;"></div>
|
12 |
+
</div>
|
13 |
+
|
14 |
+
<!-- Response Section ( this is auto-filled by s2Member, based on what action has taken place ). -->
|
15 |
+
<!-- Although NOT recommended, you can remove the response Replacement Code and build your own message if you prefer. -->
|
16 |
+
<!-- It is NOT recommended, because the dynamic response message may vary, depending on what action has taken place. -->
|
17 |
+
<div id="s2member-default-return-response-section" class="s2member-return-section s2member-return-response-section s2member-default-return-response-section">
|
18 |
+
<div id="s2member-default-return-response-div" class="s2member-return-div s2member-return-response-div s2member-default-return-response-div">
|
19 |
+
%%response%% <!-- ( this is auto-filled by s2Member, based on what action has taken place ). -->
|
20 |
+
<div id="s2member-default-return-continue" class="s2member-return-continue s2member-default-return-continue">
|
21 |
+
%%continue%% <!-- ( auto-filled by s2Member, based on what action has taken place ). -->
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
<div style="clear:both;"></div>
|
25 |
+
</div>
|
26 |
+
|
27 |
+
<!-- Support Section ( contains information about how a Customer can contact support ). -->
|
28 |
+
<div id="s2member-default-return-support-section" class="s2member-return-section s2member-return-support-section s2member-default-return-support-section">
|
29 |
+
<div id="s2member-default-return-support-div" class="s2member-return-div s2member-return-support-div s2member-default-return-support-div">
|
30 |
+
%%support%% <!-- ( this is auto-filled by s2Member, based on configuration ). -->
|
31 |
+
</div>
|
32 |
+
<div style="clear:both;"></div>
|
33 |
+
</div>
|
34 |
+
|
35 |
+
%%tracking%% <!-- ( this is auto-filled, supports tracking codes integrated w/ s2Member ). -->
|
36 |
+
|
37 |
+
</body>
|
38 |
+
</html>
|
includes/templates/returns/index.php
ADDED
File without changes
|
readme.txt
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
=== s2Member® ( Membership w/ PayPal® ) ===
|
2 |
|
3 |
-
Version:
|
4 |
-
Stable tag:
|
5 |
Framework: WS-P-110523
|
6 |
|
7 |
SSL Compatible: yes
|
@@ -19,7 +19,7 @@ ClickBank® Compatible: w/ s2Member Pro
|
|
19 |
AliPay® Compatible: w/ s2Member Pro
|
20 |
ccBill® Compatible: w/ s2Member Pro
|
21 |
|
22 |
-
Tested up to: 3.2
|
23 |
Requires at least: 3.1
|
24 |
Requires: WordPress® 3.1+, PHP 5.2.3+
|
25 |
|
@@ -161,6 +161,26 @@ Please visit s2Member.com for [video tutorials](http://www.s2member.com/videos/)
|
|
161 |
|
162 |
== Changelog ==
|
163 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
164 |
= v110710 =
|
165 |
* **(s2Member/s2Member Pro) Bug fix.** Some versions of PHP were generating an error `Warning: call_user_func_array()` after registration. This error was caused by a new static class method introduced in s2Member v110708, which was NOT previously declared `static` explicity. This release of s2Member v110710 corrects this bug and eliminates the error message. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
|
166 |
* **(s2Member) New Feature.** It is now possible to enable/disable s2Member's customization of New User Email notifications. This may be desirable when/if you're using a plugin ( other than s2Member ) to handle this aspect of your installation. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
|
1 |
=== s2Member® ( Membership w/ PayPal® ) ===
|
2 |
|
3 |
+
Version: 110731
|
4 |
+
Stable tag: 110731
|
5 |
Framework: WS-P-110523
|
6 |
|
7 |
SSL Compatible: yes
|
19 |
AliPay® Compatible: w/ s2Member Pro
|
20 |
ccBill® Compatible: w/ s2Member Pro
|
21 |
|
22 |
+
Tested up to: 3.2.1
|
23 |
Requires at least: 3.1
|
24 |
Requires: WordPress® 3.1+, PHP 5.2.3+
|
25 |
|
161 |
|
162 |
== Changelog ==
|
163 |
|
164 |
+
= v110731 =
|
165 |
+
* **(s2Member) Bug fix / Multisite.** In the Multisite (Config) panel, s2Member was not properly displaying the number of Blogs allowed at Level #0, in some cases.
|
166 |
+
* **(s2Member Pro) Update / ClickBank®.** s2Member Pro has been updated to better support ClickBank's policy on Thank-You Pages. s2Member now provides a link on the ClickBank Return-Page where Customers may contact your support department, and a message regarding charges on a Customer's bank statement appearing as `CLKBANK*COM`. This is mandatory for all ClickBank® integrations. ClickBank® will not approve your Products without this information on the Thank-You Page integrated with s2Member. In addition, s2Member now makes it possible to customize your Thank-You Page for ClickBank®. For further details, please check your Dashboard, under: `s2Member -> ClickBank® Options -> Thank-You Page`. If you have attempted to use temporary hacks of your own in order to avoid issues with ClickBank® policy in this regard, we suggest that you remove those hacks, and instead work with the new features introduced in this release of s2Member Pro. If you need assistance, please use the s2Member forums.
|
167 |
+
* **(s2Member Pro) Pro API For Remote Operations.** With s2Member Pro installed, you now have access to the s2Member Pro API For Remote Operations. This is made available for developers that wish to create User/Member accounts dynamically through custom scripts of their own. s2Member's Remote Operations API requires a secret API Key in order to POST authenticated requests to your installation of s2Member. For further details, please check your Dashboard, under: `s2Member -> API Scripting -> Remote Operations API`.
|
168 |
+
* **(s2Member) Compatibility.** In cases where a site owner integrates Amazon® S3 file storage for protected File Downloads, with an invalid Bucket name which contains mixed caSe ( that's a no-no anyway ), s2Member will now convert the Amazon® S3 connection URL to `s3.amazonaws.com/[BUCKET]`, instead of the default `[bucket].s3.amazonaws.com`. This is required for invalid Bucket names which use mixed caSe. The only way for Amazon® S3 communication to work with these invalid Bucket names, is with a sub-folder URL. See docs on [Bucket names](http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?BucketRestrictions.html).
|
169 |
+
* **(s2Member) Feature Improvement.** s2Member's API Tracking Codes are now displayed immediately after checkout in all possible scenarios. This is an improvement over past versions, where s2Member sometimes had to await IPN processing before Tracking Codes integrated with s2Member could be displayed on-site. For further details, please check your Dashboard, under: `s2Member -> API Tracking`.
|
170 |
+
* **(s2Member/s2Member Pro) New Feature / Thank-You Page Templates.** s2Member's Return Page handlers ( aka: Thank-You Page handlers ) have been improved. Instead of using a JavaScript alert immediately after checkout, s2Member now displays all responses with pure HTML. In addition, with s2Member Pro installed ( and only with s2Member Pro installed ), it is now possible to customize the header section ( i.e the top ) of your Thank-You Page from the Dashboard, and/or to create a custom template file inside your active WordPress® theme directory for each Payment Gateway integrated with s2Member ( all optional ). For details on your PayPal Return Page ( aka: Thank-You Page ), please check your Dashboard, under: `s2Member -> PayPal Options -> Auto-Return/PDT Integration -> Auto-Return Page Template`.
|
171 |
+
|
172 |
+
The ability to customize the Return Page is now possible ( for all applicable Payment Gateways ) integrated with s2Member Pro, including: PayPal® Standard, ClickBank®, ccBill®, and AliPay®. Other Payment Gateways, such as: PayPal® Pro, Authorize.Net®, and Google® Checkout do NOT require a Return-Page anyway, so they are NOT applicable in this regard.
|
173 |
+
|
174 |
+
*Please note, this feature improvement should NOT negatively impact any existing installations of s2Member. In other words, you don't need to change anything in your existing installation, unless you want to. Custom Return Page templates are completely optional. This improvement simply makes new things possible in s2Member Pro, and even provides a smoother experience for all Customers completing checkout through the free version of s2Member. If you need to customize s2Member's default Return-Page Template, please upgrade to s2Member Pro, where the tools for this are made available in your Dashboard.*
|
175 |
+
* **(s2Member) New Feature / Login Counter.** Starting with this release, s2Member will automatically monitor the number of times each User/Member logs into your site. This information is made visible to the site owner in the list of Users ( i.e. in the Dashboard ). This information is also used as the basis for a new feature in s2Member Pro, which allows for the configuration of One-Time-Offers, based on the number of previous logins at your site. For further details, please check your Dashboard with s2Member Pro installed, see: `s2Member -> General Options -> One-Time-Offers`.
|
176 |
+
* **(s2Member Pro) Feature Improvement / Success Attribute.** With s2Member Pro installed, it is also possible to completely override the Standard Return-Page handlers with the `success=""` Attribute in your Shortcode. This works with PayPal® Standard integration, and also for AliPay®. New in this release, It is now possible to achieve the same result with ClickBank® and ccBill® too, using the instructions provided in your s2Member options panel, for each respective Gateway. Also, this release of s2Member improves the handling of custom Return URLs.
|
177 |
+
|
178 |
+
In all cases, s2Member will now ALWAYS handle the initial redirection after checkout, where s2Member sets important authorization cookies, and THEN ( if configured to do so ) redirect to your custom URL on success. This prevents issues with registration authorization cookies not being set properly when/if custom Success URLs are used. This was a problematic area in previous releases of s2Member, and this version should resolve those issues; as long as the updated instructions are followed inside your Dashboard. For example, with ClickBank®, please see: `s2Member -> ClickBank® Options -> Thank-You Page -> Thank-You Page Templates` for full details regarding all possible customizations. You will find similar instructions for other Payment Gateways integrated with s2Member.
|
179 |
+
* **(s2Member Pro) New Feature / One-Time-Offers.** With s2Member Pro installed, it is now possible to configure One-Time-Offers ( Upon Login ). This feature allows site owners to display a different page the 1st time a User/Member logs in ( and more ), and/or to create loyaltly rewards/offers for Users/Members who have been very active on their account. For further details, please check your Dashboard with s2Member Pro installed, see: `s2Member -> General Options -> One-Time-Offers`.
|
180 |
+
* **(s2Member) Bug fix. BuddyPress Profile Fields.** s2Member's integration with BuddyPress Profile fields was invalid in cases where public Profiles were being viewed/edited while another User was logged in. s2Member was displaying/populating the current User's Custom Field data in places where it should have been pulling details based on `$bp->displayed_user->id`. This bug has been corrected in this release of s2Member.
|
181 |
+
* **(s2Member/s2Member Pro) Code Restructuring / Security Hardening.** s2Member's core IPN and Return-Page handlers have been reorganized into sub-classes containing conditional phases. This made it possibe to harden s2Member's security in various ways, and also sets the groundwork for new features ( coming soon ). One way in which s2Member's security had been hardended in this release, is that it's now harder, if not impossible, for s2Member to reprocess any IPN and/or Return-Page Data in duplicate. In rare cases where information comes through in duplicate, s2Member will ignore dupes completely, recover gracefully, log important details, and/or display `Page Expired` notifications to possible attackers.
|
182 |
+
* **(s2Member Pro) Bug fix. Authorize.Net® ARB.** s2Member Pro was incorrectly handling scenarios where a Customer was attempting to create an ARB Profile with a credit card that expires before the 2nd payment in the ARB Profile would clear. s2Member Pro always collects the first payment up front, and starts the ARB Profile to handle future payments. In cases where a Customer's card would expire before the second payment is collected, the creation of the ARB Profile would fail on the Authorize.Net® side, and s2Member Pro was not recovering properly. The result is that the Customer was charged for the first payment, and then left with a decline notice on-site ( not good ). In this release, s2Member Pro has been updated to avoid the situation where a Customer may be declined, with the error `The credit card expires before the subscription startDate`. In this scenario, s2Member will now allow the Customer's transaction to go through ( collecting the first payment in real-time ), and allowing the Customer to gain access. In this case, s2Member knows that future payments will fail because the card will expire beforehand, so an EOT Time for the Customer will be set during checkout.
|
183 |
+
|
184 |
= v110710 =
|
185 |
* **(s2Member/s2Member Pro) Bug fix.** Some versions of PHP were generating an error `Warning: call_user_func_array()` after registration. This error was caused by a new static class method introduced in s2Member v110708, which was NOT previously declared `static` explicity. This release of s2Member v110710 corrects this bug and eliminates the error message. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
|
186 |
* **(s2Member) New Feature.** It is now possible to enable/disable s2Member's customization of New User Email notifications. This may be desirable when/if you're using a plugin ( other than s2Member ) to handle this aspect of your installation. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
|
s2member.php
CHANGED
@@ -19,8 +19,8 @@
|
|
19 |
*/
|
20 |
/* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
-
Version:
|
23 |
-
Stable tag:
|
24 |
Framework: WS-P-110523
|
25 |
|
26 |
SSL Compatible: yes
|
@@ -38,7 +38,7 @@ ClickBank® Compatible: w/ s2Member Pro
|
|
38 |
AliPay® Compatible: w/ s2Member Pro
|
39 |
ccBill® Compatible: w/ s2Member Pro
|
40 |
|
41 |
-
Tested up to: 3.2
|
42 |
Requires at least: 3.1
|
43 |
Requires: WordPress® 3.1+, PHP 5.2.3+
|
44 |
|
@@ -72,7 +72,7 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
|
72 |
* @var str
|
73 |
*/
|
74 |
if (!defined ("WS_PLUGIN__S2MEMBER_VERSION"))
|
75 |
-
define ("WS_PLUGIN__S2MEMBER_VERSION", "
|
76 |
/**
|
77 |
* Minimum PHP version required to run s2Member.
|
78 |
*
|
@@ -102,7 +102,7 @@ if (!defined ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION"))
|
|
102 |
* @var str
|
103 |
*/
|
104 |
if (!defined ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
|
105 |
-
define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "
|
106 |
/*
|
107 |
Several compatibility checks.
|
108 |
If all pass, load the s2Member plugin.
|
19 |
*/
|
20 |
/* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
+
Version: 110731
|
23 |
+
Stable tag: 110731
|
24 |
Framework: WS-P-110523
|
25 |
|
26 |
SSL Compatible: yes
|
38 |
AliPay® Compatible: w/ s2Member Pro
|
39 |
ccBill® Compatible: w/ s2Member Pro
|
40 |
|
41 |
+
Tested up to: 3.2.1
|
42 |
Requires at least: 3.1
|
43 |
Requires: WordPress® 3.1+, PHP 5.2.3+
|
44 |
|
72 |
* @var str
|
73 |
*/
|
74 |
if (!defined ("WS_PLUGIN__S2MEMBER_VERSION"))
|
75 |
+
define ("WS_PLUGIN__S2MEMBER_VERSION", "110731");
|
76 |
/**
|
77 |
* Minimum PHP version required to run s2Member.
|
78 |
*
|
102 |
* @var str
|
103 |
*/
|
104 |
if (!defined ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
|
105 |
+
define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "110731");
|
106 |
/*
|
107 |
Several compatibility checks.
|
108 |
If all pass, load the s2Member plugin.
|