Version Description
= v120514 = Maintenance release. Upgrade immediately.
Download this release
Release Info
Developer | PriMoThemes |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 120514 |
Comparing to | |
See all releases |
Code changes from version 120309 to 120514
- includes/classes/paypal-utilities.inc.php +324 -181
- includes/classes/utils-urls.inc.php +103 -99
- includes/functions/api-functions.inc.php +2 -2
- includes/hooks.inc.php +131 -130
- includes/menu-pages/code-samples/jwplayer-standard-mp4.x-php +15 -8
- includes/menu-pages/code-samples/jwplayer-streaming-mp4-sca.x-php +10 -3
- includes/menu-pages/code-samples/jwplayer-streaming-mp4-webm.x-php +12 -4
- includes/menu-pages/code-samples/jwplayer-streaming-mp4.x-php +10 -3
- includes/menu-pages/code-samples/s2member-paid-registration-time-examples.x-php +5 -2
- includes/menu-pages/down-ops.inc.php +3 -2
- includes/menu-pages/menu-pages-s-min.js +1 -1
- includes/menu-pages/menu-pages-s.js +10 -13
- includes/menu-pages/paypal-ops.inc.php +633 -539
- includes/syscon.inc.php +19 -22
- includes/translations/s2member.pot +402 -344
- readme.txt +14 -5
- s2member.php +6 -6
includes/classes/paypal-utilities.inc.php
CHANGED
@@ -14,10 +14,10 @@
|
|
14 |
* @package s2Member\PayPal
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
-
if
|
18 |
-
exit
|
19 |
/**/
|
20 |
-
if
|
21 |
{
|
22 |
/**
|
23 |
* PayPal® utilities.
|
@@ -35,20 +35,20 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
35 |
*
|
36 |
* @return array|bool An array of verified ``$_POST`` or ``$_REQUEST`` variables, else false.
|
37 |
*/
|
38 |
-
public static function paypal_postvars
|
39 |
{
|
40 |
-
eval
|
41 |
-
do_action
|
42 |
-
unset
|
43 |
/*
|
44 |
Custom conditionals can be applied by filters.
|
45 |
*/
|
46 |
-
eval
|
47 |
-
if
|
48 |
{
|
49 |
-
unset
|
50 |
/**/
|
51 |
-
if
|
52 |
{
|
53 |
$postback["tx"] = $_GET["tx"];
|
54 |
$postback["cmd"] = "_notify-synch";
|
@@ -56,53 +56,53 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
56 |
/**/
|
57 |
$endpoint = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com";
|
58 |
/**/
|
59 |
-
if
|
60 |
{
|
61 |
-
foreach
|
62 |
{
|
63 |
-
list
|
64 |
-
if
|
65 |
-
$postvars[$key] = trim
|
66 |
}
|
67 |
/**/
|
68 |
-
return apply_filters
|
69 |
}
|
70 |
else /* Nope. */
|
71 |
-
|
72 |
}
|
73 |
-
else if
|
74 |
{
|
75 |
-
foreach
|
76 |
-
if
|
77 |
-
unset
|
78 |
/**/
|
79 |
$postback = $postvars; /* Copy. */
|
80 |
$postback["cmd"] = "_notify-validate";
|
81 |
/**/
|
82 |
-
$postvars = c_ws_plugin__s2member_utils_strings::trim_deep
|
83 |
/**/
|
84 |
$endpoint = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com";
|
85 |
/**/
|
86 |
-
if
|
87 |
-
return apply_filters
|
88 |
/**/
|
89 |
-
else if
|
90 |
-
return apply_filters
|
91 |
/**/
|
92 |
-
else if
|
93 |
-
return apply_filters
|
94 |
/**/
|
95 |
else /* Nope. */
|
96 |
-
|
97 |
}
|
98 |
else /* Nope. */
|
99 |
-
|
100 |
}
|
101 |
else /* Else a custom conditional has been applied by Filters. */
|
102 |
{
|
103 |
-
unset
|
104 |
/**/
|
105 |
-
return apply_filters
|
106 |
}
|
107 |
}
|
108 |
/**
|
@@ -113,21 +113,21 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
113 |
*
|
114 |
* @return str A Proxy Key. It's an MD5 Hash, 32 chars, URL-safe.
|
115 |
*/
|
116 |
-
public static function paypal_proxy_key_gen
|
117 |
{
|
118 |
global $current_site, $current_blog; /* Multisite Networking. */
|
119 |
/**/
|
120 |
-
eval
|
121 |
-
do_action
|
122 |
-
unset
|
123 |
/**/
|
124 |
-
if
|
125 |
-
$key = md5
|
126 |
/**/
|
127 |
else /* Else it's a standard Proxy Key; not on a Multisite Network, or not on the Main Site anyway. */
|
128 |
-
|
129 |
/**/
|
130 |
-
return apply_filters
|
131 |
}
|
132 |
/**
|
133 |
* Calls upon the PayPal® API, and returns the response.
|
@@ -141,60 +141,60 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
141 |
* @todo Optimize this routine with ``empty()`` and ``isset()``.
|
142 |
* @todo Possibly integrate this API: {@link http://msdn.microsoft.com/en-us/library/ff512417.aspx}.
|
143 |
*/
|
144 |
-
public static function paypal_api_response
|
145 |
{
|
146 |
global /* For Multisite support. */ $current_site, $current_blog;
|
147 |
/**/
|
148 |
-
eval
|
149 |
-
do_action
|
150 |
-
unset /* Unset defined __refs, __v. */
|
151 |
/**/
|
152 |
-
$url = "https://"
|
153 |
/**/
|
154 |
-
$post_vars = apply_filters
|
155 |
-
$post_vars = (is_array
|
156 |
/**/
|
157 |
$post_vars["VERSION"] = /* Configure the PayPal® API version. */ "71.0";
|
158 |
$post_vars["USER"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"];
|
159 |
$post_vars["PWD"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"];
|
160 |
$post_vars["SIGNATURE"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"];
|
161 |
/**/
|
162 |
-
$input_time = /* Record input/nvp for logging. */ date
|
163 |
/**/
|
164 |
-
$nvp = trim
|
165 |
/**/
|
166 |
-
$output_time = /* Now record after output time. */ date
|
167 |
/**/
|
168 |
-
wp_parse_str /* Parse NVP response. */
|
169 |
-
$response = c_ws_plugin__s2member_utils_strings::trim_deep
|
170 |
/**/
|
171 |
-
if
|
172 |
{
|
173 |
-
if
|
174 |
/* translators: Exclude `%2$s` and `%3$s`. These are English details returned by PayPal®. Replace `%2$s` and `%3$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_api_response`. */
|
175 |
-
$response["__error"] = sprintf
|
176 |
/**/
|
177 |
else /* Else, generate an error messsage - so something is reported back to the Customer. */
|
178 |
-
|
179 |
}
|
180 |
/**/
|
181 |
-
$logv = c_ws_plugin__s2member_utilities::ver_details
|
182 |
-
$logm = c_ws_plugin__s2member_utilities::mem_details
|
183 |
-
$log4 = $_SERVER["HTTP_HOST"]
|
184 |
-
$log4 = (is_multisite
|
185 |
-
$log2 = (is_multisite
|
186 |
/**/
|
187 |
-
if
|
188 |
-
$post_vars["ACCT"] = str_repeat
|
189 |
/**/
|
190 |
-
if
|
191 |
-
if
|
192 |
-
if
|
193 |
-
if
|
194 |
-
if
|
195 |
-
file_put_contents
|
196 |
/**/
|
197 |
-
return apply_filters
|
198 |
}
|
199 |
/**
|
200 |
* A sort of callback function that Filters PayPal® responses.
|
@@ -207,27 +207,130 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
207 |
* @param array $response Expects an array of response variables returned by the PayPal® API.
|
208 |
* @return array An array of variables returned by the PayPal® API, after ``$response["__error"]`` is Filtered.
|
209 |
*/
|
210 |
-
public static function _paypal_api_response_filters
|
211 |
{
|
212 |
-
eval
|
213 |
-
do_action
|
214 |
-
unset
|
215 |
/**/
|
216 |
-
if
|
217 |
{
|
218 |
-
if
|
219 |
-
$response["__error"] = sprintf
|
220 |
/**/
|
221 |
-
else if
|
222 |
-
$response["__error"] = sprintf
|
223 |
/**/
|
224 |
-
else if
|
225 |
-
$response["__error"] = sprintf
|
226 |
}
|
227 |
/**/
|
228 |
return $response; /* Filters already applied with: ``ws_plugin__s2member_paypal_api_response``. */
|
229 |
}
|
230 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
* Converts a term `D|W|M|Y` into PayPal® Pro format.
|
232 |
*
|
233 |
* @package s2Member\PayPal
|
@@ -236,17 +339,48 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
236 |
* @param str $term Expects one of `D|W|M|Y`.
|
237 |
* @return bool|str A full singular description of the term *( i.e. `Day|Week|Month|Year` )*, else false.
|
238 |
*/
|
239 |
-
public static function paypal_pro_term
|
240 |
{
|
241 |
-
eval
|
242 |
-
do_action
|
243 |
-
unset
|
244 |
/**/
|
245 |
-
$paypal_pro_terms = array
|
246 |
/**/
|
247 |
-
$pro_term = (!empty
|
248 |
/**/
|
249 |
-
return apply_filters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
}
|
251 |
/**
|
252 |
* Converts a term `Day|Week|Month|Year` into PayPal® Standard format.
|
@@ -257,17 +391,17 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
257 |
* @param str $term Expects one of `Day|Week|Month|Year`.
|
258 |
* @return bool|str A term code *( i.e. `D|W|M|Y` )*, else false.
|
259 |
*/
|
260 |
-
public static function paypal_std_term
|
261 |
{
|
262 |
-
eval
|
263 |
-
do_action
|
264 |
-
unset
|
265 |
/**/
|
266 |
-
$paypal_std_terms = array
|
267 |
/**/
|
268 |
-
$std_term = (!empty
|
269 |
/**/
|
270 |
-
return apply_filters
|
271 |
}
|
272 |
/**
|
273 |
* Get `subscr_id` from either an array with `recurring_payment_id|subscr_id`, or use an existing string.
|
@@ -278,22 +412,22 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
278 |
* @param str|array $array_or_string Either an array of PayPal® post vars, or a string.
|
279 |
* @return str|bool A `subscr_id` string if non-empty, else false.
|
280 |
*/
|
281 |
-
public static function paypal_pro_subscr_id
|
282 |
{
|
283 |
-
eval
|
284 |
-
do_action
|
285 |
-
unset
|
286 |
/**/
|
287 |
-
if
|
288 |
-
$subscr_id = trim
|
289 |
/**/
|
290 |
-
else if
|
291 |
-
$subscr_id = trim
|
292 |
/**/
|
293 |
-
else if
|
294 |
-
$subscr_id = trim
|
295 |
/**/
|
296 |
-
return apply_filters
|
297 |
}
|
298 |
/**
|
299 |
* Get `item_number` from either an array with `PROFILEREFERENCE|rp_invoice_id|item_number1|item_number`, or use an existing string.
|
@@ -305,31 +439,34 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
305 |
* If it's a string, we make sure it is a valid `level:ccaps:eotper` or `sp:ids:expiration` combination.
|
306 |
* @return str|bool An `item_number` string if non-empty, else false.
|
307 |
*/
|
308 |
-
public static function paypal_pro_item_number
|
309 |
{
|
310 |
-
eval
|
311 |
-
do_action
|
312 |
-
unset
|
313 |
/**/
|
314 |
-
if
|
315 |
-
|
316 |
/**/
|
317 |
-
|
318 |
-
$_item_number = trim ($array["
|
319 |
/**/
|
320 |
-
else if
|
321 |
-
$_item_number = trim
|
322 |
/**/
|
323 |
-
else if
|
324 |
-
$_item_number = trim
|
325 |
/**/
|
326 |
-
if
|
|
|
|
|
|
|
327 |
$item_number = $_item_number;
|
328 |
/**/
|
329 |
-
else if
|
330 |
$item_number = $_item_number;
|
331 |
/**/
|
332 |
-
return apply_filters
|
333 |
}
|
334 |
/**
|
335 |
* Get `item_name` from either an array with `product_name|item_name1|item_name`, or use an existing string.
|
@@ -340,25 +477,25 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
340 |
* @param str|array $array_or_string Either an array of PayPal® post vars, or a string.
|
341 |
* @return str|bool An `item_name` string if non-empty, else false.
|
342 |
*/
|
343 |
-
public static function paypal_pro_item_name
|
344 |
{
|
345 |
-
eval
|
346 |
-
do_action
|
347 |
-
unset
|
348 |
/**/
|
349 |
-
if
|
350 |
-
$item_name = trim
|
351 |
/**/
|
352 |
-
else if
|
353 |
-
$item_name = trim
|
354 |
/**/
|
355 |
-
else if
|
356 |
-
$item_name = trim
|
357 |
/**/
|
358 |
-
else if
|
359 |
-
$item_name = trim
|
360 |
/**/
|
361 |
-
return apply_filters
|
362 |
}
|
363 |
/**
|
364 |
* Get `period1` from either an array with `PROFILEREFERENCE|rp_invoice_id|period1`, or use an existing string.
|
@@ -374,43 +511,46 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
374 |
* @param str $default Optional. Value if unavailable. Defaults to `0 D`.
|
375 |
* @return str A `period1` string if possible, or defaults to `0 D`.
|
376 |
*/
|
377 |
-
public static function paypal_pro_period1
|
378 |
{
|
379 |
-
eval
|
380 |
-
do_action
|
381 |
-
unset
|
|
|
|
|
|
|
382 |
/**/
|
383 |
-
if
|
384 |
{
|
385 |
-
list
|
386 |
-
list
|
387 |
}
|
388 |
-
else if
|
389 |
-
$_period1 = trim
|
390 |
/**/
|
391 |
-
else if
|
392 |
-
$_period1 = trim
|
393 |
/**/
|
394 |
-
if
|
395 |
{
|
396 |
-
list
|
397 |
/**/
|
398 |
-
if
|
399 |
-
if
|
400 |
-
eval
|
401 |
/**/
|
402 |
-
if
|
403 |
-
$span = c_ws_plugin__s2member_paypal_utilities::paypal_std_term
|
404 |
/**/
|
405 |
-
$span = (preg_match
|
406 |
-
$num = ($span && is_numeric
|
407 |
/**/
|
408 |
-
$period1 = ($num && $span) ? $num
|
409 |
/**/
|
410 |
-
return apply_filters
|
411 |
}
|
412 |
else /* Default. */
|
413 |
-
|
414 |
}
|
415 |
/**
|
416 |
* Get `period3` from either an array with `PROFILEREFERENCE|rp_invoice_id|period3`, or use an existing string.
|
@@ -427,43 +567,46 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_utilities"))
|
|
427 |
* @param str $default Optional. Value if unavailable. Defaults to `1 D`.
|
428 |
* @return str A `period3` string if possible, or defaults to `1 D`.
|
429 |
*/
|
430 |
-
public static function paypal_pro_period3
|
431 |
{
|
432 |
-
eval
|
433 |
-
do_action
|
434 |
-
unset
|
|
|
|
|
|
|
435 |
/**/
|
436 |
-
if
|
437 |
{
|
438 |
-
list
|
439 |
-
list
|
440 |
}
|
441 |
-
else if
|
442 |
-
$_period3 = trim
|
443 |
/**/
|
444 |
-
else if
|
445 |
-
$_period3 = trim
|
446 |
/**/
|
447 |
-
if
|
448 |
{
|
449 |
-
list
|
450 |
/**/
|
451 |
-
if
|
452 |
-
if
|
453 |
-
eval
|
454 |
/**/
|
455 |
-
if
|
456 |
-
$span = c_ws_plugin__s2member_paypal_utilities::paypal_std_term
|
457 |
/**/
|
458 |
-
$span = (preg_match
|
459 |
-
$num = ($span && is_numeric
|
460 |
/**/
|
461 |
-
$period3 = ($num && $span) ? $num
|
462 |
/**/
|
463 |
-
return apply_filters
|
464 |
}
|
465 |
else /* Default. */
|
466 |
-
|
467 |
}
|
468 |
}
|
469 |
}
|
14 |
* @package s2Member\PayPal
|
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_utilities"))
|
21 |
{
|
22 |
/**
|
23 |
* PayPal® utilities.
|
35 |
*
|
36 |
* @return array|bool An array of verified ``$_POST`` or ``$_REQUEST`` variables, else false.
|
37 |
*/
|
38 |
+
public static function paypal_postvars()
|
39 |
{
|
40 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
41 |
+
do_action("ws_plugin__s2member_before_paypal_postvars", get_defined_vars());
|
42 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
43 |
/*
|
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 |
/**/
|
51 |
+
if(!empty($_GET["tx"]) && empty($_GET["s2member_paypal_proxy"]))
|
52 |
{
|
53 |
$postback["tx"] = $_GET["tx"];
|
54 |
$postback["cmd"] = "_notify-synch";
|
56 |
/**/
|
57 |
$endpoint = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com";
|
58 |
/**/
|
59 |
+
if(preg_match("/^SUCCESS/i", ($response = trim(c_ws_plugin__s2member_utils_urls::remote("https://".$endpoint."/cgi-bin/webscr", $postback, array("timeout" => 20))))))
|
60 |
{
|
61 |
+
foreach(preg_split("/[\r\n]+/", preg_replace("/^SUCCESS/i", "", $response)) as $varline)
|
62 |
{
|
63 |
+
list($key, $value) = preg_split("/\=/", $varline, 2);
|
64 |
+
if(strlen($key = trim($key)) && strlen($value = trim($value)))
|
65 |
+
$postvars[$key] = trim(stripslashes(urldecode($value)));
|
66 |
}
|
67 |
/**/
|
68 |
+
return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
|
69 |
}
|
70 |
else /* Nope. */
|
71 |
+
return false;
|
72 |
}
|
73 |
+
else if(!empty($_REQUEST) && is_array($postvars = stripslashes_deep($_REQUEST)))
|
74 |
{
|
75 |
+
foreach($postvars as $key => $value)
|
76 |
+
if(preg_match("/^s2member_/", $key))
|
77 |
+
unset($postvars[$key]);
|
78 |
/**/
|
79 |
$postback = $postvars; /* Copy. */
|
80 |
$postback["cmd"] = "_notify-validate";
|
81 |
/**/
|
82 |
+
$postvars = c_ws_plugin__s2member_utils_strings::trim_deep($postvars);
|
83 |
/**/
|
84 |
$endpoint = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com";
|
85 |
/**/
|
86 |
+
if(!empty($_GET["s2member_paypal_proxy"]) && !empty($_GET["s2member_paypal_proxy_verification"]) && $_GET["s2member_paypal_proxy_verification"] === c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen())
|
87 |
+
return apply_filters("ws_plugin__s2member_paypal_postvars", array_merge($postvars, array("proxy_verified" => $_GET["s2member_paypal_proxy"])), get_defined_vars());
|
88 |
/**/
|
89 |
+
else if(empty($_POST) && !empty($_GET["s2member_paypal_proxy"]) && !empty($_GET["s2member_paypal_proxy_verification"]) && c_ws_plugin__s2member_utils_urls::s2member_sig_ok($_SERVER["REQUEST_URI"], false, false, "s2member_paypal_proxy_verification"))
|
90 |
+
return apply_filters("ws_plugin__s2member_paypal_postvars", array_merge($postvars, array("proxy_verified" => $_GET["s2member_paypal_proxy"])), get_defined_vars());
|
91 |
/**/
|
92 |
+
else if(trim(strtolower(c_ws_plugin__s2member_utils_urls::remote("https://".$endpoint."/cgi-bin/webscr", $postback, array("timeout" => 20)))) === "verified")
|
93 |
+
return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
|
94 |
/**/
|
95 |
else /* Nope. */
|
96 |
+
return false;
|
97 |
}
|
98 |
else /* Nope. */
|
99 |
+
return false;
|
100 |
}
|
101 |
else /* Else a custom conditional has been applied by Filters. */
|
102 |
{
|
103 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
104 |
/**/
|
105 |
+
return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
|
106 |
}
|
107 |
}
|
108 |
/**
|
113 |
*
|
114 |
* @return str A Proxy Key. It's an MD5 Hash, 32 chars, URL-safe.
|
115 |
*/
|
116 |
+
public static function paypal_proxy_key_gen() /* Generate Key. */
|
117 |
{
|
118 |
global $current_site, $current_blog; /* Multisite Networking. */
|
119 |
/**/
|
120 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
121 |
+
do_action("ws_plugin__s2member_before_paypal_proxy_key_gen", get_defined_vars());
|
122 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
123 |
/**/
|
124 |
+
if(is_multisite() && !is_main_site())
|
125 |
+
$key = md5(c_ws_plugin__s2member_utils_encryption::xencrypt($current_blog->domain.$current_blog->path, false, false));
|
126 |
/**/
|
127 |
else /* Else it's a standard Proxy Key; not on a Multisite Network, or not on the Main Site anyway. */
|
128 |
+
$key = md5(c_ws_plugin__s2member_utils_encryption::xencrypt(preg_replace("/\:[0-9]+$/", "", $_SERVER["HTTP_HOST"]), false, false));
|
129 |
/**/
|
130 |
+
return apply_filters("ws_plugin__s2member_paypal_proxy_key_gen", $key, get_defined_vars());
|
131 |
}
|
132 |
/**
|
133 |
* Calls upon the PayPal® API, and returns the response.
|
141 |
* @todo Optimize this routine with ``empty()`` and ``isset()``.
|
142 |
* @todo Possibly integrate this API: {@link http://msdn.microsoft.com/en-us/library/ff512417.aspx}.
|
143 |
*/
|
144 |
+
public static function paypal_api_response($post_vars = FALSE)
|
145 |
{
|
146 |
global /* For Multisite support. */ $current_site, $current_blog;
|
147 |
/**/
|
148 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
149 |
+
do_action("ws_plugin__s2member_before_paypal_api_response", get_defined_vars());
|
150 |
+
unset /* Unset defined __refs, __v. */($__refs, $__v);
|
151 |
/**/
|
152 |
+
$url = "https://".(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "api-3t.sandbox.paypal.com" : "api-3t.paypal.com")."/nvp";
|
153 |
/**/
|
154 |
+
$post_vars = apply_filters("ws_plugin__s2member_paypal_api_post_vars", $post_vars, get_defined_vars());
|
155 |
+
$post_vars = (is_array($post_vars)) ? $post_vars : array();
|
156 |
/**/
|
157 |
$post_vars["VERSION"] = /* Configure the PayPal® API version. */ "71.0";
|
158 |
$post_vars["USER"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"];
|
159 |
$post_vars["PWD"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"];
|
160 |
$post_vars["SIGNATURE"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"];
|
161 |
/**/
|
162 |
+
$input_time = /* Record input/nvp for logging. */ date("D M j, Y g:i:s a T");
|
163 |
/**/
|
164 |
+
$nvp = trim(c_ws_plugin__s2member_utils_urls::remote($url, $post_vars, array("timeout" => 20)));
|
165 |
/**/
|
166 |
+
$output_time = /* Now record after output time. */ date("D M j, Y g:i:s a T");
|
167 |
/**/
|
168 |
+
wp_parse_str /* Parse NVP response. */($nvp, $response);
|
169 |
+
$response = c_ws_plugin__s2member_utils_strings::trim_deep($response);
|
170 |
/**/
|
171 |
+
if(!$response["ACK"] || !preg_match("/^(Success|SuccessWithWarning)$/i", $response["ACK"]))
|
172 |
{
|
173 |
+
if(strlen($response["L_ERRORCODE0"]) || $response["L_SHORTMESSAGE0"] || $response["L_LONGMESSAGE0"])
|
174 |
/* translators: Exclude `%2$s` and `%3$s`. These are English details returned by PayPal®. Replace `%2$s` and `%3$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_api_response`. */
|
175 |
+
$response["__error"] = sprintf(_x('Error #%1$s. %2$s. %3$s.', "s2member-front", "s2member"), $response["L_ERRORCODE0"], rtrim($response["L_SHORTMESSAGE0"], "."), rtrim($response["L_LONGMESSAGE0"], "."));
|
176 |
/**/
|
177 |
else /* Else, generate an error messsage - so something is reported back to the Customer. */
|
178 |
+
$response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
|
179 |
}
|
180 |
/**/
|
181 |
+
$logv = c_ws_plugin__s2member_utilities::ver_details();
|
182 |
+
$logm = c_ws_plugin__s2member_utilities::mem_details();
|
183 |
+
$log4 = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]."\nUser-Agent: ".$_SERVER["HTTP_USER_AGENT"];
|
184 |
+
$log4 = (is_multisite() && !is_main_site()) ? ($_log4 = $current_blog->domain.$current_blog->path)."\n".$log4 : $log4;
|
185 |
+
$log2 = (is_multisite() && !is_main_site()) ? "paypal-api-4-".trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-").".log" : "paypal-api.log";
|
186 |
/**/
|
187 |
+
if(isset($post_vars["ACCT"]) && strlen($post_vars["ACCT"]) > 4)
|
188 |
+
$post_vars["ACCT"] = str_repeat("*", strlen($post_vars["ACCT"]) - 4).substr($post_vars["ACCT"], -4);
|
189 |
/**/
|
190 |
+
if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
|
191 |
+
if(is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
|
192 |
+
if(is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files())
|
193 |
+
if(($log = "-------- Input vars: ( ".$input_time." ) --------\n".var_export($post_vars, true)."\n"))
|
194 |
+
if(($log .= "-------- Output string/vars: ( ".$output_time." ) --------\n".$nvp."\n".var_export($response, true)))
|
195 |
+
file_put_contents($logs_dir."/".$log2, $logv."\n".$logm."\n".$log4."\n".$log."\n\n", FILE_APPEND);
|
196 |
/**/
|
197 |
+
return apply_filters("ws_plugin__s2member_paypal_api_response", c_ws_plugin__s2member_paypal_utilities::_paypal_api_response_filters($response), get_defined_vars());
|
198 |
}
|
199 |
/**
|
200 |
* A sort of callback function that Filters PayPal® responses.
|
207 |
* @param array $response Expects an array of response variables returned by the PayPal® API.
|
208 |
* @return array An array of variables returned by the PayPal® API, after ``$response["__error"]`` is Filtered.
|
209 |
*/
|
210 |
+
public static function _paypal_api_response_filters($response = FALSE)
|
211 |
{
|
212 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
213 |
+
do_action("_ws_plugin__s2member_before_paypal_api_response_filters", get_defined_vars());
|
214 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
215 |
/**/
|
216 |
+
if(!empty($response["__error"]) && !empty($response["L_ERRORCODE0"]))
|
217 |
{
|
218 |
+
if((int)$response["L_ERRORCODE0"] === 10422)
|
219 |
+
$response["__error"] = sprintf(_x("Error #%s. Transaction declined. Please use an alternate funding source.", "s2member-front", "s2member"), $response["L_ERRORCODE0"]);
|
220 |
/**/
|
221 |
+
else if((int)$response["L_ERRORCODE0"] === 10435)
|
222 |
+
$response["__error"] = sprintf(_x("Error #%s. Transaction declined. Express Checkout was NOT confirmed.", "s2member-front", "s2member"), $response["L_ERRORCODE0"]);
|
223 |
/**/
|
224 |
+
else if((int)$response["L_ERRORCODE0"] === 10417)
|
225 |
+
$response["__error"] = sprintf(_x("Error #%s. Transaction declined. Please use an alternate funding source.", "s2member-front", "s2member"), $response["L_ERRORCODE0"]);
|
226 |
}
|
227 |
/**/
|
228 |
return $response; /* Filters already applied with: ``ws_plugin__s2member_paypal_api_response``. */
|
229 |
}
|
230 |
/**
|
231 |
+
* Calls upon the PayPal® PayFlow API, and returns the response.
|
232 |
+
*
|
233 |
+
* @package s2Member\PayPal
|
234 |
+
* @since 120514
|
235 |
+
*
|
236 |
+
* @param array $post_vars An array of variables to send through the PayPal® PayFlow API call.
|
237 |
+
* @return array An array of variables returned by the PayPal® PayFlow API.
|
238 |
+
*/
|
239 |
+
public static function paypal_payflow_api_response($post_vars = FALSE)
|
240 |
+
{
|
241 |
+
global /* For Multisite support. */ $current_site, $current_blog;
|
242 |
+
/**/
|
243 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
244 |
+
do_action("ws_plugin__s2member_before_paypal_payflow_api_response", get_defined_vars());
|
245 |
+
unset /* Unset defined __refs, __v. */($__refs, $__v);
|
246 |
+
/**/
|
247 |
+
$url = "https://".(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "pilot-payflowpro.paypal.com" : "payflowpro.paypal.com");
|
248 |
+
/**/
|
249 |
+
$post_vars = apply_filters("ws_plugin__s2member_paypal_payflow_api_post_vars", $post_vars, get_defined_vars());
|
250 |
+
$post_vars = (is_array($post_vars)) ? $post_vars : array();
|
251 |
+
/**/
|
252 |
+
$post_vars["VERBOSITY"] = "HIGH";
|
253 |
+
$post_vars["USER"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_username"];
|
254 |
+
$post_vars["PARTNER"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_partner"];
|
255 |
+
$post_vars["VENDOR"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_vendor"];
|
256 |
+
$post_vars["PWD"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_password"];
|
257 |
+
/**/
|
258 |
+
$input_time = /* Record input/nvp for logging. */ date("D M j, Y g:i:s a T");
|
259 |
+
/**/
|
260 |
+
$nvp = trim(c_ws_plugin__s2member_utils_urls::remote($url, $post_vars, array("timeout" => 20)));
|
261 |
+
/**/
|
262 |
+
$output_time = /* Now record after output time. */ date("D M j, Y g:i:s a T");
|
263 |
+
/**/
|
264 |
+
wp_parse_str /* Parse NVP response. */($nvp, $response);
|
265 |
+
$response = c_ws_plugin__s2member_utils_strings::trim_deep($response);
|
266 |
+
/**/
|
267 |
+
if($response["RESULT"] !== "0")
|
268 |
+
{
|
269 |
+
if(strlen($response["RESPMSG"]))
|
270 |
+
/* translators: Exclude `%2$s`. These are English details returned by PayPal®. Replace `%2$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_payflow_api_response`. */
|
271 |
+
$response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["RESULT"], rtrim($response["RESPMSG"], "."));
|
272 |
+
/**/
|
273 |
+
else $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
|
274 |
+
}
|
275 |
+
else if(isset($response["TRXRESULT"]) && $response["TRXRESULT"] !== "0")
|
276 |
+
{
|
277 |
+
if(strlen($response["TRXRESPMSG"]))
|
278 |
+
/* translators: Exclude `%2$s`. These are English details returned by PayPal®. Replace `%2$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_payflow_api_response`. */
|
279 |
+
$response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["TRXRESULT"], rtrim($response["TRXRESPMSG"], "."));
|
280 |
+
/**/
|
281 |
+
else $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
|
282 |
+
}
|
283 |
+
/**/
|
284 |
+
$logv = c_ws_plugin__s2member_utilities::ver_details();
|
285 |
+
$logm = c_ws_plugin__s2member_utilities::mem_details();
|
286 |
+
$log4 = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]."\nUser-Agent: ".$_SERVER["HTTP_USER_AGENT"];
|
287 |
+
$log4 = (is_multisite() && !is_main_site()) ? ($_log4 = $current_blog->domain.$current_blog->path)."\n".$log4 : $log4;
|
288 |
+
$log2 = (is_multisite() && !is_main_site()) ? "paypal-payflow-api-4-".trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-").".log" : "paypal-payflow-api.log";
|
289 |
+
/**/
|
290 |
+
if(isset($post_vars["ACCT"]) && strlen($post_vars["ACCT"]) > 4)
|
291 |
+
$post_vars["ACCT"] = str_repeat("*", strlen($post_vars["ACCT"]) - 4).substr($post_vars["ACCT"], -4);
|
292 |
+
/**/
|
293 |
+
if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
|
294 |
+
if(is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
|
295 |
+
if(is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files())
|
296 |
+
if(($log = "-------- Input vars: ( ".$input_time." ) --------\n".var_export($post_vars, true)."\n"))
|
297 |
+
if(($log .= "-------- Output string/vars: ( ".$output_time." ) --------\n".$nvp."\n".var_export($response, true)))
|
298 |
+
file_put_contents($logs_dir."/".$log2, $logv."\n".$logm."\n".$log4."\n".$log."\n\n", FILE_APPEND);
|
299 |
+
/**/
|
300 |
+
return apply_filters("ws_plugin__s2member_paypal_payflow_api_response", c_ws_plugin__s2member_paypal_utilities::_paypal_payflow_api_response_filters($response), get_defined_vars());
|
301 |
+
}
|
302 |
+
/**
|
303 |
+
* A sort of callback function that Filters Payflow® responses.
|
304 |
+
*
|
305 |
+
* Provides alternative explanations in some cases that require special attention.
|
306 |
+
*
|
307 |
+
* @package s2Member\PayPal
|
308 |
+
* @since 120514
|
309 |
+
*
|
310 |
+
* @param array $response Expects an array of response variables returned by the Payflow® API.
|
311 |
+
* @return array An array of variables returned by the Payflow® API, after ``$response["__error"]`` is Filtered.
|
312 |
+
*/
|
313 |
+
public static function _paypal_payflow_api_response_filters($response = FALSE)
|
314 |
+
{
|
315 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
316 |
+
do_action("_ws_plugin__s2member_before_paypal_payflow_api_response_filters", get_defined_vars());
|
317 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
318 |
+
/**/
|
319 |
+
if(!empty($response["__error"]) && !empty($response["L_ERRORCODE0"]))
|
320 |
+
{
|
321 |
+
if((int)$response["L_ERRORCODE0"] === 10422)
|
322 |
+
$response["__error"] = sprintf(_x("Error #%s. Transaction declined. Please use an alternate funding source.", "s2member-front", "s2member"), $response["L_ERRORCODE0"]);
|
323 |
+
/**/
|
324 |
+
else if((int)$response["L_ERRORCODE0"] === 10435)
|
325 |
+
$response["__error"] = sprintf(_x("Error #%s. Transaction declined. Express Checkout was NOT confirmed.", "s2member-front", "s2member"), $response["L_ERRORCODE0"]);
|
326 |
+
/**/
|
327 |
+
else if((int)$response["L_ERRORCODE0"] === 10417)
|
328 |
+
$response["__error"] = sprintf(_x("Error #%s. Transaction declined. Please use an alternate funding source.", "s2member-front", "s2member"), $response["L_ERRORCODE0"]);
|
329 |
+
}
|
330 |
+
/**/
|
331 |
+
return $response; /* Filters already applied with: ``ws_plugin__s2member_paypal_payflow_api_response``. */
|
332 |
+
}
|
333 |
+
/**
|
334 |
* Converts a term `D|W|M|Y` into PayPal® Pro format.
|
335 |
*
|
336 |
* @package s2Member\PayPal
|
339 |
* @param str $term Expects one of `D|W|M|Y`.
|
340 |
* @return bool|str A full singular description of the term *( i.e. `Day|Week|Month|Year` )*, else false.
|
341 |
*/
|
342 |
+
public static function paypal_pro_term($term = FALSE)
|
343 |
{
|
344 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
345 |
+
do_action("ws_plugin__s2member_before_paypal_pro_term", get_defined_vars());
|
346 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
347 |
/**/
|
348 |
+
$paypal_pro_terms = array("D" => "Day", "W" => "Week", "M" => "Month", "Y" => "Year");
|
349 |
/**/
|
350 |
+
$pro_term = (!empty($paypal_pro_terms[strtoupper($term)])) ? $paypal_pro_terms[strtoupper($term)] : false;
|
351 |
/**/
|
352 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_term", $pro_term, get_defined_vars());
|
353 |
+
}
|
354 |
+
/**
|
355 |
+
* Converts a term `D|W|M|Y` into Payflow® format.
|
356 |
+
*
|
357 |
+
* @package s2Member\PayPal
|
358 |
+
* @since 120514
|
359 |
+
*
|
360 |
+
* @param str $term Expects one of `D|W|M|Y`.
|
361 |
+
* @param str $period Expects a numeric value.
|
362 |
+
* @return bool|str A full singular description of the term *( i.e. `DAY|WEEK|BIWK|MONT|QTER|YEAR` )*, else false.
|
363 |
+
*
|
364 |
+
* @note Payflow® unfortunately does NOT support bi-monthly billing.
|
365 |
+
* It DOES support semi-monthly billing, but that can be confusing for customers.
|
366 |
+
*/
|
367 |
+
public static function paypal_payflow_term($term = FALSE, $period = FALSE)
|
368 |
+
{
|
369 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
370 |
+
do_action("ws_plugin__s2member_before_paypal_payflow_term", get_defined_vars());
|
371 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
372 |
+
/**/
|
373 |
+
$paypal_payflow_terms = array("D" => "DAY", "W" => "WEEK", "M" => "MONT", "Y" => "YEAR");
|
374 |
+
/**/
|
375 |
+
$payflow_term = (!empty($paypal_payflow_terms[strtoupper($term)])) ? $paypal_payflow_terms[strtoupper($term)] : false;
|
376 |
+
/**/
|
377 |
+
if($payflow_term === "WEEK" && $period === "2")
|
378 |
+
$payflow_term = "BIWK";
|
379 |
+
/**/
|
380 |
+
else if($payflow_term === "MONT" && $period === "3")
|
381 |
+
$payflow_term = "QTER";
|
382 |
+
/**/
|
383 |
+
return apply_filters("ws_plugin__s2member_paypal_payflow_term", $payflow_term, get_defined_vars());
|
384 |
}
|
385 |
/**
|
386 |
* Converts a term `Day|Week|Month|Year` into PayPal® Standard format.
|
391 |
* @param str $term Expects one of `Day|Week|Month|Year`.
|
392 |
* @return bool|str A term code *( i.e. `D|W|M|Y` )*, else false.
|
393 |
*/
|
394 |
+
public static function paypal_std_term($term = FALSE)
|
395 |
{
|
396 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
397 |
+
do_action("ws_plugin__s2member_before_paypal_std_term", get_defined_vars());
|
398 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
399 |
/**/
|
400 |
+
$paypal_std_terms = array("DAY" => "D", "WEEK" => "W", "MONTH" => "M", "YEAR" => "Y");
|
401 |
/**/
|
402 |
+
$std_term = (!empty($paypal_std_terms[strtoupper($term)])) ? $paypal_std_terms[strtoupper($term)] : false;
|
403 |
/**/
|
404 |
+
return apply_filters("ws_plugin__s2member_paypal_std_term", $std_term, get_defined_vars());
|
405 |
}
|
406 |
/**
|
407 |
* Get `subscr_id` from either an array with `recurring_payment_id|subscr_id`, or use an existing string.
|
412 |
* @param str|array $array_or_string Either an array of PayPal® post vars, or a string.
|
413 |
* @return str|bool A `subscr_id` string if non-empty, else false.
|
414 |
*/
|
415 |
+
public static function paypal_pro_subscr_id($array_or_string = FALSE)
|
416 |
{
|
417 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
418 |
+
do_action("ws_plugin__s2member_before_paypal_pro_subscr_id", get_defined_vars());
|
419 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
420 |
/**/
|
421 |
+
if(is_array($array = $array_or_string) && !empty($array["recurring_payment_id"]))
|
422 |
+
$subscr_id = trim($array["recurring_payment_id"]);
|
423 |
/**/
|
424 |
+
else if(is_array($array = $array_or_string) && !empty($array["subscr_id"]))
|
425 |
+
$subscr_id = trim($array["subscr_id"]);
|
426 |
/**/
|
427 |
+
else if(is_string($string = $array_or_string) && !empty($string))
|
428 |
+
$subscr_id = trim($string);
|
429 |
/**/
|
430 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_subscr_id", ((!empty($subscr_id)) ? $subscr_id : false), get_defined_vars());
|
431 |
}
|
432 |
/**
|
433 |
* Get `item_number` from either an array with `PROFILEREFERENCE|rp_invoice_id|item_number1|item_number`, or use an existing string.
|
439 |
* If it's a string, we make sure it is a valid `level:ccaps:eotper` or `sp:ids:expiration` combination.
|
440 |
* @return str|bool An `item_number` string if non-empty, else false.
|
441 |
*/
|
442 |
+
public static function paypal_pro_item_number($array_or_string = FALSE)
|
443 |
{
|
444 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
445 |
+
do_action("ws_plugin__s2member_before_paypal_pro_item_number", get_defined_vars());
|
446 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
447 |
/**/
|
448 |
+
if(isset($array_or_string["PROFILENAME"]) /* Payflow® API alternative. */)
|
449 |
+
$array_or_string["PROFILEREFERENCE"] = $array_or_string["PROFILENAME"];
|
450 |
/**/
|
451 |
+
if(is_array($array = $array_or_string) && (!empty($array["PROFILEREFERENCE"]) || !empty($array["rp_invoice_id"])))
|
452 |
+
list($_reference, $_domain, $_item_number) = array_map("trim", preg_split("/~/", ((!empty($array["PROFILEREFERENCE"])) ? $array["PROFILEREFERENCE"] : $array["rp_invoice_id"]), 3));
|
453 |
/**/
|
454 |
+
else if(is_array($array = $array_or_string) && !empty($array["item_number1"]))
|
455 |
+
$_item_number = trim($array["item_number1"]);
|
456 |
/**/
|
457 |
+
else if(is_array($array = $array_or_string) && !empty($array["item_number"]))
|
458 |
+
$_item_number = trim($array["item_number"]);
|
459 |
/**/
|
460 |
+
else if(is_string($string = $array_or_string) && !empty($string))
|
461 |
+
$_item_number = trim($string);
|
462 |
+
/**/
|
463 |
+
if(!empty($_item_number) && preg_match($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_or_wo_level_regex"], $_item_number))
|
464 |
$item_number = $_item_number;
|
465 |
/**/
|
466 |
+
else if(!empty($_item_number) && preg_match($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"], $_item_number))
|
467 |
$item_number = $_item_number;
|
468 |
/**/
|
469 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_item_number", ((!empty($item_number)) ? $item_number : false), get_defined_vars());
|
470 |
}
|
471 |
/**
|
472 |
* Get `item_name` from either an array with `product_name|item_name1|item_name`, or use an existing string.
|
477 |
* @param str|array $array_or_string Either an array of PayPal® post vars, or a string.
|
478 |
* @return str|bool An `item_name` string if non-empty, else false.
|
479 |
*/
|
480 |
+
public static function paypal_pro_item_name($array_or_string = FALSE)
|
481 |
{
|
482 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
483 |
+
do_action("ws_plugin__s2member_before_paypal_pro_item_name", get_defined_vars());
|
484 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
485 |
/**/
|
486 |
+
if(is_array($array = $array_or_string) && !empty($array["product_name"]))
|
487 |
+
$item_name = trim($array["product_name"]);
|
488 |
/**/
|
489 |
+
else if(is_array($array = $array_or_string) && !empty($array["item_name1"]))
|
490 |
+
$item_name = trim($array["item_name1"]);
|
491 |
/**/
|
492 |
+
else if(is_array($array = $array_or_string) && !empty($array["item_name"]))
|
493 |
+
$item_name = trim($array["item_name"]);
|
494 |
/**/
|
495 |
+
else if(is_string($string = $array_or_string) && !empty($string))
|
496 |
+
$item_name = trim($string);
|
497 |
/**/
|
498 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_item_name", ((!empty($item_name)) ? $item_name : false), get_defined_vars());
|
499 |
}
|
500 |
/**
|
501 |
* Get `period1` from either an array with `PROFILEREFERENCE|rp_invoice_id|period1`, or use an existing string.
|
511 |
* @param str $default Optional. Value if unavailable. Defaults to `0 D`.
|
512 |
* @return str A `period1` string if possible, or defaults to `0 D`.
|
513 |
*/
|
514 |
+
public static function paypal_pro_period1($array_or_string = FALSE, $default = "0 D")
|
515 |
{
|
516 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
517 |
+
do_action("ws_plugin__s2member_before_paypal_pro_period1", get_defined_vars());
|
518 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
519 |
+
/**/
|
520 |
+
if(isset($array_or_string["PROFILENAME"]) /* Payflow® API alternative. */)
|
521 |
+
$array_or_string["PROFILEREFERENCE"] = $array_or_string["PROFILENAME"];
|
522 |
/**/
|
523 |
+
if(is_array($array = $array_or_string) && (!empty($array["PROFILEREFERENCE"]) || !empty($array["rp_invoice_id"])))
|
524 |
{
|
525 |
+
list($_reference, $_domain, $_item_number) = array_map("trim", preg_split("/~/", ((!empty($array["PROFILEREFERENCE"])) ? $array["PROFILEREFERENCE"] : $array["rp_invoice_id"]), 3));
|
526 |
+
list($_start_time, $_period1, $_period3) = array_map("trim", preg_split("/\:/", $_reference, 3));
|
527 |
}
|
528 |
+
else if(is_array($array = $array_or_string) && !empty($array["period1"]))
|
529 |
+
$_period1 = trim($array["period1"]);
|
530 |
/**/
|
531 |
+
else if(is_string($string = $array_or_string) && !empty($string))
|
532 |
+
$_period1 = trim($string);
|
533 |
/**/
|
534 |
+
if(!empty($_period1)) /* Were we able to get a `period1` string? */
|
535 |
{
|
536 |
+
list($num, $span) = array_map("trim", preg_split("/ /", $_period1, 2));
|
537 |
/**/
|
538 |
+
if(strtoupper($span) === "SEMIMONTH")
|
539 |
+
if(is_numeric($num) && $num >= 1)
|
540 |
+
eval('$num = "2"; $span = "W";');
|
541 |
/**/
|
542 |
+
if(strlen($span) !== 1) /* To Standard format. */
|
543 |
+
$span = c_ws_plugin__s2member_paypal_utilities::paypal_std_term($span);
|
544 |
/**/
|
545 |
+
$span = (preg_match("/^[DWMY]$/i", $span)) ? $span : "";
|
546 |
+
$num = ($span && is_numeric($num) && $num >= 0) ? $num : "";
|
547 |
/**/
|
548 |
+
$period1 = ($num && $span) ? $num." ".strtoupper($span) : $default;
|
549 |
/**/
|
550 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_period1", $period1, get_defined_vars());
|
551 |
}
|
552 |
else /* Default. */
|
553 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_period1", $default, get_defined_vars());
|
554 |
}
|
555 |
/**
|
556 |
* Get `period3` from either an array with `PROFILEREFERENCE|rp_invoice_id|period3`, or use an existing string.
|
567 |
* @param str $default Optional. Value if unavailable. Defaults to `1 D`.
|
568 |
* @return str A `period3` string if possible, or defaults to `1 D`.
|
569 |
*/
|
570 |
+
public static function paypal_pro_period3($array_or_string = FALSE, $default = "1 D")
|
571 |
{
|
572 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
573 |
+
do_action("ws_plugin__s2member_before_paypal_pro_period3", get_defined_vars());
|
574 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
575 |
+
/**/
|
576 |
+
if(isset($array_or_string["PROFILENAME"]) /* Payflow® API alternative. */)
|
577 |
+
$array_or_string["PROFILEREFERENCE"] = $array_or_string["PROFILENAME"];
|
578 |
/**/
|
579 |
+
if(is_array($array = $array_or_string) && (!empty($array["PROFILEREFERENCE"]) || !empty($array["rp_invoice_id"])))
|
580 |
{
|
581 |
+
list($_reference, $_domain, $_item_number) = array_map("trim", preg_split("/~/", ((!empty($array["PROFILEREFERENCE"])) ? $array["PROFILEREFERENCE"] : $array["rp_invoice_id"]), 3));
|
582 |
+
list($_start_time, $_period1, $_period3) = array_map("trim", preg_split("/\:/", $_reference, 3));
|
583 |
}
|
584 |
+
else if(is_array($array = $array_or_string) && !empty($array["period3"]))
|
585 |
+
$_period3 = trim($array["period3"]);
|
586 |
/**/
|
587 |
+
else if(is_string($string = $array_or_string) && !empty($string))
|
588 |
+
$_period3 = trim($string);
|
589 |
/**/
|
590 |
+
if(!empty($_period3)) /* Were we able to get a `period3` string? */
|
591 |
{
|
592 |
+
list($num, $span) = array_map("trim", preg_split("/ /", $_period3, 2));
|
593 |
/**/
|
594 |
+
if(strtoupper($span) === "SEMIMONTH")
|
595 |
+
if(is_numeric($num) && $num >= 1)
|
596 |
+
eval('$num = "2"; $span = "W";');
|
597 |
/**/
|
598 |
+
if(strlen($span) !== 1) /* To Standard format. */
|
599 |
+
$span = c_ws_plugin__s2member_paypal_utilities::paypal_std_term($span);
|
600 |
/**/
|
601 |
+
$span = (preg_match("/^[DWMY]$/i", $span)) ? $span : "";
|
602 |
+
$num = ($span && is_numeric($num) && $num >= 0) ? $num : "";
|
603 |
/**/
|
604 |
+
$period3 = ($num && $span) ? $num." ".strtoupper($span) : $default;
|
605 |
/**/
|
606 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_period3", $period3, get_defined_vars());
|
607 |
}
|
608 |
else /* Default. */
|
609 |
+
return apply_filters("ws_plugin__s2member_paypal_pro_period3", $default, get_defined_vars());
|
610 |
}
|
611 |
}
|
612 |
}
|
includes/classes/utils-urls.inc.php
CHANGED
@@ -14,10 +14,10 @@
|
|
14 |
* @package s2Member\Utilities
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
-
if
|
18 |
-
exit
|
19 |
/**/
|
20 |
-
if
|
21 |
{
|
22 |
/**
|
23 |
* URL utilities.
|
@@ -35,9 +35,9 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
35 |
*
|
36 |
* @return str Full URL to `/wp-signup.php`.
|
37 |
*/
|
38 |
-
public static function wp_signup_url
|
39 |
{
|
40 |
-
return apply_filters
|
41 |
}
|
42 |
/**
|
43 |
* Builds a WordPress® registration URL to `/wp-login.php?action=register`.
|
@@ -47,9 +47,9 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
47 |
*
|
48 |
* @return str Full URL to `/wp-login.php?action=register`.
|
49 |
*/
|
50 |
-
public static function wp_register_url
|
51 |
{
|
52 |
-
return apply_filters
|
53 |
}
|
54 |
/**
|
55 |
* Builds a BuddyPress registration URL to `/register`.
|
@@ -59,10 +59,10 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
59 |
*
|
60 |
* @return str|bool Full URL to `/register`, if BuddyPress is installed; else false.
|
61 |
*/
|
62 |
-
public static function bp_register_url
|
63 |
{
|
64 |
-
if
|
65 |
-
return site_url
|
66 |
/**/
|
67 |
return /* Default return false. */ false;
|
68 |
}
|
@@ -79,12 +79,12 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
79 |
*
|
80 |
* @see http://en.wikipedia.org/wiki/Web_browser_engine
|
81 |
*/
|
82 |
-
public static function redirect_browsers_using_302_status
|
83 |
{
|
84 |
$engines = "msie|trident|gecko|webkit|presto|konqueror|playstation";
|
85 |
/**/
|
86 |
-
if
|
87 |
-
if
|
88 |
return /* Use 302 status. */ ($status = 302);
|
89 |
/**/
|
90 |
return /* Else use existing status. */ $status;
|
@@ -100,9 +100,9 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
100 |
* @param str $url_uri_query A full URL, a partial URI, or just the query string.
|
101 |
* @return str A full URL, a partial URI, or just the query string; after having been encoded by this routine.
|
102 |
*/
|
103 |
-
public static function e_amps
|
104 |
{
|
105 |
-
return str_replace
|
106 |
}
|
107 |
/**
|
108 |
* Normalizes amperands to `&` when working with URLs, URIs, and/or query strings.
|
@@ -113,11 +113,11 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
113 |
* @param str $url_uri_query A full URL, a partial URI, or just the query string.
|
114 |
* @return str A full URL, a partial URI, or just the query string; after having been normalized by this routine.
|
115 |
*/
|
116 |
-
public static function n_amps
|
117 |
{
|
118 |
-
$amps = implode
|
119 |
/**/
|
120 |
-
return /* Normalizes amperands to `&`. */ preg_replace
|
121 |
}
|
122 |
/**
|
123 |
* Parses out a full valid URI, from either a full URL, or a partial URI.
|
@@ -130,16 +130,16 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
130 |
* @param str $url_uri Either a full URL, or a partial URI.
|
131 |
* @return str A valid URI, starting with `/` on success, else an empty string.
|
132 |
*/
|
133 |
-
public static function parse_uri
|
134 |
{
|
135 |
-
if
|
136 |
{
|
137 |
-
$parse["path"] = (!empty
|
138 |
/**/
|
139 |
-
return (!empty
|
140 |
}
|
141 |
else /* Force a string return value here. */
|
142 |
-
|
143 |
}
|
144 |
/**
|
145 |
* Parses a URL/URI with same args as PHP's ``parse_url()`` function.
|
@@ -155,21 +155,21 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
155 |
* @return str|array|bool The return value from PHP's ``parse_url()`` function.
|
156 |
* However, if ``$component`` is passed, s2Member forces a string return.
|
157 |
*/
|
158 |
-
public static function parse_url
|
159 |
{
|
160 |
$component = ($component === false || $component === -1) ? -1 : $component;
|
161 |
/**/
|
162 |
-
if
|
163 |
{
|
164 |
-
list
|
165 |
-
$query = /* See: <https://bugs.php.net/bug.php?id=38143>. */ str_replace
|
166 |
-
$url_uri = /* Put it all back together again, after the above modifications. */ $_
|
167 |
-
unset /* A little housekeeping here. Unset these vars. */
|
168 |
}
|
169 |
-
$parse = @parse_url /* Let PHP work its magic via ``parse_url()``. */
|
170 |
/**/
|
171 |
-
if
|
172 |
-
$parse["path"] = /* Clean up the path now. */ preg_replace
|
173 |
/**/
|
174 |
return ($component !== -1) ? /* Force a string return value? */ (string)$parse : $parse;
|
175 |
}
|
@@ -188,42 +188,46 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
188 |
* `code` *(http response code)*, `message` *(http response message)*, `headers` *(an array of lowercase headers)*, `body` *(the response body string)*, `response` *(full response array)*.
|
189 |
* @return str|array|bool Requested response str|array from remote location *(see ``$return_array`` parameter )*; else (bool)`false` on failure.
|
190 |
*/
|
191 |
-
public static function remote
|
192 |
{
|
193 |
-
if
|
194 |
{
|
195 |
-
$args = /* Force array, and disable SSL verification. */ (!is_array
|
196 |
-
$args["sslverify"] = (!isset
|
197 |
/**/
|
198 |
-
if
|
199 |
-
$args = array_merge
|
200 |
/**/
|
201 |
-
if
|
202 |
/* WordPress® v3.3 and prior, does NOT support `DELETE` via cURL unfortunately. */
|
203 |
-
add_filter
|
204 |
/**/
|
205 |
-
|
|
|
|
|
206 |
/**/
|
207 |
-
|
208 |
/**/
|
209 |
-
|
|
|
|
|
210 |
{
|
211 |
-
$a = array
|
212 |
-
$a = array_merge
|
213 |
-
$a = array_merge
|
214 |
-
$a = array_merge
|
215 |
-
$a = array_merge
|
216 |
/**/
|
217 |
return /* Return array w/ ``$response`` too. */ $a;
|
218 |
}
|
219 |
-
else if
|
220 |
-
return /* Return ``$response`` body only. */ wp_remote_retrieve_body
|
221 |
/**/
|
222 |
else /* Else this remote request has failed completely. Return false. */
|
223 |
-
|
224 |
}
|
225 |
else /* Else, return false. */
|
226 |
-
|
227 |
}
|
228 |
/**
|
229 |
* Shortens a long URL, based on s2Member configuration.
|
@@ -236,34 +240,34 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
236 |
* @param bool $try_backups Defaults to true. If a failure occurs with the first API, we'll try others until we have success.
|
237 |
* @return str|bool The shortened URL on success, else false on failure.
|
238 |
*/
|
239 |
-
public static function shorten
|
240 |
{
|
241 |
-
$url = /* Force strings, else false. */ ($url && is_string
|
242 |
-
$api_sp = ($api_sp && is_string
|
243 |
/**/
|
244 |
$default_url_shortener = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_url_shortener"];
|
245 |
$default_custom_str_url_shortener = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_custom_str_url_shortener"];
|
246 |
/**/
|
247 |
-
$apis = /* The shortening APIs currently pre-integrated in this release of s2Member. */ array
|
248 |
/**/
|
249 |
-
if
|
250 |
{
|
251 |
-
if
|
252 |
return /* Using whatever other shortener API you prefer, over the ones available by default with s2Member. */ ($shorter_url = $custom_url);
|
253 |
/**/
|
254 |
-
else if
|
255 |
return /* Using whatever other shortener API that a site owner prefers, over the ones available by default with s2Member. */ ($shorter_url = $custom_url);
|
256 |
/**/
|
257 |
-
else if
|
258 |
return /* The default tinyURL API: <http://tinyurl.com/api-create.php?url=http://www.example.com/>. */ ($shorter_url = $tiny_url);
|
259 |
/**/
|
260 |
-
else if
|
261 |
return /* Google® API: <http://code.google.com/apis/urlshortener/v1/getting_started.html>. */ ($shorter_url = $goo_gl_url);
|
262 |
/**/
|
263 |
-
else if /* Try backups? This way we can still shorten the URL with a backup. */
|
264 |
/**/
|
265 |
-
foreach /* Try other backup APIs now. */
|
266 |
-
if
|
267 |
return /* Success, we can return now. */ ($shorter_url = $backup);
|
268 |
}
|
269 |
return /* Default return value. */ false;
|
@@ -278,13 +282,13 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
278 |
* @param str $sig_var Optional. The name of the s2Member-generated signature variable. Defaults to `_s2member_sig`.
|
279 |
* @return str A full URL, a partial URI, or just the query string; without any s2Member-generated signatures.
|
280 |
*/
|
281 |
-
public static function remove_s2member_sigs
|
282 |
{
|
283 |
-
$url_uri_query = c_ws_plugin__s2member_utils_strings::trim
|
284 |
-
$sig_var = ($sig_var && is_string
|
285 |
-
$sigs = /* Remove all signatures. */ array_unique
|
286 |
/**/
|
287 |
-
return trim
|
288 |
}
|
289 |
/**
|
290 |
* Adds an s2Member-generated signature onto a full URL, a partial URI, or just a query string.
|
@@ -296,26 +300,26 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
296 |
* @param str $sig_var Optional. The name of the s2Member-generated signature variable. Defaults to `_s2member_sig`.
|
297 |
* @return str A full URL, a partial URI, or just a query string; with an s2Member-generated signature.
|
298 |
*/
|
299 |
-
public static function add_s2member_sig
|
300 |
{
|
301 |
-
$url_uri_query = $query = c_ws_plugin__s2member_utils_strings::trim
|
302 |
-
$sig_var = ($sig_var && is_string
|
303 |
/**/
|
304 |
-
$url_uri_query = $query = c_ws_plugin__s2member_utils_urls::remove_s2member_sigs
|
305 |
-
if
|
306 |
-
$query = trim
|
307 |
/**/
|
308 |
-
$key = /* Obtain the proper encryption/decryption key. */ c_ws_plugin__s2member_utils_encryption::key
|
309 |
/**/
|
310 |
-
if
|
311 |
{
|
312 |
-
wp_parse_str /* Parse the query string into an array of ``$vars``. Then sort & serialize them into a string. */
|
313 |
-
$vars = c_ws_plugin__s2member_utils_arrays::remove_0b_strings
|
314 |
-
$vars = serialize
|
315 |
/**/
|
316 |
-
$sig = /* The s2Member-generated signature. */ ($time = time
|
317 |
/**/
|
318 |
-
$url_uri_query = add_query_arg
|
319 |
}
|
320 |
return /* Possibly with a ``$sig_var`` variable. */ $url_uri_query;
|
321 |
}
|
@@ -331,36 +335,36 @@ if (!class_exists ("c_ws_plugin__s2member_utils_urls"))
|
|
331 |
* @param str $sig_var Optional. The name of the s2Member-generated signature variable. Defaults to `_s2member_sig`.
|
332 |
* @return bool True if the s2Member-generated signature is OK, else false.
|
333 |
*/
|
334 |
-
public static function s2member_sig_ok
|
335 |
{
|
336 |
-
$url_uri_query = $query = c_ws_plugin__s2member_utils_strings::trim
|
337 |
-
if
|
338 |
-
$query = trim
|
339 |
/**/
|
340 |
$check_time = /* Are we checking time? Force a boolean value here. */ ($check_time) ? true : false;
|
341 |
-
$exp_secs = (is_numeric
|
342 |
-
$sig_var = ($sig_var && is_string
|
343 |
/**/
|
344 |
-
$key = /* Obtain the proper encryption/decryption key. */ c_ws_plugin__s2member_utils_encryption::key
|
345 |
/**/
|
346 |
-
if
|
347 |
{
|
348 |
-
$query = /* Remove existing s2Member-generated signatures. */ c_ws_plugin__s2member_utils_urls::remove_s2member_sigs
|
349 |
/**/
|
350 |
-
wp_parse_str /* Parse the query string into an array of ``$vars``. Then sort & serialize them into a string. */
|
351 |
-
$vars = c_ws_plugin__s2member_utils_arrays::remove_0b_strings
|
352 |
-
$vars = serialize
|
353 |
/**/
|
354 |
-
($time = $sigs[1][($i = count
|
355 |
/**/
|
356 |
-
if /* Checking time? This must NOT be older than ``$exp_secs`` seconds ago. */
|
357 |
-
return ($sig === $valid_sig && $time >= strtotime
|
358 |
/**/
|
359 |
else /* Ignoring time? Just need to compare signatures in this case. */
|
360 |
-
|
361 |
}
|
362 |
else /* Return false. No ``$query``, or no ``$sigs``. */
|
363 |
-
|
364 |
}
|
365 |
}
|
366 |
}
|
14 |
* @package s2Member\Utilities
|
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_urls"))
|
21 |
{
|
22 |
/**
|
23 |
* URL utilities.
|
35 |
*
|
36 |
* @return str Full URL to `/wp-signup.php`.
|
37 |
*/
|
38 |
+
public static function wp_signup_url()
|
39 |
{
|
40 |
+
return apply_filters("wp_signup_location", site_url("/wp-signup.php"));
|
41 |
}
|
42 |
/**
|
43 |
* Builds a WordPress® registration URL to `/wp-login.php?action=register`.
|
47 |
*
|
48 |
* @return str Full URL to `/wp-login.php?action=register`.
|
49 |
*/
|
50 |
+
public static function wp_register_url()
|
51 |
{
|
52 |
+
return apply_filters("wp_register_location", add_query_arg("action", urlencode("register"), wp_login_url()), get_defined_vars());
|
53 |
}
|
54 |
/**
|
55 |
* Builds a BuddyPress registration URL to `/register`.
|
59 |
*
|
60 |
* @return str|bool Full URL to `/register`, if BuddyPress is installed; else false.
|
61 |
*/
|
62 |
+
public static function bp_register_url()
|
63 |
{
|
64 |
+
if( /* If BuddyPress is installed. */c_ws_plugin__s2member_utils_conds::bp_is_installed())
|
65 |
+
return site_url(((function_exists("bp_get_signup_slug")) ? bp_get_signup_slug()."/" : BP_REGISTER_SLUG."/"));
|
66 |
/**/
|
67 |
return /* Default return false. */ false;
|
68 |
}
|
79 |
*
|
80 |
* @see http://en.wikipedia.org/wiki/Web_browser_engine
|
81 |
*/
|
82 |
+
public static function redirect_browsers_using_302_status($status = FALSE)
|
83 |
{
|
84 |
$engines = "msie|trident|gecko|webkit|presto|konqueror|playstation";
|
85 |
/**/
|
86 |
+
if( /* Default `301` status? */(int)$status === 301 && /* Have User-Agent? */ !empty($_SERVER["HTTP_USER_AGENT"]))
|
87 |
+
if(($is_browser = preg_match("/(".$engines.")[\/ ]([0-9\.]+)/i", $_SERVER["HTTP_USER_AGENT"])))
|
88 |
return /* Use 302 status. */ ($status = 302);
|
89 |
/**/
|
90 |
return /* Else use existing status. */ $status;
|
100 |
* @param str $url_uri_query A full URL, a partial URI, or just the query string.
|
101 |
* @return str A full URL, a partial URI, or just the query string; after having been encoded by this routine.
|
102 |
*/
|
103 |
+
public static function e_amps($url_uri_query = FALSE)
|
104 |
{
|
105 |
+
return str_replace("&", "&", c_ws_plugin__s2member_utils_urls::n_amps((string)$url_uri_query));
|
106 |
}
|
107 |
/**
|
108 |
* Normalizes amperands to `&` when working with URLs, URIs, and/or query strings.
|
113 |
* @param str $url_uri_query A full URL, a partial URI, or just the query string.
|
114 |
* @return str A full URL, a partial URI, or just the query string; after having been normalized by this routine.
|
115 |
*/
|
116 |
+
public static function n_amps($url_uri_query = FALSE)
|
117 |
{
|
118 |
+
$amps = implode("|", array_keys /* Keys are regex patterns. */(c_ws_plugin__s2member_utils_strings::$ampersand_entities));
|
119 |
/**/
|
120 |
+
return /* Normalizes amperands to `&`. */ preg_replace("/(?:".$amps.")/", "&", (string)$url_uri_query);
|
121 |
}
|
122 |
/**
|
123 |
* Parses out a full valid URI, from either a full URL, or a partial URI.
|
130 |
* @param str $url_uri Either a full URL, or a partial URI.
|
131 |
* @return str A valid URI, starting with `/` on success, else an empty string.
|
132 |
*/
|
133 |
+
public static function parse_uri($url_uri = FALSE)
|
134 |
{
|
135 |
+
if(is_string($url_uri) && is_array($parse = c_ws_plugin__s2member_utils_urls::parse_url($url_uri)))
|
136 |
{
|
137 |
+
$parse["path"] = (!empty($parse["path"])) ? ((strpos($parse["path"], "/") === 0) ? $parse["path"] : "/".$parse["path"]) : "/";
|
138 |
/**/
|
139 |
+
return (!empty($parse["query"])) ? $parse["path"]."?".$parse["query"] : $parse["path"];
|
140 |
}
|
141 |
else /* Force a string return value here. */
|
142 |
+
return /* Empty string. */ "";
|
143 |
}
|
144 |
/**
|
145 |
* Parses a URL/URI with same args as PHP's ``parse_url()`` function.
|
155 |
* @return str|array|bool The return value from PHP's ``parse_url()`` function.
|
156 |
* However, if ``$component`` is passed, s2Member forces a string return.
|
157 |
*/
|
158 |
+
public static function parse_url($url_uri = FALSE, $component = FALSE, $clean_path = TRUE)
|
159 |
{
|
160 |
$component = ($component === false || $component === -1) ? -1 : $component;
|
161 |
/**/
|
162 |
+
if(is_string($url_uri) && /* And, there is a query string? */ strpos($url_uri, "?") !== false)
|
163 |
{
|
164 |
+
list($_, $query) = preg_split /* Split @ query string marker. */("/\?/", $url_uri, 2);
|
165 |
+
$query = /* See: <https://bugs.php.net/bug.php?id=38143>. */ str_replace("://", urlencode("://"), $query);
|
166 |
+
$url_uri = /* Put it all back together again, after the above modifications. */ $_."?".$query;
|
167 |
+
unset /* A little housekeeping here. Unset these vars. */($_, $query);
|
168 |
}
|
169 |
+
$parse = @parse_url /* Let PHP work its magic via ``parse_url()``. */($url_uri, $component);
|
170 |
/**/
|
171 |
+
if($clean_path && isset($parse["path"]) && is_string($parse["path"]) && !empty($parse["path"]))
|
172 |
+
$parse["path"] = /* Clean up the path now. */ preg_replace("/\/+/", "/", $parse["path"]);
|
173 |
/**/
|
174 |
return ($component !== -1) ? /* Force a string return value? */ (string)$parse : $parse;
|
175 |
}
|
188 |
* `code` *(http response code)*, `message` *(http response message)*, `headers` *(an array of lowercase headers)*, `body` *(the response body string)*, `response` *(full response array)*.
|
189 |
* @return str|array|bool Requested response str|array from remote location *(see ``$return_array`` parameter )*; else (bool)`false` on failure.
|
190 |
*/
|
191 |
+
public static function remote($url = FALSE, $post_vars = FALSE, $args = FALSE, $return_array = FALSE)
|
192 |
{
|
193 |
+
if($url && /* We MUST have a valid full URL (string) before we do anything in this routine. */ is_string($url))
|
194 |
{
|
195 |
+
$args = /* Force array, and disable SSL verification. */ (!is_array($args)) ? array(): $args;
|
196 |
+
$args["sslverify"] = (!isset($args["sslverify"])) ? /* Off. */ false : $args["sslverify"];
|
197 |
/**/
|
198 |
+
if((is_array($post_vars) || is_string($post_vars)) && !empty($post_vars))
|
199 |
+
$args = array_merge($args, array("method" => "POST", "body" => $post_vars));
|
200 |
/**/
|
201 |
+
if(!empty($args["method"]) && strcasecmp((string)$args["method"], "DELETE") === 0)
|
202 |
/* WordPress® v3.3 and prior, does NOT support `DELETE` via cURL unfortunately. */
|
203 |
+
add_filter("use_curl_transport", "__return_false", /* ID via priority. */ 111209554);
|
204 |
/**/
|
205 |
+
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
206 |
+
do_action("ws_plugin__s2member_before_wp_remote_request", get_defined_vars());
|
207 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
208 |
/**/
|
209 |
+
$response = /* Process remote request via ``wp_remote_request()``. */ wp_remote_request($url, $args);
|
210 |
/**/
|
211 |
+
remove_filter /* Remove this Filter now. */("use_curl_transport", "__return_false", 111209554);
|
212 |
+
/**/
|
213 |
+
if($return_array && !is_wp_error($response) && is_array($response))
|
214 |
{
|
215 |
+
$a = array("code" => (int)wp_remote_retrieve_response_code($response));
|
216 |
+
$a = array_merge($a, array("message" => wp_remote_retrieve_response_message($response)));
|
217 |
+
$a = array_merge($a, array("headers" => wp_remote_retrieve_headers($response)));
|
218 |
+
$a = array_merge($a, array("body" => wp_remote_retrieve_body($response)));
|
219 |
+
$a = array_merge($a, array("response" => $response));
|
220 |
/**/
|
221 |
return /* Return array w/ ``$response`` too. */ $a;
|
222 |
}
|
223 |
+
else if(!is_wp_error($response) && is_array($response) /* Return body only. */)
|
224 |
+
return /* Return ``$response`` body only. */ wp_remote_retrieve_body($response);
|
225 |
/**/
|
226 |
else /* Else this remote request has failed completely. Return false. */
|
227 |
+
return false; /* Remote request failed, return false. */
|
228 |
}
|
229 |
else /* Else, return false. */
|
230 |
+
return false;
|
231 |
}
|
232 |
/**
|
233 |
* Shortens a long URL, based on s2Member configuration.
|
240 |
* @param bool $try_backups Defaults to true. If a failure occurs with the first API, we'll try others until we have success.
|
241 |
* @return str|bool The shortened URL on success, else false on failure.
|
242 |
*/
|
243 |
+
public static function shorten($url = FALSE, $api_sp = FALSE, $try_backups = TRUE)
|
244 |
{
|
245 |
+
$url = /* Force strings, else false. */ ($url && is_string($url)) ? $url : false;
|
246 |
+
$api_sp = ($api_sp && is_string($api_sp)) ? strtolower($api_sp) : false;
|
247 |
/**/
|
248 |
$default_url_shortener = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_url_shortener"];
|
249 |
$default_custom_str_url_shortener = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_custom_str_url_shortener"];
|
250 |
/**/
|
251 |
+
$apis = /* The shortening APIs currently pre-integrated in this release of s2Member. */ array("tiny_url", "goo_gl");
|
252 |
/**/
|
253 |
+
if($url && ($api = /* If specific, use it. Otherwise, use the default shortening API. */ ($api_sp) ? $api_sp : $default_url_shortener))
|
254 |
{
|
255 |
+
if(!$api_sp && ($custom_url = trim(apply_filters("ws_plugin__s2member_url_shorten", false, get_defined_vars()))) && stripos($custom_url, "http") === 0)
|
256 |
return /* Using whatever other shortener API you prefer, over the ones available by default with s2Member. */ ($shorter_url = $custom_url);
|
257 |
/**/
|
258 |
+
else if(!$api_sp && stripos($default_custom_str_url_shortener, "http") === 0 && ($custom_url = trim(c_ws_plugin__s2member_utils_urls::remote(str_ireplace(array("%%s2_long_url%%", "%%s2_long_url_md5%%"), array(rawurlencode($url), urlencode(md5($url))), $default_custom_str_url_shortener)))) && stripos($custom_url, "http") === 0)
|
259 |
return /* Using whatever other shortener API that a site owner prefers, over the ones available by default with s2Member. */ ($shorter_url = $custom_url);
|
260 |
/**/
|
261 |
+
else if($api === "tiny_url" && ($tiny_url = trim(c_ws_plugin__s2member_utils_urls::remote("http://tinyurl.com/api-create.php?url=".rawurlencode($url)))) && stripos($tiny_url, "http") === 0)
|
262 |
return /* The default tinyURL API: <http://tinyurl.com/api-create.php?url=http://www.example.com/>. */ ($shorter_url = $tiny_url);
|
263 |
/**/
|
264 |
+
else if($api === "goo_gl" && ($goo_gl = json_decode(trim(c_ws_plugin__s2member_utils_urls::remote("https://www.googleapis.com/urlshortener/v1/url".((($goo_gl_key = apply_filters("ws_plugin__s2member_url_shorten_api_goo_gl_key", false))) ? "?key=".urlencode($goo_gl_key) : ""), json_encode(array("longUrl" => $url)), array("headers" => array("Content-Type" => "application/json")))), true)) && !empty($goo_gl["id"]) && is_string($goo_gl_url = $goo_gl["id"]) && stripos($goo_gl_url, "http") === 0)
|
265 |
return /* Google® API: <http://code.google.com/apis/urlshortener/v1/getting_started.html>. */ ($shorter_url = $goo_gl_url);
|
266 |
/**/
|
267 |
+
else if /* Try backups? This way we can still shorten the URL with a backup. */($try_backups && count($apis) > 1)
|
268 |
/**/
|
269 |
+
foreach /* Try other backup APIs now. */(array_diff($apis, array($api)) as $backup)
|
270 |
+
if(($backup = c_ws_plugin__s2member_utils_urls::shorten($url, $backup, false)))
|
271 |
return /* Success, we can return now. */ ($shorter_url = $backup);
|
272 |
}
|
273 |
return /* Default return value. */ false;
|
282 |
* @param str $sig_var Optional. The name of the s2Member-generated signature variable. Defaults to `_s2member_sig`.
|
283 |
* @return str A full URL, a partial URI, or just the query string; without any s2Member-generated signatures.
|
284 |
*/
|
285 |
+
public static function remove_s2member_sigs($url_uri_query = FALSE, $sig_var = FALSE)
|
286 |
{
|
287 |
+
$url_uri_query = c_ws_plugin__s2member_utils_strings::trim((string)$url_uri_query, false, "?&=");
|
288 |
+
$sig_var = ($sig_var && is_string($sig_var)) ? $sig_var : /* Use default. */ "_s2member_sig";
|
289 |
+
$sigs = /* Remove all signatures. */ array_unique(array($sig_var, "_s2member_sig"));
|
290 |
/**/
|
291 |
+
return trim(remove_query_arg($sigs, $url_uri_query), "?&=");
|
292 |
}
|
293 |
/**
|
294 |
* Adds an s2Member-generated signature onto a full URL, a partial URI, or just a query string.
|
300 |
* @param str $sig_var Optional. The name of the s2Member-generated signature variable. Defaults to `_s2member_sig`.
|
301 |
* @return str A full URL, a partial URI, or just a query string; with an s2Member-generated signature.
|
302 |
*/
|
303 |
+
public static function add_s2member_sig($url_uri_query = FALSE, $sig_var = FALSE)
|
304 |
{
|
305 |
+
$url_uri_query = $query = c_ws_plugin__s2member_utils_strings::trim((string)$url_uri_query, false, "?&=");
|
306 |
+
$sig_var = ($sig_var && is_string($sig_var)) ? $sig_var : /* Use default. */ "_s2member_sig";
|
307 |
/**/
|
308 |
+
$url_uri_query = $query = c_ws_plugin__s2member_utils_urls::remove_s2member_sigs($url_uri_query, $sig_var);
|
309 |
+
if( /* Is this a full URL, or a partial URI? */preg_match("/^(?:[a-z]+\:\/\/|\/)/i", ($url_uri_query)))
|
310 |
+
$query = trim(c_ws_plugin__s2member_utils_urls::parse_url($url_uri_query, PHP_URL_QUERY), "?&=");
|
311 |
/**/
|
312 |
+
$key = /* Obtain the proper encryption/decryption key. */ c_ws_plugin__s2member_utils_encryption::key();
|
313 |
/**/
|
314 |
+
if($url_uri_query && is_string /* We DO allow empty query strings. So we can sign a URL without one. */($query))
|
315 |
{
|
316 |
+
wp_parse_str /* Parse the query string into an array of ``$vars``. Then sort & serialize them into a string. */($query, $vars);
|
317 |
+
$vars = c_ws_plugin__s2member_utils_arrays::remove_0b_strings(c_ws_plugin__s2member_utils_strings::trim_deep($vars));
|
318 |
+
$vars = serialize(c_ws_plugin__s2member_utils_arrays::ksort_deep($vars));
|
319 |
/**/
|
320 |
+
$sig = /* The s2Member-generated signature. */ ($time = time())."-".md5($key.$time.$vars);
|
321 |
/**/
|
322 |
+
$url_uri_query = add_query_arg($sig_var, urlencode($sig), $url_uri_query);
|
323 |
}
|
324 |
return /* Possibly with a ``$sig_var`` variable. */ $url_uri_query;
|
325 |
}
|
335 |
* @param str $sig_var Optional. The name of the s2Member-generated signature variable. Defaults to `_s2member_sig`.
|
336 |
* @return bool True if the s2Member-generated signature is OK, else false.
|
337 |
*/
|
338 |
+
public static function s2member_sig_ok($url_uri_query = FALSE, $check_time = FALSE, $exp_secs = FALSE, $sig_var = FALSE)
|
339 |
{
|
340 |
+
$url_uri_query = $query = c_ws_plugin__s2member_utils_strings::trim((string)$url_uri_query, false, "?&=");
|
341 |
+
if( /* Is this a full URL, or a partial URI? */preg_match("/^(?:[a-z]+\:\/\/|\/)/i", ($url_uri_query)))
|
342 |
+
$query = trim(c_ws_plugin__s2member_utils_urls::parse_url($url_uri_query, PHP_URL_QUERY), "?&=");
|
343 |
/**/
|
344 |
$check_time = /* Are we checking time? Force a boolean value here. */ ($check_time) ? true : false;
|
345 |
+
$exp_secs = (is_numeric($exp_secs)) ? (int)$exp_secs : /* Else 10 seconds by default here. */ 10;
|
346 |
+
$sig_var = ($sig_var && is_string($sig_var)) ? $sig_var : /* Use default. */ "_s2member_sig";
|
347 |
/**/
|
348 |
+
$key = /* Obtain the proper encryption/decryption key. */ c_ws_plugin__s2member_utils_encryption::key();
|
349 |
/**/
|
350 |
+
if(preg_match_all /* Does ``$query`` have an s2Member-generated signature? */("/".preg_quote($sig_var, "/")."\=([0-9]+)-([^&$]+)/", $query, $sigs))
|
351 |
{
|
352 |
+
$query = /* Remove existing s2Member-generated signatures. */ c_ws_plugin__s2member_utils_urls::remove_s2member_sigs($query, $sig_var);
|
353 |
/**/
|
354 |
+
wp_parse_str /* Parse the query string into an array of ``$vars``. Then sort & serialize them into a string. */($query, $vars);
|
355 |
+
$vars = c_ws_plugin__s2member_utils_arrays::remove_0b_strings(c_ws_plugin__s2member_utils_strings::trim_deep($vars));
|
356 |
+
$vars = serialize(c_ws_plugin__s2member_utils_arrays::ksort_deep($vars));
|
357 |
/**/
|
358 |
+
($time = $sigs[1][($i = count($sigs[1]) - 1)]).($sig = $sigs[2][$i]).($valid_sig = md5($key.$time.$vars));
|
359 |
/**/
|
360 |
+
if /* Checking time? This must NOT be older than ``$exp_secs`` seconds ago. */($check_time)
|
361 |
+
return ($sig === $valid_sig && $time >= strtotime("-".$exp_secs." seconds"));
|
362 |
/**/
|
363 |
else /* Ignoring time? Just need to compare signatures in this case. */
|
364 |
+
return /* Do they match up? */ ($sig === $valid_sig);
|
365 |
}
|
366 |
else /* Return false. No ``$query``, or no ``$sigs``. */
|
367 |
+
return /* False, it's NOT ok. */ false;
|
368 |
}
|
369 |
}
|
370 |
}
|
includes/functions/api-functions.inc.php
CHANGED
@@ -242,10 +242,10 @@ if (!function_exists ("user_is_not"))
|
|
242 |
*
|
243 |
* ———— Shortcode Conditional Equivalent ————
|
244 |
* ```
|
245 |
-
* [s2If
|
246 |
* You ARE a Free Subscriber at Level #0.
|
247 |
* [/s2If]
|
248 |
-
* [s2If
|
249 |
* You ARE a Member at Level #1.
|
250 |
* [/s2If]
|
251 |
* [s2If current_user_can(access_s2member_level2)]
|
242 |
*
|
243 |
* ———— Shortcode Conditional Equivalent ————
|
244 |
* ```
|
245 |
+
* [s2If current_user_is(subscriber)]
|
246 |
* You ARE a Free Subscriber at Level #0.
|
247 |
* [/s2If]
|
248 |
+
* [s2If current_user_is(s2member_level1)]
|
249 |
* You ARE a Member at Level #1.
|
250 |
* [/s2If]
|
251 |
* [s2If current_user_can(access_s2member_level2)]
|
includes/hooks.inc.php
CHANGED
@@ -14,163 +14,164 @@
|
|
14 |
* @package s2Member
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
-
if
|
18 |
exit("Do not access this file directly.");
|
19 |
/*
|
20 |
Add the plugin Actions/Filters here.
|
21 |
*/
|
22 |
-
add_action
|
23 |
/**/
|
24 |
-
add_action
|
25 |
-
add_action
|
26 |
-
add_action
|
27 |
/**/
|
28 |
-
add_action
|
29 |
-
add_action
|
30 |
-
add_action
|
31 |
-
add_action
|
32 |
-
add_action
|
33 |
-
add_action
|
34 |
-
add_action
|
35 |
-
add_action
|
36 |
-
add_action
|
37 |
-
add_action
|
38 |
-
/**/
|
39 |
-
add_action
|
40 |
-
add_action
|
41 |
-
add_action
|
42 |
-
/**/
|
43 |
-
add_action
|
44 |
/**/
|
45 |
-
add_action
|
46 |
-
add_action
|
47 |
-
add_action
|
48 |
-
/**/
|
49 |
-
add_action
|
50 |
-
/**/
|
51 |
-
add_action
|
52 |
-
/**/
|
53 |
-
add_action
|
54 |
-
/**/
|
55 |
-
add_action
|
56 |
-
add_action
|
57 |
-
/* Stay ahead of BuddyPress®
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
add_action
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
68 |
/**/
|
69 |
-
|
70 |
-
add_action ("wpmu_delete_user", "c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions");
|
71 |
-
add_action ("remove_user_from_blog", "c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions", 10, 2);
|
72 |
/**/
|
73 |
-
add_filter
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
/**/
|
75 |
-
add_filter
|
76 |
-
|
77 |
-
|
78 |
-
add_filter ("pre_site_option_dashboard_blog", "c_ws_plugin__s2member_option_forces::mms_dashboard_blog");
|
79 |
-
add_filter ("pre_option_users_can_register", "c_ws_plugin__s2member_option_forces::check_register_access");
|
80 |
-
add_filter ("pre_site_option_registration", "c_ws_plugin__s2member_option_forces::check_mms_register_access");
|
81 |
-
add_filter ("bp_core_get_root_options", "c_ws_plugin__s2member_option_forces::check_bp_mms_register_access");
|
82 |
-
add_filter ("bp_core_get_site_options", "c_ws_plugin__s2member_option_forces::check_bp_mms_register_access");
|
83 |
/**/
|
84 |
-
add_filter
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
/**/
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
add_action ("signup_hidden_fields", "c_ws_plugin__s2member_registrations::ms_process_signup_hidden_fields");
|
92 |
-
add_filter ("registration_errors", "c_ws_plugin__s2member_registrations::ms_register_existing_user", 11, 3);
|
93 |
-
add_filter ("wpmu_signup_user_notification_email", "c_ws_plugin__s2member_email_configs::ms_nice_email_roles", 11);
|
94 |
-
add_filter ("_wpmu_activate_existing_error_", "c_ws_plugin__s2member_registrations::ms_activate_existing_user", 10, 2);
|
95 |
-
add_action ("wpmu_activate_user", "c_ws_plugin__s2member_registrations::configure_user_on_ms_user_activation", 10, 3);
|
96 |
-
add_action ("wpmu_activate_blog", "c_ws_plugin__s2member_registrations::configure_user_on_ms_blog_activation", 10, 5);
|
97 |
-
add_action ("signup_extra_fields", "c_ws_plugin__s2member_custom_reg_fields::ms_custom_registration_fields");
|
98 |
/**/
|
99 |
-
add_action
|
100 |
-
add_action
|
101 |
-
|
|
|
|
|
102 |
/**/
|
103 |
-
add_action
|
104 |
-
add_action
|
105 |
-
add_filter ("login_headerurl", "c_ws_plugin__s2member_login_customizations::login_header_url");
|
106 |
-
add_filter ("login_headertitle", "c_ws_plugin__s2member_login_customizations::login_header_title");
|
107 |
-
add_action ("login_footer", "c_ws_plugin__s2member_login_customizations::login_footer_design");
|
108 |
/**/
|
109 |
-
add_action
|
110 |
-
add_action
|
111 |
/**/
|
112 |
-
add_action
|
113 |
-
add_action
|
114 |
/**/
|
115 |
-
add_action
|
116 |
-
add_action
|
117 |
/**/
|
118 |
-
add_action
|
119 |
-
add_action ("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes");
|
120 |
/**/
|
121 |
-
add_action
|
|
|
122 |
/**/
|
123 |
-
add_action
|
124 |
-
add_action
|
|
|
|
|
125 |
/**/
|
126 |
-
add_action
|
127 |
-
add_action
|
128 |
-
add_action
|
129 |
-
add_action
|
|
|
|
|
|
|
|
|
130 |
/**/
|
131 |
-
add_action
|
132 |
-
add_action
|
133 |
-
add_action
|
134 |
-
add_action ("network_admin_menu", "c_ws_plugin__s2member_menu_pages::add_network_admin_options");
|
135 |
-
add_action ("admin_bar_menu", "c_ws_plugin__s2member_admin_lockouts::filter_admin_menu_bar", 100);
|
136 |
-
add_action ("admin_print_scripts", "c_ws_plugin__s2member_menu_pages::add_admin_scripts");
|
137 |
-
add_action ("admin_print_styles", "c_ws_plugin__s2member_menu_pages::add_admin_styles");
|
138 |
-
add_filter ("update_feedback", "c_ws_plugin__s2member_mms_patches::sync_mms_patches");
|
139 |
/**/
|
140 |
-
add_action
|
141 |
-
|
142 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
/**/
|
144 |
-
|
145 |
-
|
146 |
-
add_filter ("manage_users_custom_column", "c_ws_plugin__s2member_users_list::users_list_display_cols", 10, 3);
|
147 |
-
add_action ("edit_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
148 |
-
add_action ("show_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
149 |
-
add_action ("edit_user_profile_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
150 |
-
add_action ("personal_options_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
151 |
-
add_action ("set_user_role", "c_ws_plugin__s2member_registration_times::synchronize_paid_reg_times", 10, 2);
|
152 |
-
add_filter ("show_password_fields", "c_ws_plugin__s2member_user_securities::hide_password_fields", 10, 2);
|
153 |
/**/
|
154 |
-
|
155 |
-
add_action ("ws_plugin__s2member_auto_eot_system__schedule", "c_ws_plugin__s2member_auto_eots::auto_eot_system");
|
156 |
/**/
|
157 |
-
add_action
|
158 |
-
|
159 |
-
|
160 |
-
add_action
|
161 |
-
|
162 |
-
|
163 |
-
add_action
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
/**/
|
168 |
-
|
169 |
-
/**/
|
170 |
-
add_action ("bbp_activation", "c_ws_plugin__s2member_roles_caps::config_roles", 11);
|
171 |
/*
|
172 |
Register the activation | de-activation routines.
|
173 |
*/
|
174 |
-
register_activation_hook
|
175 |
-
register_deactivation_hook
|
176 |
?>
|
14 |
* @package s2Member
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
+
if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
|
18 |
exit("Do not access this file directly.");
|
19 |
/*
|
20 |
Add the plugin Actions/Filters here.
|
21 |
*/
|
22 |
+
add_action("init", "c_ws_plugin__s2member_translations::load", 2);
|
23 |
/**/
|
24 |
+
add_action("init", "c_ws_plugin__s2member_ssl::check_force_ssl", 3);
|
25 |
+
add_action("init", "c_ws_plugin__s2member_user_securities::initialize", 3);
|
26 |
+
add_action("init", "c_ws_plugin__s2member_no_cache::no_cache", 3);
|
27 |
/**/
|
28 |
+
add_action("init", "c_ws_plugin__s2member_register::register", 4);
|
29 |
+
add_action("init", "c_ws_plugin__s2member_paypal_notify::paypal_notify", 4);
|
30 |
+
add_action("init", "c_ws_plugin__s2member_files::check_file_download_access", 4);
|
31 |
+
add_action("init", "c_ws_plugin__s2member_profile_mods::handle_profile_modifications", 4);
|
32 |
+
add_action("init", "c_ws_plugin__s2member_profile_mods_4bp::handle_profile_modifications_4bp", 4);
|
33 |
+
add_action("init", "c_ws_plugin__s2member_tracking_cookies::delete_sp_tracking_cookie", 4);
|
34 |
+
add_action("init", "c_ws_plugin__s2member_tracking_cookies::delete_tracking_cookie", 4);
|
35 |
+
add_action("init", "c_ws_plugin__s2member_cron_jobs::auto_eot_system_via_cron", 4);
|
36 |
+
add_action("init", "c_ws_plugin__s2member_mo_page::membership_options_page", 4);
|
37 |
+
add_action("init", "c_ws_plugin__s2member_s_badge_status::s_badge_status", 4);
|
38 |
+
/**/
|
39 |
+
add_action("init", "c_ws_plugin__s2member_admin_css_js::menu_pages_css", 5);
|
40 |
+
add_action("init", "c_ws_plugin__s2member_admin_css_js::menu_pages_js", 5);
|
41 |
+
add_action("init", "c_ws_plugin__s2member_css_js::css", 5);
|
42 |
+
/**/
|
43 |
+
add_action("init", "c_ws_plugin__s2member_constants::constants", 6);
|
44 |
/**/
|
45 |
+
add_action("init", "c_ws_plugin__s2member_css_js::js_w_globals", 7);
|
46 |
+
add_action("init", "c_ws_plugin__s2member_paypal_return::paypal_return", 7);
|
47 |
+
add_action("init", "c_ws_plugin__s2member_profile::profile", 7);
|
48 |
+
/**/
|
49 |
+
add_action("init", "c_ws_plugin__s2member_labels::config_label_translations", 10);
|
50 |
+
/**/
|
51 |
+
add_action("init", "c_ws_plugin__s2member_login_redirects_r::remove_login_redirect_filters", 11);
|
52 |
+
/**/
|
53 |
+
add_action("pre_get_posts", "c_ws_plugin__s2member_security::security_gate_query", 100);
|
54 |
+
/**/
|
55 |
+
add_action("wp", "c_ws_plugin__s2member_ssl::check_force_ssl", 1);
|
56 |
+
add_action("wp", "c_ws_plugin__s2member_security::security_gate", 1);
|
57 |
+
/* Stay ahead of BuddyPress® at `3` on `wp in `bp-core-hooks.php`. */
|
58 |
+
/* Set to `1` so other plugins may come between these. */
|
59 |
+
/**/
|
60 |
+
add_filter("wp_mail", "c_ws_plugin__s2member_email_configs::email_filter");
|
61 |
+
/**/
|
62 |
+
add_filter("widget_text", "do_shortcode"); /* Shortcodes in widgets. */
|
63 |
+
/**/
|
64 |
+
add_action("wp_print_styles", "c_ws_plugin__s2member_css_js_themes::add_css");
|
65 |
+
add_action("wp_print_scripts", "c_ws_plugin__s2member_css_js_themes::add_js_w_globals");
|
66 |
+
/**/
|
67 |
+
add_action("wp_login_failed", "c_ws_plugin__s2member_brute_force::track_failed_logins");
|
68 |
+
add_filter("authenticate", "c_ws_plugin__s2member_brute_force::stop_brute_force_logins", 100);
|
69 |
+
/**/
|
70 |
+
add_action("delete_user", "c_ws_plugin__s2member_user_deletions::handle_user_deletions");
|
71 |
+
add_action("wpmu_delete_user", "c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions");
|
72 |
+
add_action("remove_user_from_blog", "c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions", 10, 2);
|
73 |
/**/
|
74 |
+
add_filter("enable_edit_any_user_configuration", "c_ws_plugin__s2member_user_securities::ms_allow_edits");
|
|
|
|
|
75 |
/**/
|
76 |
+
add_filter("pre_option_default_role", "c_ws_plugin__s2member_option_forces::force_default_role");
|
77 |
+
add_filter("pre_site_option_default_user_role", "c_ws_plugin__s2member_option_forces::force_mms_default_role");
|
78 |
+
add_filter("pre_site_option_add_new_users", "c_ws_plugin__s2member_option_forces::mms_allow_new_users");
|
79 |
+
add_filter("pre_site_option_dashboard_blog", "c_ws_plugin__s2member_option_forces::mms_dashboard_blog");
|
80 |
+
add_filter("pre_option_users_can_register", "c_ws_plugin__s2member_option_forces::check_register_access");
|
81 |
+
add_filter("pre_site_option_registration", "c_ws_plugin__s2member_option_forces::check_mms_register_access");
|
82 |
+
add_filter("bp_core_get_root_options", "c_ws_plugin__s2member_option_forces::check_bp_mms_register_access");
|
83 |
+
add_filter("bp_core_get_site_options", "c_ws_plugin__s2member_option_forces::check_bp_mms_register_access");
|
84 |
/**/
|
85 |
+
add_filter("random_password", "c_ws_plugin__s2member_registrations::generate_password");
|
86 |
+
add_action("user_register", "c_ws_plugin__s2member_registrations::configure_user_registration");
|
87 |
+
add_action("register_form", "c_ws_plugin__s2member_custom_reg_fields::custom_registration_fields");
|
|
|
|
|
|
|
|
|
|
|
88 |
/**/
|
89 |
+
add_filter("add_signup_meta", "c_ws_plugin__s2member_registrations::ms_process_signup_meta");
|
90 |
+
add_filter("bp_signup_usermeta", "c_ws_plugin__s2member_registrations::ms_process_signup_meta");
|
91 |
+
add_filter("wpmu_validate_user_signup", "c_ws_plugin__s2member_registrations::ms_validate_user_signup");
|
92 |
+
add_action("signup_hidden_fields", "c_ws_plugin__s2member_registrations::ms_process_signup_hidden_fields");
|
93 |
+
add_filter("registration_errors", "c_ws_plugin__s2member_registrations::ms_register_existing_user", 11, 3);
|
94 |
+
add_filter("wpmu_signup_user_notification_email", "c_ws_plugin__s2member_email_configs::ms_nice_email_roles", 11);
|
95 |
+
add_filter("_wpmu_activate_existing_error_", "c_ws_plugin__s2member_registrations::ms_activate_existing_user", 10, 2);
|
96 |
+
add_action("wpmu_activate_user", "c_ws_plugin__s2member_registrations::configure_user_on_ms_user_activation", 10, 3);
|
97 |
+
add_action("wpmu_activate_blog", "c_ws_plugin__s2member_registrations::configure_user_on_ms_blog_activation", 10, 5);
|
98 |
+
add_action("signup_extra_fields", "c_ws_plugin__s2member_custom_reg_fields::ms_custom_registration_fields");
|
99 |
/**/
|
100 |
+
add_action("bp_after_signup_profile_fields", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_registration_fields_4bp");
|
101 |
+
add_action("bp_after_profile_field_content", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_fields_4bp");
|
102 |
+
add_action("bp_profile_field_item", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_field_items_4bp");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
/**/
|
104 |
+
add_action("wp_login", "c_ws_plugin__s2member_login_redirects::login_redirect");
|
105 |
+
add_action("login_head", "c_ws_plugin__s2member_login_customizations::login_header_styles");
|
106 |
+
add_filter("login_headerurl", "c_ws_plugin__s2member_login_customizations::login_header_url");
|
107 |
+
add_filter("login_headertitle", "c_ws_plugin__s2member_login_customizations::login_header_title");
|
108 |
+
add_action("login_footer", "c_ws_plugin__s2member_login_customizations::login_footer_design");
|
109 |
/**/
|
110 |
+
add_action("login_footer", "c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes");
|
111 |
+
add_action("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes");
|
|
|
|
|
|
|
112 |
/**/
|
113 |
+
add_action("login_footer", "c_ws_plugin__s2member_tracking_codes::display_modification_tracking_codes");
|
114 |
+
add_action("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_modification_tracking_codes");
|
115 |
/**/
|
116 |
+
add_action("login_footer", "c_ws_plugin__s2member_tracking_codes::display_ccap_tracking_codes");
|
117 |
+
add_action("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_ccap_tracking_codes");
|
118 |
/**/
|
119 |
+
add_action("login_footer", "c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes");
|
120 |
+
add_action("wp_footer", "c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes");
|
121 |
/**/
|
122 |
+
add_action("wp_footer", "c_ws_plugin__s2member_wp_footer::wp_footer_code");
|
|
|
123 |
/**/
|
124 |
+
add_action("admin_init", "c_ws_plugin__s2member_admin_lockouts::admin_lockout", 1);
|
125 |
+
add_action("admin_init", "c_ws_plugin__s2member_check_activation::check");
|
126 |
/**/
|
127 |
+
add_action("load-settings.php", "c_ws_plugin__s2member_op_notices::multisite_ops_notice");
|
128 |
+
add_action("load-options-general.php", "c_ws_plugin__s2member_op_notices::general_ops_notice");
|
129 |
+
add_action("load-options-reading.php", "c_ws_plugin__s2member_op_notices::reading_ops_notice");
|
130 |
+
add_action("load-user-new.php", "c_ws_plugin__s2member_user_new::admin_user_new_fields");
|
131 |
/**/
|
132 |
+
add_action("add_meta_boxes", "c_ws_plugin__s2member_meta_boxes::add_meta_boxes");
|
133 |
+
add_action("save_post", "c_ws_plugin__s2member_meta_box_saves::save_meta_boxes");
|
134 |
+
add_action("admin_menu", "c_ws_plugin__s2member_menu_pages::add_admin_options");
|
135 |
+
add_action("network_admin_menu", "c_ws_plugin__s2member_menu_pages::add_network_admin_options");
|
136 |
+
add_action("admin_bar_menu", "c_ws_plugin__s2member_admin_lockouts::filter_admin_menu_bar", 100);
|
137 |
+
add_action("admin_print_scripts", "c_ws_plugin__s2member_menu_pages::add_admin_scripts");
|
138 |
+
add_action("admin_print_styles", "c_ws_plugin__s2member_menu_pages::add_admin_styles");
|
139 |
+
add_filter("update_feedback", "c_ws_plugin__s2member_mms_patches::sync_mms_patches");
|
140 |
/**/
|
141 |
+
add_action("admin_notices", "c_ws_plugin__s2member_admin_notices::admin_notices");
|
142 |
+
add_action("user_admin_notices", "c_ws_plugin__s2member_admin_notices::admin_notices");
|
143 |
+
add_action("network_admin_notices", "c_ws_plugin__s2member_admin_notices::admin_notices");
|
|
|
|
|
|
|
|
|
|
|
144 |
/**/
|
145 |
+
add_action("pre_user_query", "c_ws_plugin__s2member_users_list::users_list_query");
|
146 |
+
add_filter("manage_users_columns", "c_ws_plugin__s2member_users_list::users_list_cols");
|
147 |
+
add_filter("manage_users_custom_column", "c_ws_plugin__s2member_users_list::users_list_display_cols", 10, 3);
|
148 |
+
add_action("edit_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
149 |
+
add_action("show_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
150 |
+
add_action("edit_user_profile_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
151 |
+
add_action("personal_options_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
152 |
+
add_action("set_user_role", "c_ws_plugin__s2member_registration_times::synchronize_paid_reg_times", 10, 2);
|
153 |
+
add_filter("show_password_fields", "c_ws_plugin__s2member_user_securities::hide_password_fields", 10, 2);
|
154 |
/**/
|
155 |
+
add_filter("cron_schedules", "c_ws_plugin__s2member_cron_jobs::extend_cron_schedules");
|
156 |
+
add_action("ws_plugin__s2member_auto_eot_system__schedule", "c_ws_plugin__s2member_auto_eots::auto_eot_system");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
/**/
|
158 |
+
add_action("wp_ajax_ws_plugin__s2member_update_roles_via_ajax", "c_ws_plugin__s2member_roles_caps::update_roles_via_ajax");
|
|
|
159 |
/**/
|
160 |
+
add_action("wp_ajax_ws_plugin__s2member_sp_access_link_via_ajax", "c_ws_plugin__s2member_sp_access::sp_access_link_via_ajax");
|
161 |
+
add_action("wp_ajax_ws_plugin__s2member_reg_access_link_via_ajax", "c_ws_plugin__s2member_register_access::reg_access_link_via_ajax");
|
162 |
+
/**/
|
163 |
+
add_action("wp_ajax_ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax", "c_ws_plugin__s2member_ip_restrictions::delete_reset_all_ip_restrictions_via_ajax");
|
164 |
+
add_action("wp_ajax_ws_plugin__s2member_delete_reset_specific_ip_restrictions_via_ajax", "c_ws_plugin__s2member_ip_restrictions::delete_reset_specific_ip_restrictions_via_ajax");
|
165 |
+
/**/
|
166 |
+
add_action("ws_plugin__s2member_during_collective_mods", "c_ws_plugin__s2member_list_servers::auto_process_list_server_removals", 10, 7);
|
167 |
+
add_action("ws_plugin__s2member_during_collective_eots", "c_ws_plugin__s2member_list_servers::auto_process_list_server_removals", 10, 4);
|
168 |
+
/**/
|
169 |
+
add_filter("ws_plugin__s2member_content_redirect_status", "c_ws_plugin__s2member_utils_urls::redirect_browsers_using_302_status");
|
170 |
+
/**/
|
171 |
+
add_action("bbp_activation", "c_ws_plugin__s2member_roles_caps::config_roles", 11);
|
|
|
|
|
172 |
/*
|
173 |
Register the activation | de-activation routines.
|
174 |
*/
|
175 |
+
register_activation_hook($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["plugin_basename"], "c_ws_plugin__s2member_installation::activate");
|
176 |
+
register_deactivation_hook($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["plugin_basename"], "c_ws_plugin__s2member_installation::deactivate");
|
177 |
?>
|
includes/menu-pages/code-samples/jwplayer-standard-mp4.x-php
CHANGED
@@ -1,22 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div id="jw-container">JW Player® appears here.</div>
|
2 |
-
<script type="text/javascript" src="
|
3 |
<script type="text/javascript">
|
4 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
5 |
[
|
6 |
/* First try psuedo-streaming with Flash® player. */
|
7 |
-
{type: "flash", provider: "http", src: "
|
8 |
-
config: {file: "/wp-content/plugins/s2member-files/s2member-file-inline
|
9 |
-
/* Shortcode equivalent: [s2File rewrite="yes" inline="yes" download="
|
10 |
|
11 |
/* Else, try an HTML5 video tag. */
|
12 |
{type: "html5", provider: "video",
|
13 |
-
config: {file: "/wp-content/plugins/s2member-files/s2member-file-inline
|
14 |
-
/* Shortcode equivalent: [s2File rewrite="yes" inline="yes" download="
|
15 |
|
16 |
/* Else, this is a safe fallback. */
|
17 |
{type: "download", /* Download the file. */
|
18 |
-
config: {file: "/wp-content/plugins/s2member-files/s2member-file-inline
|
19 |
-
/* Shortcode equivalent: [s2File rewrite="yes" inline="yes" download="
|
20 |
],
|
21 |
/* Set video dimensions. */ width: 480, height: 270
|
22 |
});
|
1 |
+
<?php
|
2 |
+
// Configuration.
|
3 |
+
$config["jwplayer"] = "/jwplayer/"; // Relative URL path to JW Player files directory.
|
4 |
+
$config["mp4_video_file_name"] = "video.mp4"; // Name of your MP4 test file.
|
5 |
+
// Don't edit anything else below unless you know what you're doing.
|
6 |
+
?>
|
7 |
+
|
8 |
<div id="jw-container">JW Player® appears here.</div>
|
9 |
+
<script type="text/javascript" src="<?php echo $config["jwplayer"]; ?>jwplayer.js"></script>
|
10 |
<script type="text/javascript">
|
11 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
12 |
[
|
13 |
/* First try psuedo-streaming with Flash® player. */
|
14 |
+
{type: "flash", provider: "http", src: "<?php echo $config["jwplayer"]; ?>player.swf",
|
15 |
+
config: {file: "/wp-content/plugins/s2member-files/s2member-file-inline/<?php echo $config["mp4_video_file_name"]; ?>"}},
|
16 |
+
/* Shortcode equivalent: [s2File rewrite="yes" inline="yes" download="<?php echo $config["mp4_video_file_name"]; ?>" /] */
|
17 |
|
18 |
/* Else, try an HTML5 video tag. */
|
19 |
{type: "html5", provider: "video",
|
20 |
+
config: {file: "/wp-content/plugins/s2member-files/s2member-file-inline/<?php echo $config["mp4_video_file_name"]; ?>"}},
|
21 |
+
/* Shortcode equivalent: [s2File rewrite="yes" inline="yes" download="<?php echo $config["mp4_video_file_name"]; ?>" /] */
|
22 |
|
23 |
/* Else, this is a safe fallback. */
|
24 |
{type: "download", /* Download the file. */
|
25 |
+
config: {file: "/wp-content/plugins/s2member-files/s2member-file-inline/<?php echo $config["mp4_video_file_name"]; ?>"}}
|
26 |
+
/* Shortcode equivalent: [s2File rewrite="yes" inline="yes" download="<?php echo $config["mp4_video_file_name"]; ?>" /] */
|
27 |
],
|
28 |
/* Set video dimensions. */ width: 480, height: 270
|
29 |
});
|
includes/menu-pages/code-samples/jwplayer-streaming-mp4-sca.x-php
CHANGED
@@ -1,11 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div id="jw-container">JW Player® appears here.</div>
|
2 |
-
<script type="text/javascript" src="
|
3 |
|
4 |
<script type="text/javascript">
|
5 |
/* The Shortcode here will return a JSON object for JavaScript notation. */
|
6 |
/* A direct URL to the RTMP source; counting the file against the current User in real-time. */
|
7 |
/* API Shortcode `s2File` returns a null object if access is denied to the current User/Member. */
|
8 |
-
var mp4 = [s2File download="
|
9 |
</script>
|
10 |
|
11 |
<script type="text/javascript">
|
@@ -14,7 +21,7 @@
|
|
14 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
15 |
[
|
16 |
/* First try real-time streaming with Flash® player. */
|
17 |
-
{type: "flash", provider: "rtmp", src: "
|
18 |
config: {streamer: mp4['streamer'], file: mp4['file']}},
|
19 |
|
20 |
/* Else, try an HTML5 video tag. */
|
1 |
+
<?php
|
2 |
+
// Configuration.
|
3 |
+
$config["jwplayer"] = "/jwplayer/"; // Relative URL path to JW Player files directory.
|
4 |
+
$config["mp4_video_file_name"] = "video.mp4"; // Name of your MP4 test file.
|
5 |
+
// Don't edit anything else below unless you know what you're doing.
|
6 |
+
?>
|
7 |
+
|
8 |
<div id="jw-container">JW Player® appears here.</div>
|
9 |
+
<script type="text/javascript" src="<?php echo $config["jwplayer"]; ?>jwplayer.js"></script>
|
10 |
|
11 |
<script type="text/javascript">
|
12 |
/* The Shortcode here will return a JSON object for JavaScript notation. */
|
13 |
/* A direct URL to the RTMP source; counting the file against the current User in real-time. */
|
14 |
/* API Shortcode `s2File` returns a null object if access is denied to the current User/Member. */
|
15 |
+
var mp4 = [s2File download="<?php echo $config["mp4_video_file_name"]; ?>" url_to_storage_source="true" count_against_user="true" get_streamer_json="true" /];
|
16 |
</script>
|
17 |
|
18 |
<script type="text/javascript">
|
21 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
22 |
[
|
23 |
/* First try real-time streaming with Flash® player. */
|
24 |
+
{type: "flash", provider: "rtmp", src: "<?php echo $config["jwplayer"]; ?>player.swf",
|
25 |
config: {streamer: mp4['streamer'], file: mp4['file']}},
|
26 |
|
27 |
/* Else, try an HTML5 video tag. */
|
includes/menu-pages/code-samples/jwplayer-streaming-mp4-webm.x-php
CHANGED
@@ -1,9 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div id="jw-container">JW Player® appears here.</div>
|
2 |
-
<script type="text/javascript" src="
|
3 |
|
4 |
<?php /* A direct URL to the RTMP source; counting the file against the current User in real-time. */
|
5 |
-
$mp4_cfg = array ("file_download" => "
|
6 |
-
$webm_cfg = array ("file_download" => "
|
7 |
|
8 |
<?php /* API Function `s2member_file_download_url()` returns false if access is denied to the current User. */
|
9 |
if (($mp4 = s2member_file_download_url ($mp4_cfg, "get-streamer-array"))
|
@@ -13,7 +21,7 @@ if (($mp4 = s2member_file_download_url ($mp4_cfg, "get-streamer-array"))
|
|
13 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
14 |
[
|
15 |
/* First try real-time streaming with Flash® player. */
|
16 |
-
{type: "flash", provider: "rtmp", src: "
|
17 |
config: {streamer: "<?php echo $mp4["streamer"]; ?>", file: "<?php echo $mp4["file"]; ?>"}},
|
18 |
|
19 |
/* Else, try an HTML5 video tag with the `mp4` file. */
|
1 |
+
<?php
|
2 |
+
// Configuration.
|
3 |
+
$config["jwplayer"] = "/jwplayer/"; // Relative URL path to JW Player files directory.
|
4 |
+
$config["mp4_video_file_name"] = "video.mp4"; // Name of your MP4 test file.
|
5 |
+
$config["webm_video_file_name"] = "video.webm"; // Name of your WEBM test file.
|
6 |
+
// Don't edit anything else below unless you know what you're doing.
|
7 |
+
?>
|
8 |
+
|
9 |
<div id="jw-container">JW Player® appears here.</div>
|
10 |
+
<script type="text/javascript" src="<?php echo $config["jwplayer"]; ?>jwplayer.js"></script>
|
11 |
|
12 |
<?php /* A direct URL to the RTMP source; counting the file against the current User in real-time. */
|
13 |
+
$mp4_cfg = array ("file_download" => $config["mp4_video_file_name"], "url_to_storage_source" => true, "count_against_user" => true);
|
14 |
+
$webm_cfg = array ("file_download" => $config["webm_video_file_name"], "url_to_storage_source" => true /* Don't count variations. */); ?>
|
15 |
|
16 |
<?php /* API Function `s2member_file_download_url()` returns false if access is denied to the current User. */
|
17 |
if (($mp4 = s2member_file_download_url ($mp4_cfg, "get-streamer-array"))
|
21 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
22 |
[
|
23 |
/* First try real-time streaming with Flash® player. */
|
24 |
+
{type: "flash", provider: "rtmp", src: "<?php echo $config["jwplayer"]; ?>player.swf",
|
25 |
config: {streamer: "<?php echo $mp4["streamer"]; ?>", file: "<?php echo $mp4["file"]; ?>"}},
|
26 |
|
27 |
/* Else, try an HTML5 video tag with the `mp4` file. */
|
includes/menu-pages/code-samples/jwplayer-streaming-mp4.x-php
CHANGED
@@ -1,8 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div id="jw-container">JW Player® appears here.</div>
|
2 |
-
<script type="text/javascript" src="
|
3 |
|
4 |
<?php /* A direct URL to the RTMP source; counting the file against the current User in real-time. */
|
5 |
-
$cfg = array ("file_download" => "
|
6 |
|
7 |
<?php /* API Function `s2member_file_download_url()` returns false if access is denied to the current User. */
|
8 |
if (($mp4 = s2member_file_download_url ($cfg, "get-streamer-array"))) { ?>
|
@@ -11,7 +18,7 @@ if (($mp4 = s2member_file_download_url ($cfg, "get-streamer-array"))) { ?>
|
|
11 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
12 |
[
|
13 |
/* First try real-time streaming with Flash® player. */
|
14 |
-
{type: "flash", provider: "rtmp", src: "
|
15 |
config: {streamer: "<?php echo $mp4["streamer"]; ?>", file: "<?php echo $mp4["file"]; ?>"}},
|
16 |
|
17 |
/* Else, try an HTML5 video tag. */
|
1 |
+
<?php
|
2 |
+
// Configuration.
|
3 |
+
$config["jwplayer"] = "/jwplayer/"; // Relative URL path to JW Player files directory.
|
4 |
+
$config["mp4_video_file_name"] = "video.mp4"; // Name of your MP4 test file.
|
5 |
+
// Don't edit anything else below unless you know what you're doing.
|
6 |
+
?>
|
7 |
+
|
8 |
<div id="jw-container">JW Player® appears here.</div>
|
9 |
+
<script type="text/javascript" src="<?php echo $config["jwplayer"]; ?>jwplayer.js"></script>
|
10 |
|
11 |
<?php /* A direct URL to the RTMP source; counting the file against the current User in real-time. */
|
12 |
+
$cfg = array ("file_download" => $config["mp4_video_file_name"], "url_to_storage_source" => true, "count_against_user" => true); ?>
|
13 |
|
14 |
<?php /* API Function `s2member_file_download_url()` returns false if access is denied to the current User. */
|
15 |
if (($mp4 = s2member_file_download_url ($cfg, "get-streamer-array"))) { ?>
|
18 |
jwplayer("jw-container").setup({modes: /* JW Player®. */
|
19 |
[
|
20 |
/* First try real-time streaming with Flash® player. */
|
21 |
+
{type: "flash", provider: "rtmp", src: "<?php echo $config["jwplayer"]; ?>player.swf",
|
22 |
config: {streamer: "<?php echo $mp4["streamer"]; ?>", file: "<?php echo $mp4["file"]; ?>"}},
|
23 |
|
24 |
/* Else, try an HTML5 video tag. */
|
includes/menu-pages/code-samples/s2member-paid-registration-time-examples.x-php
CHANGED
@@ -20,11 +20,14 @@
|
|
20 |
|
21 |
This is some content that will be displayed to all Members that have paid you at some point.
|
22 |
|
23 |
-
<?php if
|
|
|
|
|
|
|
24 |
Drip content to Members that started paying you at Level#1, at least 30 days ago.
|
25 |
<?php } ?>
|
26 |
|
27 |
-
<?php if(
|
28 |
Drip more content to Members that started paying you at Level#1, at least 60 days ago.
|
29 |
<?php } ?>
|
30 |
|
20 |
|
21 |
This is some content that will be displayed to all Members that have paid you at some point.
|
22 |
|
23 |
+
<?php /* Timestamp at Level #1, or `0` if they've NOT yet paid for Level #1. */
|
24 |
+
$level1_payment_time = s2member_paid_registration_time("level1"); ?>
|
25 |
+
|
26 |
+
<?php if($level1_payment_time && $level1_payment_time <= ($_30_days_ago = strtotime("-30 days"))){ ?>
|
27 |
Drip content to Members that started paying you at Level#1, at least 30 days ago.
|
28 |
<?php } ?>
|
29 |
|
30 |
+
<?php if($level1_payment_time && $level1_payment_time <= ($_60_days_ago = strtotime("-60 days"))){ ?>
|
31 |
Drip more content to Members that started paying you at Level#1, at least 60 days ago.
|
32 |
<?php } ?>
|
33 |
|
includes/menu-pages/down-ops.inc.php
CHANGED
@@ -273,7 +273,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
273 |
/**/
|
274 |
echo '<th style="padding-top:0;">'."\n";
|
275 |
echo '<label for="ws-plugin--s2member-amazon-s3-files-bucket">'."\n";
|
276 |
-
echo 'Amazon® S3 File Bucket ( where protected files are ):'."\n";
|
277 |
echo '</label>'."\n";
|
278 |
echo '</th>'."\n";
|
279 |
/**/
|
@@ -282,7 +282,8 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
282 |
/**/
|
283 |
echo '<td>'."\n";
|
284 |
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_amazon_s3_files_bucket" id="ws-plugin--s2member-amazon-s3-files-bucket" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"]).'" /><br />'."\n";
|
285 |
-
echo 'Your Amazon® S3 Bucket will be used, instead of the <code>/'.esc_html(c_ws_plugin__s2member_utils_dirs::basename_dir_app_data($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"])).'/</code> directory
|
|
|
286 |
echo '</td>'."\n";
|
287 |
/**/
|
288 |
echo '</tr>'."\n";
|
273 |
/**/
|
274 |
echo '<th style="padding-top:0;">'."\n";
|
275 |
echo '<label for="ws-plugin--s2member-amazon-s3-files-bucket">'."\n";
|
276 |
+
echo 'Amazon® S3 File Bucket Name ( where protected files are ):'."\n";
|
277 |
echo '</label>'."\n";
|
278 |
echo '</th>'."\n";
|
279 |
/**/
|
282 |
/**/
|
283 |
echo '<td>'."\n";
|
284 |
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_amazon_s3_files_bucket" id="ws-plugin--s2member-amazon-s3-files-bucket" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["amazon_s3_files_bucket"]).'" /><br />'."\n";
|
285 |
+
echo 'Your Amazon® S3 Bucket will be used, instead of the <code>/'.esc_html(c_ws_plugin__s2member_utils_dirs::basename_dir_app_data($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"])).'/</code> directory.<br />'."\n";
|
286 |
+
echo 'Please type the name of your Bucket. Ex: <code>mys3bucket</code>'."\n";
|
287 |
echo '</td>'."\n";
|
288 |
/**/
|
289 |
echo '</tr>'."\n";
|
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, input.ws-plugin--s2member-reset-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");var levels='<?php echo (int)$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; ?>';var resetUpdate=($this.hasClass("ws-plugin--s2member-reset-roles-button"))?"Reset":"Update";$.post(ajaxurl,{action:"ws_plugin__s2member_update_roles_via_ajax",ws_plugin__s2member_update_roles_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="1"){alert("s2Member's Roles/Capabilities "+((resetUpdate.toLowerCase()==="reset")?"have been successfully reset":"updated successfully")+".\nYour installation of s2Member has Membership Levels 0-"+levels+"."),$this.val(resetUpdate+" Roles/Capabilities")}else{if(response==="l"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val(resetUpdate+" Roles/Capabilities")}else{alert("Sorry, your request failed.\nAccess denied. Do you have the ability to `create_users`?"),$this.val(resetUpdate+" Roles/Capabilities")}}});return false})}if(location.href.match(/page\=ws-plugin--s2member-mms-ops/)){$("select#ws-plugin--s2member-mms-registration-file").change(function(){if($(this).val()==="wp-signup"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((gv==="all")?"show":"hide")]();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((gv==="all")?((l0v>0)?l0v:"1"):"0"))}else{if($(this).val()==="wp-login"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0").hide();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val("0")}}}).trigger("change");$("select#ws-plugin--s2member-mms-registration-grants").change(function(){$("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_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 unhappy Customers. Data corruption WILL occur! For your safety, s2Member keeps a history of the last 10 Keys that you've used. If you get yourself into a real situation, s2Member will let you revert back to a previous Key.")){$("input#ws-plugin--s2member-sec-encryption-key").removeAttr("disabled")}return false};ws_plugin__s2member_securityKeyHistory=function(){$("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};$("select#ws-plugin--s2member-new-user-emails-enabled").change(function(){var $pluggable=$("input#ws-plugin--s2member-pluggables-wp-new-user-notification"),$this=$(this),$newUserEmails=$("div#ws-plugin--s2member-new-user-emails");if($pluggable.val()==="0"||$this.val()==="0"){($pluggable.val()==="0")?$this.attr("disabled","disabled"):$this.removeAttr("disabled");$(":input",$newUserEmails).attr("disabled","disabled"),$newUserEmails.css("opacity","0.5")}else{$this.removeAttr("disabled"),$(":input",$newUserEmails).removeAttr("disabled"),$newUserEmails.css("opacity","")}}).trigger("change");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" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);">';form+='<option value="no"'+((field.section==="no")?' selected="selected"':"")+'">No ( this Field flows normally )</option>';form+='<option value="yes"'+((field.section==="yes")?' selected="selected"':"")+'">Yes ( this Field begins a new section )</option>';form+="</select><br />";form+="<small>Optional. Allows Fields to be grouped into sections.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+'><td colspan="2"><hr /></td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+">";form+='<td colspan="2">';form+="Title for this new section? ( optional )<br />";form+='<input type="text" property="sectitle" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle" value="'+esc_attr(field.sectitle)+'" /><br />';form+="<small>If empty, a simple divider will be used by default.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-type"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">Form Field Type: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<select property="type" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);">';form+='<option value="text"'+((field.type==="text")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("text"))+"</option>";form+='<option value="textarea"'+((field.type==="textarea")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("textarea"))+"</option>";form+='<option value="select"'+((field.type==="select")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("select"))+"</option>";form+='<option value="selects"'+((field.type==="selects")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("selects"))+"</option>";form+='<option value="checkbox"'+((field.type==="checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkbox"))+"</option>";form+='<option value="pre_checkbox"'+((field.type==="pre_checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("pre_checkbox"))+"</option>";form+='<option value="checkboxes"'+((field.type==="checkboxes")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkboxes"))+"</option>";form+='<option value="radios"'+((field.type==="radios")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("radios"))+"</option>";form+="</select><br />";form+="<small>The options below may change, based on the Field Type you choose here.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-label"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">Field Label/Desc: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<input type="text" property="label" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label" value="'+esc_attr(field.label)+'" /><br />';form+="<small>Examples: <code>Choose Country</code>, <code>Street Address</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-id"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">Unique Field ID: *</label></label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<input type="text" property="id" maxlength="25" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id" value="'+esc_attr(field.id)+'" /><br />';form+="<small>Examples: <code>country_code</code>, <code>street_address</code></small><br />";form+='<small>e.g. <code>[s2Get user_field="country_code" /]</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-required"><td colspan="2"> </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" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt" rows="1">'+esc_html(field.deflt)+"</textarea><br />";form+="<small>Default value before user input is received.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">Option Configuration File: * ( one option per line )</label><br />';form+="<small>Use a pipe <code>|</code> delimited format: <code>option value|option label</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="options" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options" rows="3">'+esc_html(field.options)+"</textarea><br />";form+="Here is a quick example:<br />";form+="<small>You can also specify a <em>default</em> option:</small><br />";form+="<code>US|United States|default</code><br />";form+="<code>CA|Canada</code><br />";form+="<code>VI|Virgin Islands (U.S.)</code>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2"> </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" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels" value="'+esc_attr(field.levels)+'" /><br />';form+="<small>Please use comma-delimited Level #'s: <code>0,1,2,3,4</code> or type: <code>all</code>.</small><br />";form+="<small>This allows you to enable this field - only at specific Membership Levels.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable"><td colspan="2"> </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="no-always-invisible"'+((field.editable==="no-always-invisible")?' selected="selected"':"")+'">No ( uneditable & totally invisible, both during & 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" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes" value="'+esc_attr(field.classes)+'" /><br />';form+="<small>Example: <code>my-style-1 my-style-2</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">CSS Styles: ( optional )</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<input type="text" property="styles" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles" value="'+esc_attr(field.styles)+'" /><br />';form+="<small>Example: <code>color:#000000; background:#FFFFFF;</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">Other Attributes: ( optional )</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<input type="text" property="attrs" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs" value="'+esc_attr(field.attrs)+'" /><br />';form+='<small>Example: <code>onkeyup="" onblur=""</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons">';form+='<td align="left">';form+='<input type="button" value="Cancel" onclick="ws_plugin__s2member_customRegFieldCancel();" />';form+="</td>";form+='<td align="right">';form+='<input type="button" value="'+((editing)?"Update This Field":"Create Registration Field")+'" onclick="'+((editing)?"ws_plugin__s2member_customRegFieldUpdate("+index+");":"ws_plugin__s2member_customRegFieldCreate();")+'" />';form+="</td>";form+="</tr>";form+="</tbody>";form+="</table>";form+="<div>";$("body").append(form);tb_show(((editing)?"Editing Registration/Profile Field":"New Custom Registration/Profile Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var buildTable=function(){var l=fields.length,i=0,html="",eo="o";html+="<tbody>";html+="<tr>";html+="<th>Order</th>";html+="<th>Field Type</th>";html+="<th>Unique ID</th>";html+="<th>Required</th>";html+="<th>Levels</th>";html+="<th>- Tools -</th>";html+="</tr>";if(fields.length>0){for(i=0;i<fields.length;i++){html+='<tr class="'+esc_attr((eo=(eo==="o")?"e":"o"))+((fields[i].section==="yes")?" s":"")+" ws-plugin--s2member-custom-reg-field-configuration-table-row-"+i+'">';html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-move-up" href="#" onclick="ws_plugin__s2member_customRegFieldMoveUp('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-move-down" href="#" onclick="ws_plugin__s2member_customRegFieldMoveDown('+i+'); return false;"></a></td>';html+='<td nowrap="nowrap">'+esc_html(fieldTypeDesc(fields[i].type))+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].id)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].required)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].levels)+"</td>";html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-edit" href="#" onclick="ws_plugin__s2member_customRegFieldEdit('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-delete" href="#" onclick="ws_plugin__s2member_customRegFieldDelete('+i+'); return false;"></a></td>';html+="</tr>"}}else{html+="<tr>";html+='<td colspan="6">No Custom Fields are configured.</td>';html+="</tr>"}html+="</tbody>";$table.html(html)};buildTools(),buildTable()})()}}if(location.href.match(/page\=ws-plugin--s2member-res-ops/)){$("input#ws-plugin--s2member-brute-force-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's Brute Force Restriction Logs have all been reset."),$this.val("Reset Brute Force Logs")});return false});$("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's IP Restriction Logs have all been reset."),$this.val("Reset IP Restriction Logs")});return false});$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').change(function(){var thisChange=$(this).val();$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="all"&&this.checked){$this.nextAll(checkboxes).attr({checked:"checked",disabled:"disabled"})}else{if(val==="all"&&!this.checked){$this.nextAll(checkboxes).removeAttr("disabled");(thisChange==="all")?$this.nextAll(checkboxes).removeAttr("checked"):null}}})}).last().trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-down-ops/)){var updateCloudFrontPrivateKey=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyEntry=$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry");var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyEntryValue=$.trim($visiblePrivateKeyEntry.val());if((hiddenPrivateKeyValue&&!visiblePrivateKeyEntryValue)||visiblePrivateKeyEntryValue.match(/[^\r\n\u25CF]/)){$hiddenPrivateKey.val(visiblePrivateKeyEntryValue),$visiblePrivateKeyEntry.val(visiblePrivateKeyEntryValue.replace(/[^\r\n]/g,String.fromCharCode(9679)))}};$("form#ws-plugin--s2member-options-form").submit(updateCloudFrontPrivateKey);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontPrivateKey).trigger("change");var updateCloudFrontDistroCfgs=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyId=$("input#ws-plugin--s2member-amazon-cf-files-private-key-id");var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistrosStatus=$("input#ws-plugin--s2member-amazon-cf-files-distros-auto-config-status");var autoConfigDistrosStatusValue=$.trim($autoConfigDistrosStatus.val());var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyIdValue=$.trim($visiblePrivateKeyId.val());var hiddenPrivateKeyPrevConfigValue=$.trim($hiddenPrivateKey.attr("data-s-prev-config-value")),visiblePrivateKeyIdPrevConfigValue=$.trim($visiblePrivateKeyId.attr("data-s-prev-config-value"));if(autoConfigDistrosStatusValue==="configured"&&((visiblePrivateKeyIdPrevConfigValue&&visiblePrivateKeyIdValue!==visiblePrivateKeyIdPrevConfigValue)||(hiddenPrivateKeyPrevConfigValue&&hiddenPrivateKeyValue!==hiddenPrivateKeyPrevConfigValue))){alert("s2Member will need to delete and re-configure your Amazon® CloudFront distributions if you change this. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}else{if(autoConfigDistrosStatusValue!=="configured"&&visiblePrivateKeyIdValue&&hiddenPrivateKeyValue){alert("s2Member will need to auto-configure your Amazon® CloudFront distributions for you. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}}};$("input#ws-plugin--s2member-amazon-cf-files-private-key-id").change(updateCloudFrontDistroCfgs);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontDistroCfgs);$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros-w-cnames").change(function(){var $this=$(this),thisChecked=(this.checked)?true:false;var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistroCnames=$("div#ws-plugin--s2member-amazon-cf-files-auto-configure-distro-cnames");(thisChecked)?$autoConfigDistroCnames.show():$autoConfigDistroCnames.hide();(thisChecked)?$autoConfigDistros.attr("checked","checked"):null}).trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){$("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var $this=$(this),val=$this.val();var $viaCron=$("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(val==2){$viaCron.show()}else{$viaCron.hide()}})}if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){$("div.ws-menu-page select[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification)-term$/)}).change(function(){var button=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var trialDisabled=($(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;$("p#ws-plugin--s2member-"+button+"-trial-line").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-trial-then").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-20p-rule").css("display",(trialDisabled?"none":""));(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-period").val(0):null;(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-amount").val("0.00"):null});$("div.ws-menu-page input[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification|ccap)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^(-all|-al|-a|-)[;,]*/gi,""),_all=(this.value.match(/^(-all|-al|-a|-)[;,]*/i))?"-all,":"";if(value.match(/[^a-z_0-9,]/)){this.value=_all+$.trim($.trim(value).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(button){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="",labels={};eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");var shortCode=$("input#ws-plugin--s2member-"+button+"-shortcode");var code=$("textarea#ws-plugin--s2member-"+button+"-button");var modLevel=$("select#ws-plugin--s2member-modification-level");var level=(button==="modification")?modLevel.val().split(":",2)[1]:button.replace(/^level/,"");var label=labels["level"+level].replace(/"/g,"");var desc=$.trim($("input#ws-plugin--s2member-"+button+"-desc").val().replace(/"/g,""));var trialAmount=$("input#ws-plugin--s2member-"+button+"-trial-amount").val().replace(/[^0-9\.]/g,"");var trialPeriod=$("input#ws-plugin--s2member-"+button+"-trial-period").val().replace(/[^0-9]/g,"");var trialTerm=$("select#ws-plugin--s2member-"+button+"-trial-term").val().replace(/[^A-Z]/g,"");var regAmount=$("input#ws-plugin--s2member-"+button+"-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var regRecurTimes="",regRecurRetry="1";var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-"+button+"-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-"+button+"-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&®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_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"';shortCodeTemplateAttrs+=' ta="'+esc_attr(trialAmount)+'" tp="'+esc_attr(trialPeriod)+'" tt="'+esc_attr(trialTerm)+'" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'" rrt="'+esc_attr(regRecurTimes)+'" rra="'+esc_attr(regRecurRetry)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((button==="modification")?"1":"0")+'"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+esc_attr(regRecur)+'"'));code.html(code.val().replace(/ name\="srt" value\="(.*?)"/,' name="srt" value="'+esc_attr(regRecurTimes)+'"'));code.html(code.val().replace(/ name\="sra" value\="(.*?)"/,' name="sra" value="'+esc_attr(regRecurRetry)+'"'));code.html(code.val().replace(/ name\="a1" value\="(.*?)"/,' name="a1" value="'+esc_attr(trialAmount)+'"'));code.html(code.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+esc_attr(trialPeriod)+'"'));code.html(code.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+esc_attr(trialTerm)+'"'));code.html(code.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+esc_attr(regPeriod)+'"'));code.html(code.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+esc_attr(regTerm)+'"'));$("div#ws-plugin--s2member-"+button+"-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Modification Buttons should be displayed to existing Users/Members, and they should be logged-in, BEFORE clicking this Button."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalCcapButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-ccap-shortcode");var code=$("textarea#ws-plugin--s2member-ccap-button");var desc=$.trim($("input#ws-plugin--s2member-ccap-desc").val().replace(/"/g,""));var regAmount=$("input#ws-plugin--s2member-ccap-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-ccap-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-ccap-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-ccap-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-ccap-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-ccap-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();var levelCcapsPer=(regRecur==="BN"&®Term!=="L")?"*:"+cCaps+":"+regPeriod+" "+regTerm:"*:"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!cCaps||cCaps==="-all"){alert("— Oops, a slight problem: —\n\nPlease provide at least one Custom Capability.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}shortCodeTemplateAttrs+='level="*" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-ccap-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-sp-shortcode");var code=$("textarea#ws-plugin--s2member-sp-button");var leading=$("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var regAmount=$("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var desc=$.trim($("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -> Restriction Options -> Specific Post/Page Access.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}var spIdsHours="sp:"+ids+":"+hours;shortCodeTemplateAttrs+='sp="1" ids="'+esc_attr(ids)+'" exp="'+esc_attr(hours)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(spIdsHours)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-sp-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your WordPress® Editor.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalRegLinkGenerate=function(){var level=$("select#ws-plugin--s2member-reg-link-level").val().replace(/[^0-9]/g,"");var subscrID=$.trim($("input#ws-plugin--s2member-reg-link-subscr-id").val());var custom=$.trim($("input#ws-plugin--s2member-reg-link-custom").val());var cCaps=$.trim($.trim($("input#ws-plugin--s2member-reg-link-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());var fixedTerm=$.trim($("input#ws-plugin--s2member-reg-link-fixed-term").val().replace(/[^A-Z 0-9]/gi,"").toUpperCase());var $link=$("p#ws-plugin--s2member-reg-link"),$loading=$("img#ws-plugin--s2member-reg-link-loading");var levelCcapsPer=(fixedTerm&&!fixedTerm.match(/L$/))?level+":"+cCaps+":"+fixedTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!subscrID){alert("— Oops, a slight problem: —\n\nPaid Subscr. ID is a required value.");return false}else{if(!custom||custom.indexOf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq ($_SERVER["HTTP_HOST"]); ?>')!==0){alert("— Oops, a slight problem: —\n\nThe Custom Value MUST start with your domain name.");return false}else{if(fixedTerm&&!fixedTerm.match(/^[1-9]+ (D|W|M|Y|L)$/)){alert("— Oops, a slight problem: —\n\nThe Fixed Term Length is not formatted properly.");return false}}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_reg_access_link_via_ajax",ws_plugin__s2member_reg_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-reg-access-link-via-ajax")); ?>',s2member_reg_access_link_subscr_gateway:"paypal",s2member_reg_access_link_subscr_id:subscrID,s2member_reg_access_link_custom:custom,s2member_reg_access_link_item_number:levelCcapsPer},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var leading=$("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var $link=$("p#ws-plugin--s2member-sp-link"),$loading=$("img#ws-plugin--s2member-sp-link-loading");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -> Restriction Options -> Specific Post/Page Access.");return false}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:ids,s2member_sp_access_link_hours:hours},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false}}if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){$("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var $this=$(this),val=$this.val();var $rows=$("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var $prevImg=$("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(val<=0){$rows.css("display","none"),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(val==1){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(val==2){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}});$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').change(function(){var thisChange=$(this).val(),checkedIndexes=[];$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="removal-deletion"&&this.checked){$this.nextAll(checkboxes).slice(0,2).attr({checked:"checked",disabled:"disabled"})}else{if(val==="removal-deletion"&&!this.checked){$this.nextAll(checkboxes).slice(0,2).removeAttr("disabled");(thisChange==="removal-deletion")?$this.nextAll(checkboxes).slice(0,2).removeAttr("checked"):null}else{if(val==="modification"&&this.checked){$this.nextAll(checkboxes).slice(0,3).attr({checked:"checked",disabled:"disabled"})}else{if(val==="modification"&&!this.checked){(thisChange==="modification")?$this.nextAll(checkboxes).slice(0,3).removeAttr("checked"):null;$this.nextAll(checkboxes).slice(0,3).removeAttr("disabled")}}}}}).each(function(index){(this.checked)?checkedIndexes.push(index):null});$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").removeAttr("disabled");if($.inArray(3,checkedIndexes)===-1&&$.inArray(4,checkedIndexes)===-1&&$.inArray(5,checkedIndexes)===-1&&$.inArray(6,checkedIndexes)===-1){$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").attr("disabled","disabled")}}).last().trigger("change")}});
|
1 |
+
jQuery(document).ready(function($){var esc_attr=esc_html=function(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, input.ws-plugin--s2member-reset-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");var levels='<?php echo (int)$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; ?>';var resetUpdate=($this.hasClass("ws-plugin--s2member-reset-roles-button"))?"Reset":"Update";$.post(ajaxurl,{action:"ws_plugin__s2member_update_roles_via_ajax",ws_plugin__s2member_update_roles_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="1"){alert("s2Member's Roles/Capabilities "+((resetUpdate.toLowerCase()==="reset")?"have been successfully reset":"updated successfully")+".\nYour installation of s2Member has Membership Levels 0-"+levels+"."),$this.val(resetUpdate+" Roles/Capabilities")}else{if(response==="l"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val(resetUpdate+" Roles/Capabilities")}else{alert("Sorry, your request failed.\nAccess denied. Do you have the ability to `create_users`?"),$this.val(resetUpdate+" Roles/Capabilities")}}});return false})}if(location.href.match(/page\=ws-plugin--s2member-mms-ops/)){$("select#ws-plugin--s2member-mms-registration-file").change(function(){if($(this).val()==="wp-signup"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((gv==="all")?"show":"hide")]();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((gv==="all")?((l0v>0)?l0v:"1"):"0"))}else{if($(this).val()==="wp-login"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0").hide();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val("0")}}}).trigger("change");$("select#ws-plugin--s2member-mms-registration-grants").change(function(){$("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_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 unhappy Customers. Data corruption WILL occur! For your safety, s2Member keeps a history of the last 10 Keys that you've used. If you get yourself into a real situation, s2Member will let you revert back to a previous Key.")){$("input#ws-plugin--s2member-sec-encryption-key").removeAttr("disabled")}return false};ws_plugin__s2member_securityKeyHistory=function(){$("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};$("select#ws-plugin--s2member-new-user-emails-enabled").change(function(){var $pluggable=$("input#ws-plugin--s2member-pluggables-wp-new-user-notification"),$this=$(this),$newUserEmails=$("div#ws-plugin--s2member-new-user-emails");if($pluggable.val()==="0"||$this.val()==="0"){($pluggable.val()==="0")?$this.attr("disabled","disabled"):$this.removeAttr("disabled");$(":input",$newUserEmails).attr("disabled","disabled"),$newUserEmails.css("opacity","0.5")}else{$this.removeAttr("disabled"),$(":input",$newUserEmails).removeAttr("disabled"),$newUserEmails.css("opacity","")}}).trigger("change");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" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);">';form+='<option value="no"'+((field.section==="no")?' selected="selected"':"")+'">No ( this Field flows normally )</option>';form+='<option value="yes"'+((field.section==="yes")?' selected="selected"':"")+'">Yes ( this Field begins a new section )</option>';form+="</select><br />";form+="<small>Optional. Allows Fields to be grouped into sections.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+'><td colspan="2"><hr /></td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+">";form+='<td colspan="2">';form+="Title for this new section? ( optional )<br />";form+='<input type="text" property="sectitle" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle" value="'+esc_attr(field.sectitle)+'" /><br />';form+="<small>If empty, a simple divider will be used by default.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-type"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">Form Field Type: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<select property="type" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);">';form+='<option value="text"'+((field.type==="text")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("text"))+"</option>";form+='<option value="textarea"'+((field.type==="textarea")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("textarea"))+"</option>";form+='<option value="select"'+((field.type==="select")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("select"))+"</option>";form+='<option value="selects"'+((field.type==="selects")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("selects"))+"</option>";form+='<option value="checkbox"'+((field.type==="checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkbox"))+"</option>";form+='<option value="pre_checkbox"'+((field.type==="pre_checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("pre_checkbox"))+"</option>";form+='<option value="checkboxes"'+((field.type==="checkboxes")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkboxes"))+"</option>";form+='<option value="radios"'+((field.type==="radios")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("radios"))+"</option>";form+="</select><br />";form+="<small>The options below may change, based on the Field Type you choose here.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-label"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">Field Label/Desc: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<input type="text" property="label" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label" value="'+esc_attr(field.label)+'" /><br />';form+="<small>Examples: <code>Choose Country</code>, <code>Street Address</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-id"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">Unique Field ID: *</label></label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<input type="text" property="id" maxlength="25" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id" value="'+esc_attr(field.id)+'" /><br />';form+="<small>Examples: <code>country_code</code>, <code>street_address</code></small><br />";form+='<small>e.g. <code>[s2Get user_field="country_code" /]</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-required"><td colspan="2"> </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" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt" rows="1">'+esc_html(field.deflt)+"</textarea><br />";form+="<small>Default value before user input is received.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">Option Configuration File: * ( one option per line )</label><br />';form+="<small>Use a pipe <code>|</code> delimited format: <code>option value|option label</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="options" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options" rows="3">'+esc_html(field.options)+"</textarea><br />";form+="Here is a quick example:<br />";form+="<small>You can also specify a <em>default</em> option:</small><br />";form+="<code>US|United States|default</code><br />";form+="<code>CA|Canada</code><br />";form+="<code>VI|Virgin Islands (U.S.)</code>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2"> </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" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels" value="'+esc_attr(field.levels)+'" /><br />';form+="<small>Please use comma-delimited Level #'s: <code>0,1,2,3,4</code> or type: <code>all</code>.</small><br />";form+="<small>This allows you to enable this field - only at specific Membership Levels.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable"><td colspan="2"> </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="no-always-invisible"'+((field.editable==="no-always-invisible")?' selected="selected"':"")+'">No ( uneditable & totally invisible, both during & 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" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes" value="'+esc_attr(field.classes)+'" /><br />';form+="<small>Example: <code>my-style-1 my-style-2</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">CSS Styles: ( optional )</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<input type="text" property="styles" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles" value="'+esc_attr(field.styles)+'" /><br />';form+="<small>Example: <code>color:#000000; background:#FFFFFF;</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">Other Attributes: ( optional )</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<input type="text" property="attrs" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs" value="'+esc_attr(field.attrs)+'" /><br />';form+='<small>Example: <code>onkeyup="" onblur=""</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons">';form+='<td align="left">';form+='<input type="button" value="Cancel" onclick="ws_plugin__s2member_customRegFieldCancel();" />';form+="</td>";form+='<td align="right">';form+='<input type="button" value="'+((editing)?"Update This Field":"Create Registration Field")+'" onclick="'+((editing)?"ws_plugin__s2member_customRegFieldUpdate("+index+");":"ws_plugin__s2member_customRegFieldCreate();")+'" />';form+="</td>";form+="</tr>";form+="</tbody>";form+="</table>";form+="<div>";$("body").append(form);tb_show(((editing)?"Editing Registration/Profile Field":"New Custom Registration/Profile Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var buildTable=function(){var l=fields.length,i=0,html="",eo="o";html+="<tbody>";html+="<tr>";html+="<th>Order</th>";html+="<th>Field Type</th>";html+="<th>Unique ID</th>";html+="<th>Required</th>";html+="<th>Levels</th>";html+="<th>- Tools -</th>";html+="</tr>";if(fields.length>0){for(i=0;i<fields.length;i++){html+='<tr class="'+esc_attr((eo=(eo==="o")?"e":"o"))+((fields[i].section==="yes")?" s":"")+" ws-plugin--s2member-custom-reg-field-configuration-table-row-"+i+'">';html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-move-up" href="#" onclick="ws_plugin__s2member_customRegFieldMoveUp('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-move-down" href="#" onclick="ws_plugin__s2member_customRegFieldMoveDown('+i+'); return false;"></a></td>';html+='<td nowrap="nowrap">'+esc_html(fieldTypeDesc(fields[i].type))+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].id)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].required)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].levels)+"</td>";html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-edit" href="#" onclick="ws_plugin__s2member_customRegFieldEdit('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-delete" href="#" onclick="ws_plugin__s2member_customRegFieldDelete('+i+'); return false;"></a></td>';html+="</tr>"}}else{html+="<tr>";html+='<td colspan="6">No Custom Fields are configured.</td>';html+="</tr>"}html+="</tbody>";$table.html(html)};buildTools(),buildTable()})()}}if(location.href.match(/page\=ws-plugin--s2member-res-ops/)){$("input#ws-plugin--s2member-brute-force-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's Brute Force Restriction Logs have all been reset."),$this.val("Reset Brute Force Logs")});return false});$("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's IP Restriction Logs have all been reset."),$this.val("Reset IP Restriction Logs")});return false});$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').change(function(){var thisChange=$(this).val();$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="all"&&this.checked){$this.nextAll(checkboxes).attr({checked:"checked",disabled:"disabled"})}else{if(val==="all"&&!this.checked){$this.nextAll(checkboxes).removeAttr("disabled");(thisChange==="all")?$this.nextAll(checkboxes).removeAttr("checked"):null}}})}).last().trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-down-ops/)){var updateCloudFrontPrivateKey=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyEntry=$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry");var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyEntryValue=$.trim($visiblePrivateKeyEntry.val());if((hiddenPrivateKeyValue&&!visiblePrivateKeyEntryValue)||visiblePrivateKeyEntryValue.match(/[^\r\n\u25CF]/)){$hiddenPrivateKey.val(visiblePrivateKeyEntryValue),$visiblePrivateKeyEntry.val(visiblePrivateKeyEntryValue.replace(/[^\r\n]/g,String.fromCharCode(9679)))}};$("form#ws-plugin--s2member-options-form").submit(updateCloudFrontPrivateKey);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontPrivateKey).trigger("change");var updateCloudFrontDistroCfgs=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyId=$("input#ws-plugin--s2member-amazon-cf-files-private-key-id");var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistrosStatus=$("input#ws-plugin--s2member-amazon-cf-files-distros-auto-config-status");var autoConfigDistrosStatusValue=$.trim($autoConfigDistrosStatus.val());var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyIdValue=$.trim($visiblePrivateKeyId.val());var hiddenPrivateKeyPrevConfigValue=$.trim($hiddenPrivateKey.attr("data-s-prev-config-value")),visiblePrivateKeyIdPrevConfigValue=$.trim($visiblePrivateKeyId.attr("data-s-prev-config-value"));if(autoConfigDistrosStatusValue==="configured"&&((visiblePrivateKeyIdPrevConfigValue&&visiblePrivateKeyIdValue!==visiblePrivateKeyIdPrevConfigValue)||(hiddenPrivateKeyPrevConfigValue&&hiddenPrivateKeyValue!==hiddenPrivateKeyPrevConfigValue))){alert("s2Member will need to delete and re-configure your Amazon® CloudFront distributions if you change this. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}else{if(autoConfigDistrosStatusValue!=="configured"&&visiblePrivateKeyIdValue&&hiddenPrivateKeyValue){alert("s2Member will need to auto-configure your Amazon® CloudFront distributions for you. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}}};$("input#ws-plugin--s2member-amazon-cf-files-private-key-id").change(updateCloudFrontDistroCfgs);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontDistroCfgs);$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros-w-cnames").change(function(){var $this=$(this),thisChecked=(this.checked)?true:false;var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistroCnames=$("div#ws-plugin--s2member-amazon-cf-files-auto-configure-distro-cnames");(thisChecked)?$autoConfigDistroCnames.show():$autoConfigDistroCnames.hide();(thisChecked)?$autoConfigDistros.attr("checked","checked"):null}).trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){$("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var $this=$(this),val=$this.val();var $viaCron=$("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(val==2){$viaCron.show()}else{$viaCron.hide()}})}if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){$("div.ws-menu-page select[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification)-term$/)}).change(function(){var button=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var trialDisabled=($(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;$("p#ws-plugin--s2member-"+button+"-trial-line").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-trial-then").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-20p-rule").css("display",(trialDisabled?"none":""));(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-period").val(0):null;(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-amount").val("0.00"):null});$("div.ws-menu-page input[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification|ccap)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^(-all|-al|-a|-)[;,]*/gi,""),_all=(this.value.match(/^(-all|-al|-a|-)[;,]*/i))?"-all,":"";if(value.match(/[^a-z_0-9,]/)){this.value=_all+$.trim($.trim(value).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(button){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="",labels={};eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");var shortCode=$("input#ws-plugin--s2member-"+button+"-shortcode");var code=$("textarea#ws-plugin--s2member-"+button+"-button");var modLevel=$("select#ws-plugin--s2member-modification-level");var level=(button==="modification")?modLevel.val().split(":",2)[1]:button.replace(/^level/,"");var label=labels["level"+level].replace(/"/g,"");var desc=$.trim($("input#ws-plugin--s2member-"+button+"-desc").val().replace(/"/g,""));var trialAmount=$("input#ws-plugin--s2member-"+button+"-trial-amount").val().replace(/[^0-9\.]/g,"");var trialPeriod=$("input#ws-plugin--s2member-"+button+"-trial-period").val().replace(/[^0-9]/g,"");var trialTerm=$("select#ws-plugin--s2member-"+button+"-trial-term").val().replace(/[^A-Z]/g,"");var regAmount=$("input#ws-plugin--s2member-"+button+"-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var regRecurTimes="",regRecurRetry="1";var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-"+button+"-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-"+button+"-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&®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>90){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 90.\nIf you want to offer more than 90 days, please choose Weeks or Months from the drop-down.");return false}else{if(trialTerm==="W"&&trialPeriod>52){alert("— Oops, a slight problem: —\n\nMaximum Trial Weeks is: 52.\nIf you want to offer more than 52 weeks, please choose Months from the drop-down.");return false}else{if(trialTerm==="M"&&trialPeriod>24){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 24.\nIf you want to offer more than 24 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>5){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 5.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}}}}}}code.html(code.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(trialPeriod)<=0)?code.html(code.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="(src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;shortCodeTemplateAttrs+=(button==="modification")?'modify="1" ':"";shortCodeTemplateAttrs+='level="'+esc_attr(level)+'" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'" custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"';shortCodeTemplateAttrs+=' ta="'+esc_attr(trialAmount)+'" tp="'+esc_attr(trialPeriod)+'" tt="'+esc_attr(trialTerm)+'" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'" rrt="'+esc_attr(regRecurTimes)+'" rra="'+esc_attr(regRecurRetry)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((button==="modification")?"1":"0")+'"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+esc_attr(regRecur)+'"'));code.html(code.val().replace(/ name\="srt" value\="(.*?)"/,' name="srt" value="'+esc_attr(regRecurTimes)+'"'));code.html(code.val().replace(/ name\="sra" value\="(.*?)"/,' name="sra" value="'+esc_attr(regRecurRetry)+'"'));code.html(code.val().replace(/ name\="a1" value\="(.*?)"/,' name="a1" value="'+esc_attr(trialAmount)+'"'));code.html(code.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+esc_attr(trialPeriod)+'"'));code.html(code.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+esc_attr(trialTerm)+'"'));code.html(code.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+esc_attr(regPeriod)+'"'));code.html(code.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+esc_attr(regTerm)+'"'));$("div#ws-plugin--s2member-"+button+"-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Modification Buttons should be displayed to existing Users/Members, and they should be logged-in, BEFORE clicking this Button."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalCcapButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-ccap-shortcode");var code=$("textarea#ws-plugin--s2member-ccap-button");var desc=$.trim($("input#ws-plugin--s2member-ccap-desc").val().replace(/"/g,""));var regAmount=$("input#ws-plugin--s2member-ccap-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-ccap-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-ccap-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-ccap-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-ccap-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-ccap-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();var levelCcapsPer=(regRecur==="BN"&®Term!=="L")?"*:"+cCaps+":"+regPeriod+" "+regTerm:"*:"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!cCaps||cCaps==="-all"){alert("— Oops, a slight problem: —\n\nPlease provide at least one Custom Capability.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}shortCodeTemplateAttrs+='level="*" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-ccap-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-sp-shortcode");var code=$("textarea#ws-plugin--s2member-sp-button");var leading=$("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var regAmount=$("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var desc=$.trim($("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -> Restriction Options -> Specific Post/Page Access.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}var spIdsHours="sp:"+ids+":"+hours;shortCodeTemplateAttrs+='sp="1" ids="'+esc_attr(ids)+'" exp="'+esc_attr(hours)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(spIdsHours)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-sp-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your WordPress® Editor.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalRegLinkGenerate=function(){var level=$("select#ws-plugin--s2member-reg-link-level").val().replace(/[^0-9]/g,"");var subscrID=$.trim($("input#ws-plugin--s2member-reg-link-subscr-id").val());var custom=$.trim($("input#ws-plugin--s2member-reg-link-custom").val());var cCaps=$.trim($.trim($("input#ws-plugin--s2member-reg-link-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());var fixedTerm=$.trim($("input#ws-plugin--s2member-reg-link-fixed-term").val().replace(/[^A-Z 0-9]/gi,"").toUpperCase());var $link=$("p#ws-plugin--s2member-reg-link"),$loading=$("img#ws-plugin--s2member-reg-link-loading");var levelCcapsPer=(fixedTerm&&!fixedTerm.match(/L$/))?level+":"+cCaps+":"+fixedTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!subscrID){alert("— Oops, a slight problem: —\n\nPaid Subscr. ID is a required value.");return false}else{if(!custom||custom.indexOf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq ($_SERVER["HTTP_HOST"]); ?>')!==0){alert("— Oops, a slight problem: —\n\nThe Custom Value MUST start with your domain name.");return false}else{if(fixedTerm&&!fixedTerm.match(/^[1-9]+ (D|W|M|Y|L)$/)){alert("— Oops, a slight problem: —\n\nThe Fixed Term Length is not formatted properly.");return false}}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_reg_access_link_via_ajax",ws_plugin__s2member_reg_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-reg-access-link-via-ajax")); ?>',s2member_reg_access_link_subscr_gateway:"paypal",s2member_reg_access_link_subscr_id:subscrID,s2member_reg_access_link_custom:custom,s2member_reg_access_link_item_number:levelCcapsPer},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var leading=$("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var $link=$("p#ws-plugin--s2member-sp-link"),$loading=$("img#ws-plugin--s2member-sp-link-loading");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -> Restriction Options -> Specific Post/Page Access.");return false}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:ids,s2member_sp_access_link_hours:hours},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false}}if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){$("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var $this=$(this),val=$this.val();var $rows=$("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var $prevImg=$("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(val<=0){$rows.css("display","none"),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(val==1){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(val==2){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}});$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').change(function(){var thisChange=$(this).val(),checkedIndexes=[];$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="removal-deletion"&&this.checked){$this.nextAll(checkboxes).slice(0,2).attr({checked:"checked",disabled:"disabled"})}else{if(val==="removal-deletion"&&!this.checked){$this.nextAll(checkboxes).slice(0,2).removeAttr("disabled");(thisChange==="removal-deletion")?$this.nextAll(checkboxes).slice(0,2).removeAttr("checked"):null}else{if(val==="modification"&&this.checked){$this.nextAll(checkboxes).slice(0,3).attr({checked:"checked",disabled:"disabled"})}else{if(val==="modification"&&!this.checked){(thisChange==="modification")?$this.nextAll(checkboxes).slice(0,3).removeAttr("checked"):null;$this.nextAll(checkboxes).slice(0,3).removeAttr("disabled")}}}}}).each(function(index){(this.checked)?checkedIndexes.push(index):null});$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").removeAttr("disabled");if($.inArray(3,checkedIndexes)===-1&&$.inArray(4,checkedIndexes)===-1&&$.inArray(5,checkedIndexes)===-1&&$.inArray(6,checkedIndexes)===-1){$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").attr("disabled","disabled")}}).last().trigger("change")}});
|
includes/menu-pages/menu-pages-s.js
CHANGED
@@ -203,8 +203,7 @@ jQuery(document).ready(function($)
|
|
203 |
/**/
|
204 |
ws_plugin__s2member_customRegFieldCreate = function()
|
205 |
{
|
206 |
-
var $table = $('table#ws-plugin--s2member-custom-reg-field-configuration-tools-form'), field = {
|
207 |
-
};
|
208 |
/**/
|
209 |
$(':input[property]', $table).each( /* Go through each property value. */function()
|
210 |
{
|
@@ -228,8 +227,7 @@ jQuery(document).ready(function($)
|
|
228 |
/**/
|
229 |
ws_plugin__s2member_customRegFieldUpdate = function(index)
|
230 |
{
|
231 |
-
var $table = $('table#ws-plugin--s2member-custom-reg-field-configuration-tools-form'), field = {
|
232 |
-
};
|
233 |
/**/
|
234 |
$(':input[property]', $table).each( /* Go through each property value. */function()
|
235 |
{
|
@@ -355,7 +353,7 @@ jQuery(document).ready(function($)
|
|
355 |
/**/
|
356 |
var fieldId2Var = /* Convert ids to variables. */ function(fieldId)
|
357 |
{
|
358 |
-
return( typeof fieldId === 'string') ? $.trim(fieldId).toLowerCase().replace(/[^a-z0-9]/g, '_') : '';
|
359 |
};
|
360 |
/**/
|
361 |
var fieldTypeDesc = function(type)
|
@@ -942,8 +940,7 @@ jQuery(document).ready(function($)
|
|
942 |
/**/
|
943 |
ws_plugin__s2member_paypalButtonGenerate = /* Handles PayPal® Button Generation. */ function(button)
|
944 |
{
|
945 |
-
var shortCodeTemplate = '[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]', shortCodeTemplateAttrs = '', labels = {
|
946 |
-
};
|
947 |
/**/
|
948 |
eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");
|
949 |
/**/
|
@@ -988,9 +985,9 @@ jQuery(document).ready(function($)
|
|
988 |
alert('— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00');
|
989 |
return false;
|
990 |
}
|
991 |
-
else if(trialTerm === 'D' && /* Some validation on the Trial Period. Max days:
|
992 |
{
|
993 |
-
alert('— Oops, a slight problem: —\n\nMaximum Trial Days is:
|
994 |
return false;
|
995 |
}
|
996 |
else if(trialTerm === 'W' && /* Some validation on the Trial Period. 52 max. */ trialPeriod > 52)
|
@@ -998,14 +995,14 @@ jQuery(document).ready(function($)
|
|
998 |
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.');
|
999 |
return false;
|
1000 |
}
|
1001 |
-
else if(trialTerm === 'M' && /* Some validation on the Trial Period.
|
1002 |
{
|
1003 |
-
alert('— Oops, a slight problem: —\n\nMaximum Trial Months is:
|
1004 |
return false;
|
1005 |
}
|
1006 |
-
else if(trialTerm === 'Y' && /*
|
1007 |
{
|
1008 |
-
alert('— Oops, a slight problem: —\n\nMax Trial Period Years is:
|
1009 |
return false;
|
1010 |
}
|
1011 |
else if(!regAmount || isNaN(regAmount) || regAmount < 0.01)
|
203 |
/**/
|
204 |
ws_plugin__s2member_customRegFieldCreate = function()
|
205 |
{
|
206 |
+
var $table = $('table#ws-plugin--s2member-custom-reg-field-configuration-tools-form'), field = {};
|
|
|
207 |
/**/
|
208 |
$(':input[property]', $table).each( /* Go through each property value. */function()
|
209 |
{
|
227 |
/**/
|
228 |
ws_plugin__s2member_customRegFieldUpdate = function(index)
|
229 |
{
|
230 |
+
var $table = $('table#ws-plugin--s2member-custom-reg-field-configuration-tools-form'), field = {};
|
|
|
231 |
/**/
|
232 |
$(':input[property]', $table).each( /* Go through each property value. */function()
|
233 |
{
|
353 |
/**/
|
354 |
var fieldId2Var = /* Convert ids to variables. */ function(fieldId)
|
355 |
{
|
356 |
+
return ( typeof fieldId === 'string') ? $.trim(fieldId).toLowerCase().replace(/[^a-z0-9]/g, '_') : '';
|
357 |
};
|
358 |
/**/
|
359 |
var fieldTypeDesc = function(type)
|
940 |
/**/
|
941 |
ws_plugin__s2member_paypalButtonGenerate = /* Handles PayPal® Button Generation. */ function(button)
|
942 |
{
|
943 |
+
var shortCodeTemplate = '[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]', shortCodeTemplateAttrs = '', labels = {};
|
|
|
944 |
/**/
|
945 |
eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");
|
946 |
/**/
|
985 |
alert('— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00');
|
986 |
return false;
|
987 |
}
|
988 |
+
else if(trialTerm === 'D' && /* Some validation on the Trial Period. Max days: 90. */ trialPeriod > 90)
|
989 |
{
|
990 |
+
alert('— Oops, a slight problem: —\n\nMaximum Trial Days is: 90.\nIf you want to offer more than 90 days, please choose Weeks or Months from the drop-down.');
|
991 |
return false;
|
992 |
}
|
993 |
else if(trialTerm === 'W' && /* Some validation on the Trial Period. 52 max. */ trialPeriod > 52)
|
995 |
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.');
|
996 |
return false;
|
997 |
}
|
998 |
+
else if(trialTerm === 'M' && /* Some validation on the Trial Period. 24 max. */ trialPeriod > 24)
|
999 |
{
|
1000 |
+
alert('— Oops, a slight problem: —\n\nMaximum Trial Months is: 24.\nIf you want to offer more than 24 months, please choose Years from the drop-down.');
|
1001 |
return false;
|
1002 |
}
|
1003 |
+
else if(trialTerm === 'Y' && /* 5 years max. */ trialPeriod > 5)
|
1004 |
{
|
1005 |
+
alert('— Oops, a slight problem: —\n\nMax Trial Period Years is: 5.');
|
1006 |
return false;
|
1007 |
}
|
1008 |
else if(!regAmount || isNaN(regAmount) || regAmount < 0.01)
|
includes/menu-pages/paypal-ops.inc.php
CHANGED
@@ -14,10 +14,10 @@
|
|
14 |
* @package s2Member\Menu_Pages
|
15 |
* @since 3.0
|
16 |
*/
|
17 |
-
if
|
18 |
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
-
if
|
21 |
{
|
22 |
/**
|
23 |
* Menu page for the s2Member plugin ( PayPal® Options page ).
|
@@ -27,609 +27,703 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_ops"))
|
|
27 |
*/
|
28 |
class c_ws_plugin__s2member_menu_page_paypal_ops
|
29 |
{
|
30 |
-
public function __construct
|
31 |
{
|
32 |
-
echo '<div class="wrap ws-menu-page">'
|
33 |
/**/
|
34 |
-
echo '<div id="icon-plugins" class="icon32"><br /></div>'
|
35 |
-
echo '<h2>s2Member® PayPal® Options</h2>'
|
36 |
/**/
|
37 |
-
echo '<table class="ws-menu-page-table">'
|
38 |
-
echo '<tbody class="ws-menu-page-table-tbody">'
|
39 |
-
echo '<tr class="ws-menu-page-table-tr">'
|
40 |
-
echo '<td class="ws-menu-page-table-l">'
|
41 |
/**/
|
42 |
-
echo '<form method="post" name="ws_plugin__s2member_options_form" id="ws-plugin--s2member-options-form">'
|
43 |
-
echo '<input type="hidden" name="ws_plugin__s2member_options_save" id="ws-plugin--s2member-options-save" value="'
|
44 |
-
echo '<input type="hidden" name="ws_plugin__s2member_configured" id="ws-plugin--s2member-configured" value="1" />'
|
45 |
/**/
|
46 |
-
do_action
|
47 |
/**/
|
48 |
-
if
|
49 |
{
|
50 |
-
do_action
|
51 |
-
/**/
|
52 |
-
echo '<div class="ws-menu-page-group" title="PayPal® Account Details">'
|
53 |
-
/**/
|
54 |
-
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-account-details-section">'
|
55 |
-
echo '<a href="http://www.s2member.com/paypal" target="_blank"><img src="'
|
56 |
-
echo '<h3>PayPal® Account Details ( required, if using PayPal® )</h3>'
|
57 |
-
echo '<p>This plugin works in conjunction with <a href="http://www.s2member.com/paypal" target="_blank" rel="external">PayPal® Website Payments Standard</a>, for businesses. You do NOT need a PayPal® Pro account. You just need to upgrade your Personal PayPal® account to a Business status, which is free. A PayPal® account can be <a href="http://pages.ebay.com/help/buy/questions/upgrade-paypal-account.html" target="_blank" rel="external">upgraded</a> from a Personal account to a Business account, simply by going to the `Profile` button under the `My Account` tab, selecting the `Personal Business Information` button, and then clicking the `Upgrade Your Account` button.</p>'
|
58 |
-
echo '<p><em><strong>*PayPal® API Credentials*</strong> Once you have a PayPal® Business account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">PayPal® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( Request API Signature )</code>.</em></p>'
|
59 |
-
do_action
|
60 |
-
/**/
|
61 |
-
echo '<table class="form-table">'
|
62 |
-
echo '<tbody>'
|
63 |
-
echo '<tr>'
|
64 |
-
/**/
|
65 |
-
echo '<th>'
|
66 |
-
echo '<label for="ws-plugin--s2member-paypal-business">'
|
67 |
-
echo 'Your PayPal® EMail Address:'
|
68 |
-
echo '</label>'
|
69 |
-
echo '</th>'
|
70 |
-
/**/
|
71 |
-
echo '</tr>'
|
72 |
-
echo '<tr>'
|
73 |
-
/**/
|
74 |
-
echo '<td>'
|
75 |
-
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_business" id="ws-plugin--s2member-paypal-business" value="'
|
76 |
-
echo 'Enter the email address you\'ve associated with your PayPal® Business account.'
|
77 |
-
echo '</td>'
|
78 |
-
/**/
|
79 |
-
echo '</tr>'
|
80 |
-
echo '<tr>'
|
81 |
-
/**/
|
82 |
-
echo '<th>'
|
83 |
-
echo '<label for="ws-plugin--s2member-paypal-api-username">'
|
84 |
-
echo 'Your PayPal® API Username:'
|
85 |
-
echo '</label>'
|
86 |
-
echo '</th>'
|
87 |
-
/**/
|
88 |
-
echo '</tr>'
|
89 |
-
echo '<tr>'
|
90 |
-
/**/
|
91 |
-
echo '<td>'
|
92 |
-
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_api_username" id="ws-plugin--s2member-paypal-api-username" value="'
|
93 |
-
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials)</code>.'
|
94 |
-
echo '</td>'
|
95 |
-
/**/
|
96 |
-
echo '</tr>'
|
97 |
-
echo '<tr>'
|
98 |
-
/**/
|
99 |
-
echo '<th>'
|
100 |
-
echo '<label for="ws-plugin--s2member-paypal-api-password">'
|
101 |
-
echo 'Your PayPal® API Password:'
|
102 |
-
echo '</label>'
|
103 |
-
echo '</th>'
|
104 |
-
/**/
|
105 |
-
echo '</tr>'
|
106 |
-
echo '<tr>'
|
107 |
-
/**/
|
108 |
-
echo '<td>'
|
109 |
-
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_password" id="ws-plugin--s2member-paypal-api-password" value="'
|
110 |
-
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials)</code>.'
|
111 |
-
echo '</td>'
|
112 |
-
/**/
|
113 |
-
echo '</tr>'
|
114 |
-
echo '<tr>'
|
115 |
-
/**/
|
116 |
-
echo '<th>'
|
117 |
-
echo '<label for="ws-plugin--s2member-paypal-api-signature">'
|
118 |
-
echo 'Your PayPal® API Signature:'
|
119 |
-
echo '</label>'
|
120 |
-
echo '</th>'
|
121 |
-
/**/
|
122 |
-
echo '</tr>'
|
123 |
-
echo '<tr>'
|
124 |
-
/**/
|
125 |
-
echo '<td>'
|
126 |
-
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_signature" id="ws-plugin--s2member-paypal-api-signature" value="'
|
127 |
-
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials)</code>.'
|
128 |
-
echo '</td>'
|
129 |
-
/**/
|
130 |
-
echo '</tr>'
|
131 |
-
do_action
|
132 |
-
echo '</tbody>'
|
133 |
-
echo '</table>'
|
134 |
-
/**/
|
135 |
-
echo '<div class="ws-menu-page-hr"></div>'
|
136 |
-
/**/
|
137 |
-
echo '<table class="form-table" style="margin:0;">'
|
138 |
-
echo '<tbody>'
|
139 |
-
echo '<tr>'
|
140 |
-
/**/
|
141 |
-
echo '<th style="padding-top:0;">'
|
142 |
-
echo '<label for="ws-plugin--s2member-paypal-sandbox">'
|
143 |
-
echo 'Developer/Sandbox Testing?'
|
144 |
-
echo '</label>'
|
145 |
-
echo '</th>'
|
146 |
-
/**/
|
147 |
-
echo '</tr>'
|
148 |
-
echo '<tr>'
|
149 |
-
/**/
|
150 |
-
echo '<td>'
|
151 |
-
echo '<input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-0" value="0"'
|
152 |
-
echo '<em>Only enable this if you\'ve provided Sandbox credentials above.<br />This puts the API, IPN, PDT and Form/Button Generators all into Sandbox mode.<br />See: <a href="http://www.s2member.com/paypal-developers" target="_blank" rel="external">PayPal® Developers</a></em>'
|
153 |
-
echo '</td>'
|
154 |
-
/**/
|
155 |
-
echo '</tr>'
|
156 |
-
echo '<tr>'
|
157 |
-
/**/
|
158 |
-
echo '<th>'
|
159 |
-
echo '<label for="ws-plugin--s2member-paypal-btn-encryption">'
|
160 |
-
echo 'Enable Button Encryption?'
|
161 |
-
echo '</label>'
|
162 |
-
echo '</th>'
|
163 |
-
/**/
|
164 |
-
echo '</tr>'
|
165 |
-
echo '<tr>'
|
166 |
-
/**/
|
167 |
-
echo '<td>'
|
168 |
-
echo '<input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-0" value="0"'
|
169 |
-
echo '<em>If enabled, all of your PayPal® Button Shortcodes will produce *encrypted* PayPal® Buttons. This improves security against fraudulent transactions. For extra security, you should update your PayPal® account too, under: <code>My Profile -> Website Payment Preferences</code>. You\'ll want to block all non-encrypted payments. <strong>*Note*</strong> this will NOT work until you\'ve supplied s2Member with your PayPal® Email Address, and also with your API Username/Password/Signature.</em>'
|
170 |
-
echo '</td>'
|
171 |
-
/**/
|
172 |
-
echo '</tr>'
|
173 |
/**/
|
174 |
-
if
|
175 |
{
|
176 |
-
echo '<tr>'
|
177 |
/**/
|
178 |
-
echo '<th>'
|
179 |
-
echo '<label for="ws-plugin--s2member-gateway-debug-logs">'
|
180 |
-
echo 'Enable Logging Routines?'
|
181 |
-
echo '</label>'
|
182 |
-
echo '</th>'
|
183 |
/**/
|
184 |
-
echo '</tr>'
|
185 |
-
echo '<tr>'
|
186 |
/**/
|
187 |
-
echo '<td>'
|
188 |
-
echo '<input type="radio" name="ws_plugin__s2member_gateway_debug_logs" id="ws-plugin--s2member-gateway-debug-logs-0" value="0"'
|
189 |
-
echo '<em>This enables API, IPN and Return Page logging. The log files are stored here:<br /><code>'
|
190 |
-
echo '</td>'
|
191 |
/**/
|
192 |
-
echo '</tr>'
|
193 |
}
|
194 |
/**/
|
195 |
-
echo '</tbody>'
|
196 |
-
echo '</table>'
|
197 |
/**/
|
198 |
-
echo '<div class="ws-menu-page-hr"></div>'
|
199 |
/**/
|
200 |
-
echo '<p><em><strong>*Sandbox Tip*</strong> If you\'re testing your site through a PayPal® Sandbox account, please remember that Email Confirmations from s2Member will NOT be received after a test purchase. s2Member sends its Confirmation Emails to the PayPal® Email Address of the Customer. Since PayPal® Sandbox addresses are usually bogus ( for testing ), you will have to run live transactions before Email Confirmations from s2Member are received. That being said, all other s2Member functionality CAN be tested through a PayPal® Sandbox account. Email Confirmations are the only hang-up.</em></p>'
|
201 |
-
do_action
|
202 |
-
echo '</div>'
|
203 |
/**/
|
204 |
-
echo '</div>'
|
205 |
/**/
|
206 |
-
do_action
|
207 |
}
|
208 |
/**/
|
209 |
-
if
|
210 |
{
|
211 |
-
do_action
|
212 |
-
/**/
|
213 |
-
echo '<div class="ws-menu-page-group" title="
|
214 |
-
/**/
|
215 |
-
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-
|
216 |
-
echo '<
|
217 |
-
echo '<
|
218 |
-
echo '<p>
|
219 |
-
echo '<p>
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
echo '<
|
224 |
-
echo '<
|
225 |
-
|
226 |
-
|
227 |
-
echo '
|
228 |
-
|
229 |
-
echo '
|
230 |
-
|
231 |
-
echo '
|
232 |
-
|
233 |
-
echo '
|
234 |
-
echo '<
|
235 |
-
|
236 |
-
|
237 |
-
echo '
|
238 |
-
echo '</
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
243 |
}
|
244 |
/**/
|
245 |
-
if
|
246 |
{
|
247 |
-
do_action
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
/**/
|
249 |
-
echo '<div class="ws-menu-page-group" title="PayPal® PDT/Auto-Return Integration">'
|
250 |
/**/
|
251 |
-
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-pdt-section">'
|
252 |
-
echo '<h3>PayPal® PDT Identity Token ( required, please enable )</h3>'
|
253 |
-
echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Website Payment Preferences</code></p>'
|
254 |
-
echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>'
|
255 |
-
echo '<p>You\'ll need your <a href="'
|
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>'
|
257 |
-
do_action
|
258 |
/**/
|
259 |
-
echo '<table class="form-table">'
|
260 |
-
echo '<tbody>'
|
261 |
-
echo '<tr>'
|
262 |
/**/
|
263 |
-
echo '<th>'
|
264 |
-
echo '<label for="ws-plugin--s2member-paypal-identity-token">'
|
265 |
-
echo 'PayPal® PDT Identity Token:'
|
266 |
-
echo '</label>'
|
267 |
-
echo '</th>'
|
268 |
/**/
|
269 |
-
echo '</tr>'
|
270 |
-
echo '<tr>'
|
271 |
/**/
|
272 |
-
echo '<td>'
|
273 |
-
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_identity_token" id="ws-plugin--s2member-paypal-identity-token" value="'
|
274 |
-
echo 'Your PDT Identity Token will appear under <em>Profile -> Website Payment Preferences</em> in your PayPal® account.'
|
275 |
-
echo '</td>'
|
276 |
/**/
|
277 |
-
echo '</tr>'
|
278 |
-
echo '</tbody>'
|
279 |
-
echo '</table>'
|
280 |
/**/
|
281 |
-
echo '<div class="ws-menu-page-hr"></div>'
|
282 |
/**/
|
283 |
-
echo '<h3>More Information ( <a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-pdt-details\').toggle(); return false;" class="ws-dotted-link">click here</a> )</h3>'
|
284 |
-
echo '<div id="ws-plugin--s2member-paypal-pdt-details" style="display:none;">'
|
285 |
-
echo '<p><em><strong>*Quick Tip*</strong> In addition to the <a href="http://www.s2member.com/paypal-pdt-setup" 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>'
|
286 |
-
do_action
|
287 |
-
echo '</div>'
|
288 |
/**/
|
289 |
-
do_action
|
290 |
/**/
|
291 |
-
echo '</div>'
|
292 |
/**/
|
293 |
-
echo '</div>'
|
294 |
/**/
|
295 |
-
do_action
|
296 |
}
|
297 |
/**/
|
298 |
-
if
|
299 |
{
|
300 |
-
do_action
|
301 |
-
/**/
|
302 |
-
echo '<div class="ws-menu-page-group" title="Signup Confirmation Email ( Standard )">'
|
303 |
-
/**/
|
304 |
-
echo '<div class="ws-menu-page-section ws-plugin--s2member-signup-confirmation-email-section">'
|
305 |
-
echo '<h3>Signup Confirmation Email ( required, but the default works fine )</h3>'
|
306 |
-
echo '<p>This email is sent to new Customers after they return from a successful signup at PayPal®. The <strong>primary</strong> purpose of this email, is to provide the Customer with instructions, along with a link to register a Username for their Membership. You may also customize this further, by providing details that are specifically geared to your site.</p>'
|
307 |
-
do_action
|
308 |
-
/**/
|
309 |
-
echo '<table class="form-table">'
|
310 |
-
echo '<tbody>'
|
311 |
-
echo '<tr>'
|
312 |
-
/**/
|
313 |
-
echo '<th>'
|
314 |
-
echo '<label for="ws-plugin--s2member-signup-email-recipients">'
|
315 |
-
echo 'Signup Confirmation Recipients:'
|
316 |
-
echo '</label>'
|
317 |
-
echo '</th>'
|
318 |
-
/**/
|
319 |
-
echo '</tr>'
|
320 |
-
echo '<tr>'
|
321 |
-
/**/
|
322 |
-
echo '<td>'
|
323 |
-
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_signup_email_recipients" id="ws-plugin--s2member-signup-email-recipients" value="'
|
324 |
-
echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />'
|
325 |
-
echo '<code>"%%full_name%%" <%%payer_email%%>; admin@example.com; "Webmaster" <webmaster@example.com></code>'
|
326 |
-
echo '</td>'
|
327 |
-
/**/
|
328 |
-
echo '</tr>'
|
329 |
-
echo '<tr>'
|
330 |
-
/**/
|
331 |
-
echo '<th>'
|
332 |
-
echo '<label for="ws-plugin--s2member-signup-email-subject">'
|
333 |
-
echo 'Signup Confirmation Email Subject:'
|
334 |
-
echo '</label>'
|
335 |
-
echo '</th>'
|
336 |
-
/**/
|
337 |
-
echo '</tr>'
|
338 |
-
echo '<tr>'
|
339 |
-
/**/
|
340 |
-
echo '<td>'
|
341 |
-
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_signup_email_subject" id="ws-plugin--s2member-signup-email-subject" value="'
|
342 |
-
echo 'Subject Line used in the email sent to a Customer after a successful signup has occurred through PayPal®.'
|
343 |
-
echo '</td>'
|
344 |
-
/**/
|
345 |
-
echo '</tr>'
|
346 |
-
echo '<tr>'
|
347 |
-
/**/
|
348 |
-
echo '<th>'
|
349 |
-
echo '<label for="ws-plugin--s2member-signup-email-message">'
|
350 |
-
echo 'Signup Confirmation Email Message:'
|
351 |
-
echo '</label>'
|
352 |
-
echo '</th>'
|
353 |
-
/**/
|
354 |
-
echo '</tr>'
|
355 |
-
echo '<tr>'
|
356 |
-
/**/
|
357 |
-
echo '<td>'
|
358 |
-
echo '<textarea name="ws_plugin__s2member_signup_email_message" id="ws-plugin--s2member-signup-email-message" rows="10">'
|
359 |
-
echo 'Message Body used in the email sent to a Customer after a successful signup has occurred through PayPal®.<br /><br />'
|
360 |
-
echo '<strong>You can also use these special Replacement Codes if you need them:</strong>'
|
361 |
-
echo '<ul>'
|
362 |
-
echo '<li><code>%%registration_url%%</code> = The full URL ( generated by s2Member ) where the Customer can get registered.</li>'
|
363 |
-
echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remains constant throughout any & all future payments. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the Transaction ID for the purchase. PayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime & Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>'
|
364 |
-
echo '<li><code>%%initial%%</code> = The Initial Fee charged during signup. If you offered a 100% Free Trial, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. If a Customer signs up, under the terms of a 100% Free Trial Period, this will be 0.\'); return false;">?</a> ]</li>'
|
365 |
-
echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. This value is <code>always > 0</code>, no matter what. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an Initial Period expires. The %%regular%% rate is always > 0. If you did NOT offer an Initial Period at a different price, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>'
|
366 |
-
echo '<li><code>%%recurring%%</code> = This is the amount that will be charged on a recurring basis, or <code>0</code> if non-recurring. [ <a href="#" onclick="alert(\'If Recurring Payments have not been required, this will be equal to 0. That being said, %%regular%% & %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the Regular Recurring Rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\'); return false;">?</a> ]</li>'
|
367 |
-
echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>'
|
368 |
-
echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>'
|
369 |
-
echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>'
|
370 |
-
echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>'
|
371 |
-
echo '<li><code>%%user_ip%%</code> = The Customer\'s IP Address, detected during checkout via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>'
|
372 |
-
echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <code><em>level:custom_capabilities:fixed term</em></code> ) that the Subscription is for.</li>'
|
373 |
-
echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>'
|
374 |
-
echo '<li><code>%%initial_term%%</code> = This is the term length of the Initial Period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe Initial Period never recurs, so this only lasts for the term length specified, then it is over.\'); return false;">?</a> ]</li>'
|
375 |
-
echo '<li><code>%%initial_cycle%%</code> = This is the <code>%%initial_term%%</code> from above, converted to a cycle representation of: <code><em>X days/weeks/months/years</em></code>.</li>'
|
376 |
-
echo '<li><code>%%regular_term%%</code> = This is the term length of the Regular Period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe Regular Term is usually recurring. So the Regular Term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the Regular Term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their Membership privileges are going to last after the %%initial_term%% has expired, if there was an Initial Term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>'
|
377 |
-
echo '<li><code>%%regular_cycle%%</code> = This is the <code>%%regular_term%%</code> from above, converted to a cycle representation of: <code><em>[every] X days/weeks/months/years — OR daily, weekly, bi-weekly, monthly, bi-monthly, quarterly, yearly, or lifetime</em></code>. This is a very useful Replacment Code. Its value is dynamic; depending on term length, recurring status, and period/term lengths configured.</li>'
|
378 |
-
echo '<li><code>%%recurring/regular_cycle%%</code> = Example ( <code>14.95 / Monthly</code> ), or ... ( <code>0 / non-recurring</code> ); depending on the value of <code>%%recurring%%</code>.</li>'
|
379 |
-
echo '</ul>'
|
380 |
-
/**/
|
381 |
-
echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>'
|
382 |
-
echo '<ul>'
|
383 |
-
echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>'
|
384 |
-
echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute; inside your Shortcode, like this: <code>custom="'
|
385 |
-
echo '</ul>'
|
386 |
-
echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />'
|
387 |
-
echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />'
|
388 |
-
echo '<code>custom="'
|
389 |
-
/**/
|
390 |
-
echo '</td>'
|
391 |
-
/**/
|
392 |
-
echo '</tr>'
|
393 |
-
echo '</tbody>'
|
394 |
-
echo '</table>'
|
395 |
-
echo '</div>'
|
396 |
-
/**/
|
397 |
-
echo '</div>'
|
398 |
-
/**/
|
399 |
-
do_action
|
400 |
}
|
401 |
/**/
|
402 |
-
if
|
403 |
{
|
404 |
-
do_action
|
405 |
-
/**/
|
406 |
-
echo '<div class="ws-menu-page-group" title="Specific Post/Page Confirmation Email ( Standard )">'
|
407 |
-
/**/
|
408 |
-
echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-confirmation-email-section">'
|
409 |
-
echo '<h3>Specific Post/Page Confirmation Email ( required, but the default works fine )</h3>'
|
410 |
-
echo '<p>This email is sent to new Customers after they return from a successful purchase at PayPal®, for Specific Post/Page Access. ( see: <code>s2Member -> Restriction Options -> Specific Post/Page Access</code> ). This is NOT used for Membership sales, only for Specific Post/Page Access. The <strong>primary</strong> purpose of this email, is to provide the Customer with instructions, along with a link to access the Specific Post/Page they\'ve purchased access to. If you\'ve created a Specific Post/Page Package ( with multiple Posts/Pages bundled together into one transaction ), this ONE link ( <code>%%sp_access_url%%</code> ) will automatically authenticate them for access to ALL of the Posts/Pages included in their transaction. You may customize this email further, by providing details that are specifically geared to your site.</p>'
|
411 |
-
do_action
|
412 |
-
/**/
|
413 |
-
echo '<table class="form-table">'
|
414 |
-
echo '<tbody>'
|
415 |
-
echo '<tr>'
|
416 |
-
/**/
|
417 |
-
echo '<th>'
|
418 |
-
echo '<label for="ws-plugin--s2member-sp-email-recipients">'
|
419 |
-
echo 'Specific Post/Page Confirmation Recipients:'
|
420 |
-
echo '</label>'
|
421 |
-
echo '</th>'
|
422 |
-
/**/
|
423 |
-
echo '</tr>'
|
424 |
-
echo '<tr>'
|
425 |
-
/**/
|
426 |
-
echo '<td>'
|
427 |
-
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_sp_email_recipients" id="ws-plugin--s2member-sp-email-recipients" value="'
|
428 |
-
echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />'
|
429 |
-
echo '<code>"%%full_name%%" <%%payer_email%%>; admin@example.com; "Webmaster" <webmaster@example.com></code>'
|
430 |
-
echo '</td>'
|
431 |
-
/**/
|
432 |
-
echo '</tr>'
|
433 |
-
echo '<tr>'
|
434 |
-
/**/
|
435 |
-
echo '<th>'
|
436 |
-
echo '<label for="ws-plugin--s2member-sp-email-subject">'
|
437 |
-
echo 'Specific Post/Page Confirmation Email Subject:'
|
438 |
-
echo '</label>'
|
439 |
-
echo '</th>'
|
440 |
-
/**/
|
441 |
-
echo '</tr>'
|
442 |
-
echo '<tr>'
|
443 |
-
/**/
|
444 |
-
echo '<td>'
|
445 |
-
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_sp_email_subject" id="ws-plugin--s2member-sp-email-subject" value="'
|
446 |
-
echo 'Subject Line used in the email sent to a Customer after a successful purchase has occurred through PayPal®, for Specific Post/Page Access.'
|
447 |
-
echo '</td>'
|
448 |
-
/**/
|
449 |
-
echo '</tr>'
|
450 |
-
echo '<tr>'
|
451 |
-
/**/
|
452 |
-
echo '<th>'
|
453 |
-
echo '<label for="ws-plugin--s2member-sp-email-message">'
|
454 |
-
echo 'Specific Post/Page Confirmation Email Message:'
|
455 |
-
echo '</label>'
|
456 |
-
echo '</th>'
|
457 |
-
/**/
|
458 |
-
echo '</tr>'
|
459 |
-
echo '<tr>'
|
460 |
-
/**/
|
461 |
-
echo '<td>'
|
462 |
-
echo '<textarea name="ws_plugin__s2member_sp_email_message" id="ws-plugin--s2member-sp-email-message" rows="10">'
|
463 |
-
echo 'Message Body used in the email sent to a Customer after a successful purchase has occurred through PayPal®, for Specific Post/Page Access.<br /><br />'
|
464 |
-
echo '<strong>You can also use these special Replacement Codes if you need them:</strong>'
|
465 |
-
echo '<ul>'
|
466 |
-
echo '<li><code>%%sp_access_url%%</code> = The full URL ( generated by s2Member ) where the Customer can gain access.</li>'
|
467 |
-
echo '<li><code>%%sp_access_exp%%</code> = Human readable expiration for <code>%%sp_access_url%%</code>. Ex: <em>( link expires in <code>%%sp_access_exp%%</code> )</em>.</li>'
|
468 |
-
echo '<li><code>%%txn_id%%</code> = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</li>'
|
469 |
-
echo '<li><code>%%amount%%</code> = The full Amount that you charged for Specific Post/Page Access. This value will <code>always be > 0</code>.</li>'
|
470 |
-
echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>'
|
471 |
-
echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>'
|
472 |
-
echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</li>'
|
473 |
-
echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased Specific Post/Page Access.</li>'
|
474 |
-
echo '<li><code>%%user_ip%%</code> = The Customer\'s IP Address, detected during checkout via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>'
|
475 |
-
echo '<li><code>%%item_number%%</code> = The Item Number. Ex: <code><em>sp:13,24,36:72</em></code> ( translates to: <code><em>sp:comma-delimited IDs:expiration hours</em></code> ).</li>'
|
476 |
-
echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>'
|
477 |
-
echo '</ul>'
|
478 |
-
/**/
|
479 |
-
echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>'
|
480 |
-
echo '<ul>'
|
481 |
-
echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>'
|
482 |
-
echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute; inside your Shortcode, like this: <code>custom="'
|
483 |
-
echo '</ul>'
|
484 |
-
echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />'
|
485 |
-
echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />'
|
486 |
-
echo '<code>custom="'
|
487 |
-
/**/
|
488 |
-
echo '</td>'
|
489 |
-
/**/
|
490 |
-
echo '</tr>'
|
491 |
-
echo '</tbody>'
|
492 |
-
echo '</table>'
|
493 |
-
echo '</div>'
|
494 |
-
/**/
|
495 |
-
echo '</div>'
|
496 |
-
/**/
|
497 |
-
do_action
|
498 |
}
|
499 |
/**/
|
500 |
-
if
|
501 |
{
|
502 |
-
do_action
|
503 |
/**/
|
504 |
-
echo '<div class="ws-menu-page-group" title="Automatic EOT Behavior">'
|
505 |
/**/
|
506 |
-
echo '<div class="ws-menu-page-section ws-plugin--s2member-eot-behavior-section">'
|
507 |
-
echo '<h3>PayPal® EOT Behavior ( required, please choose )</h3>'
|
508 |
-
echo '<p>EOT = End Of Term. By default, s2Member will demote a paid Member to a Free Subscriber whenever their Subscription term has ended ( i.e. expired ), been cancelled, refunded, charged back to you, etc. s2Member demotes them to a Free Subscriber, so they will no longer have Member Level Access to your site. However, in some cases, you may prefer to have Customer accounts deleted completely, instead of just being demoted. This is where you choose which method works best for your site. If you don\'t want s2Member to take ANY action at all, you can disable s2Member\'s EOT System temporarily, or even completely.</p>'
|
509 |
-
echo '<p>The PayPal® IPN service will notify s2Member whenever a Member\'s payments have been failing, and/or whenever a Member\'s Subscription has expired for any reason. Even refunds & chargeback reversals are supported through the IPN service. For example, if you issue a refund to an unhappy Customer through PayPal®, s2Member will eventually be notified, and the account for that Customer will either be demoted to a Free Subscriber, or deleted automatically ( based on your configuration ). The communication from PayPal® -> s2Member is seamless.</p>'
|
510 |
-
echo '<p><em><strong>*Some Hairy Details*</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal®... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT ( End Of Term ) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>'
|
511 |
-
echo '<p><em>s2Member will not process an EOT until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system ( based on your configuration ). s2Member also calculates one extra day ( 24 hours ) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>'
|
512 |
-
do_action
|
513 |
/**/
|
514 |
-
echo '<p id="ws-plugin--s2member-auto-eot-system-enabled-via-cron"'
|
515 |
/**/
|
516 |
-
echo '<table class="form-table">'
|
517 |
-
echo '<tbody>'
|
518 |
-
echo '<tr>'
|
519 |
/**/
|
520 |
-
echo '<th>'
|
521 |
-
echo '<label for="ws-plugin--s2member-auto-eot-system-enabled">'
|
522 |
-
echo 'Enable s2Member\'s Auto-EOT System?'
|
523 |
-
echo '</label>'
|
524 |
-
echo '</th>'
|
525 |
/**/
|
526 |
-
echo '</tr>'
|
527 |
-
echo '<tr>'
|
528 |
/**/
|
529 |
-
echo '<td>'
|
530 |
-
echo '<select name="ws_plugin__s2member_auto_eot_system_enabled" id="ws-plugin--s2member-auto-eot-system-enabled">'
|
531 |
/* Very advanced conditionals here. If the Auto-EOT System is NOT running, or NOT fully configured, this will indicate that no option is set - as sort of a built-in acknowledgment/warning in the UI panel. */
|
532 |
-
echo (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] == 1 && (!function_exists
|
533 |
-
echo '<option value="1"'
|
534 |
-
echo (!is_multisite
|
535 |
-
echo '<option value="0"'
|
536 |
-
echo '</select><br />'
|
537 |
-
echo 'Recommended setting: ( <code>Yes / enable via WP-Cron</code> )'
|
538 |
-
echo '</td>'
|
539 |
-
/**/
|
540 |
-
echo '</tr>'
|
541 |
-
echo '<tr>'
|
542 |
-
/**/
|
543 |
-
echo '<th>'
|
544 |
-
echo '<label for="ws-plugin--s2member-membership-eot-behavior">'
|
545 |
-
echo 'Membership EOT Behavior ( demote or delete )?'
|
546 |
-
echo '</label>'
|
547 |
-
echo '</th>'
|
548 |
-
/**/
|
549 |
-
echo '</tr>'
|
550 |
-
echo '<tr>'
|
551 |
-
/**/
|
552 |
-
echo '<td>'
|
553 |
-
echo '<select name="ws_plugin__s2member_membership_eot_behavior" id="ws-plugin--s2member-membership-eot-behavior">'
|
554 |
-
echo '<option value="demote"'
|
555 |
-
echo '<option value="delete"'
|
556 |
-
echo '</select>'
|
557 |
-
echo '</td>'
|
558 |
-
/**/
|
559 |
-
echo '</tr>'
|
560 |
-
echo '<tr>'
|
561 |
-
/**/
|
562 |
-
echo '<th>'
|
563 |
-
echo '<label for="ws-plugin--s2member-triggers-immediate-eot">'
|
564 |
-
echo 'Refunds/Reversals ( trigger immediate EOT )?'
|
565 |
-
echo '</label>'
|
566 |
-
echo '</th>'
|
567 |
-
/**/
|
568 |
-
echo '</tr>'
|
569 |
-
echo '<tr>'
|
570 |
-
/**/
|
571 |
-
echo '<td>'
|
572 |
-
echo '<select name="ws_plugin__s2member_triggers_immediate_eot" id="ws-plugin--s2member-triggers-immediate-eot">'
|
573 |
-
echo '<option value="none"'
|
574 |
-
echo '<option value="refunds"'
|
575 |
-
echo '<option value="reversals"'
|
576 |
-
echo '<option value="refunds,reversals"'
|
577 |
-
echo '</select><br />'
|
578 |
-
echo 'This setting will <a href="#" onclick="alert(\'A Refund/Reversal Notification will ALWAYS be processed internally by s2Member, even if no action is taken by s2Member. This way you\\\'ll have the full ability to listen for these two events on your own; if you prefer ( optional ). For more information, check your Dashboard under: `s2Member -> API Notifications -> Refunds/Reversals`.\'); return false;">NOT affect</a> s2Member\'s internal API Notifications for Refund/Reversal events.'
|
579 |
-
echo '</td>'
|
580 |
-
/**/
|
581 |
-
echo '</tr>'
|
582 |
-
echo '<tr>'
|
583 |
-
/**/
|
584 |
-
echo '<th>'
|
585 |
-
echo '<label for="ws-plugin--s2member-eot-time-ext-behavior">'
|
586 |
-
echo 'Fixed-Term Extensions ( auto-extend )?'
|
587 |
-
echo '</label>'
|
588 |
-
echo '</th>'
|
589 |
-
/**/
|
590 |
-
echo '</tr>'
|
591 |
-
echo '<tr>'
|
592 |
-
/**/
|
593 |
-
echo '<td>'
|
594 |
-
echo '<select name="ws_plugin__s2member_eot_time_ext_behavior" id="ws-plugin--s2member-eot-time-ext-behavior">'
|
595 |
-
echo '<option value="extend"'
|
596 |
-
echo '<option value="reset"'
|
597 |
-
echo '</select><br />'
|
598 |
-
echo 'This setting will only affect Buy Now transactions for fixed-term lengths. By default, s2Member will automatically extend any existing EOT Time that a Customer may have.'
|
599 |
-
echo '</td>'
|
600 |
-
/**/
|
601 |
-
echo '</tr>'
|
602 |
-
echo '</tbody>'
|
603 |
-
echo '</table>'
|
604 |
-
echo '</div>'
|
605 |
-
/**/
|
606 |
-
echo '</div>'
|
607 |
-
/**/
|
608 |
-
do_action
|
609 |
}
|
610 |
/**/
|
611 |
-
do_action
|
612 |
/**/
|
613 |
-
echo '<div class="ws-menu-page-hr"></div>'
|
614 |
/**/
|
615 |
-
echo '<p class="submit"><input type="submit" class="button-primary" value="Save All Changes" /></p>'
|
616 |
/**/
|
617 |
-
echo '</form>'
|
618 |
/**/
|
619 |
-
echo '</td>'
|
620 |
/**/
|
621 |
-
echo '<td class="ws-menu-page-table-r">'
|
622 |
-
c_ws_plugin__s2member_menu_pages_rs::display
|
623 |
-
echo '</td>'
|
624 |
/**/
|
625 |
-
echo '</tr>'
|
626 |
-
echo '</tbody>'
|
627 |
-
echo '</table>'
|
628 |
/**/
|
629 |
-
echo '</div>'
|
630 |
}
|
631 |
}
|
632 |
}
|
633 |
/**/
|
634 |
-
new c_ws_plugin__s2member_menu_page_paypal_ops
|
635 |
?>
|
14 |
* @package s2Member\Menu_Pages
|
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 |
{
|
22 |
/**
|
23 |
* Menu page for the s2Member plugin ( PayPal® Options page ).
|
27 |
*/
|
28 |
class c_ws_plugin__s2member_menu_page_paypal_ops
|
29 |
{
|
30 |
+
public function __construct()
|
31 |
{
|
32 |
+
echo '<div class="wrap ws-menu-page">'."\n";
|
33 |
/**/
|
34 |
+
echo '<div id="icon-plugins" class="icon32"><br /></div>'."\n";
|
35 |
+
echo '<h2>s2Member® PayPal® Options</h2>'."\n";
|
36 |
/**/
|
37 |
+
echo '<table class="ws-menu-page-table">'."\n";
|
38 |
+
echo '<tbody class="ws-menu-page-table-tbody">'."\n";
|
39 |
+
echo '<tr class="ws-menu-page-table-tr">'."\n";
|
40 |
+
echo '<td class="ws-menu-page-table-l">'."\n";
|
41 |
/**/
|
42 |
+
echo '<form method="post" name="ws_plugin__s2member_options_form" id="ws-plugin--s2member-options-form">'."\n";
|
43 |
+
echo '<input type="hidden" name="ws_plugin__s2member_options_save" id="ws-plugin--s2member-options-save" value="'.esc_attr(wp_create_nonce("ws-plugin--s2member-options-save")).'" />'."\n";
|
44 |
+
echo '<input type="hidden" name="ws_plugin__s2member_configured" id="ws-plugin--s2member-configured" value="1" />'."\n";
|
45 |
/**/
|
46 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_before_left_sections", get_defined_vars());
|
47 |
/**/
|
48 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_paypal_account_details", true, get_defined_vars()))
|
49 |
{
|
50 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_paypal_account_details", get_defined_vars());
|
51 |
+
/**/
|
52 |
+
echo '<div class="ws-menu-page-group" title="PayPal® Account Details">'."\n";
|
53 |
+
/**/
|
54 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-account-details-section">'."\n";
|
55 |
+
echo '<a href="http://www.s2member.com/paypal" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/paypal-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
|
56 |
+
echo '<h3>PayPal® Account Details ( required, if using PayPal® )</h3>'."\n";
|
57 |
+
echo '<p>This plugin works in conjunction with <a href="http://www.s2member.com/paypal" target="_blank" rel="external">PayPal® Website Payments Standard</a>, for businesses. You do NOT need a PayPal® Pro account. You just need to upgrade your Personal PayPal® account to a Business status, which is free. A PayPal® account can be <a href="http://pages.ebay.com/help/buy/questions/upgrade-paypal-account.html" target="_blank" rel="external">upgraded</a> from a Personal account to a Business account, simply by going to the `Profile` button under the `My Account` tab, selecting the `Personal Business Information` button, and then clicking the `Upgrade Your Account` button.</p>'."\n";
|
58 |
+
echo '<p><em><strong>*PayPal® API Credentials*</strong> Once you have a PayPal® Business account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">PayPal® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( PayPal® / Request API Signature )</code>.</em></p>'."\n";
|
59 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_account_details", get_defined_vars());
|
60 |
+
/**/
|
61 |
+
echo '<table class="form-table">'."\n";
|
62 |
+
echo '<tbody>'."\n";
|
63 |
+
echo '<tr>'."\n";
|
64 |
+
/**/
|
65 |
+
echo '<th>'."\n";
|
66 |
+
echo '<label for="ws-plugin--s2member-paypal-business">'."\n";
|
67 |
+
echo 'Your PayPal® EMail Address:'."\n";
|
68 |
+
echo '</label>'."\n";
|
69 |
+
echo '</th>'."\n";
|
70 |
+
/**/
|
71 |
+
echo '</tr>'."\n";
|
72 |
+
echo '<tr>'."\n";
|
73 |
+
/**/
|
74 |
+
echo '<td>'."\n";
|
75 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_business" id="ws-plugin--s2member-paypal-business" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"]).'" /><br />'."\n";
|
76 |
+
echo 'Enter the email address you\'ve associated with your PayPal® Business account.'."\n";
|
77 |
+
echo '</td>'."\n";
|
78 |
+
/**/
|
79 |
+
echo '</tr>'."\n";
|
80 |
+
echo '<tr>'."\n";
|
81 |
+
/**/
|
82 |
+
echo '<th>'."\n";
|
83 |
+
echo '<label for="ws-plugin--s2member-paypal-api-username">'."\n";
|
84 |
+
echo 'Your PayPal® API Username:'."\n";
|
85 |
+
echo '</label>'."\n";
|
86 |
+
echo '</th>'."\n";
|
87 |
+
/**/
|
88 |
+
echo '</tr>'."\n";
|
89 |
+
echo '<tr>'."\n";
|
90 |
+
/**/
|
91 |
+
echo '<td>'."\n";
|
92 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_api_username" id="ws-plugin--s2member-paypal-api-username" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"]).'" /><br />'."\n";
|
93 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials)</code>.'."\n";
|
94 |
+
echo '</td>'."\n";
|
95 |
+
/**/
|
96 |
+
echo '</tr>'."\n";
|
97 |
+
echo '<tr>'."\n";
|
98 |
+
/**/
|
99 |
+
echo '<th>'."\n";
|
100 |
+
echo '<label for="ws-plugin--s2member-paypal-api-password">'."\n";
|
101 |
+
echo 'Your PayPal® API Password:'."\n";
|
102 |
+
echo '</label>'."\n";
|
103 |
+
echo '</th>'."\n";
|
104 |
+
/**/
|
105 |
+
echo '</tr>'."\n";
|
106 |
+
echo '<tr>'."\n";
|
107 |
+
/**/
|
108 |
+
echo '<td>'."\n";
|
109 |
+
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_password" id="ws-plugin--s2member-paypal-api-password" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"]).'" /><br />'."\n";
|
110 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials)</code>.'."\n";
|
111 |
+
echo '</td>'."\n";
|
112 |
+
/**/
|
113 |
+
echo '</tr>'."\n";
|
114 |
+
echo '<tr>'."\n";
|
115 |
+
/**/
|
116 |
+
echo '<th>'."\n";
|
117 |
+
echo '<label for="ws-plugin--s2member-paypal-api-signature">'."\n";
|
118 |
+
echo 'Your PayPal® API Signature:'."\n";
|
119 |
+
echo '</label>'."\n";
|
120 |
+
echo '</th>'."\n";
|
121 |
+
/**/
|
122 |
+
echo '</tr>'."\n";
|
123 |
+
echo '<tr>'."\n";
|
124 |
+
/**/
|
125 |
+
echo '<td>'."\n";
|
126 |
+
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_signature" id="ws-plugin--s2member-paypal-api-signature" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"]).'" /><br />'."\n";
|
127 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials)</code>.'."\n";
|
128 |
+
echo '</td>'."\n";
|
129 |
+
/**/
|
130 |
+
echo '</tr>'."\n";
|
131 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_account_detail_rows", get_defined_vars());
|
132 |
+
echo '</tbody>'."\n";
|
133 |
+
echo '</table>'."\n";
|
134 |
+
/**/
|
135 |
+
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
136 |
+
/**/
|
137 |
+
echo '<table class="form-table" style="margin:0;">'."\n";
|
138 |
+
echo '<tbody>'."\n";
|
139 |
+
echo '<tr>'."\n";
|
140 |
+
/**/
|
141 |
+
echo '<th style="padding-top:0;">'."\n";
|
142 |
+
echo '<label for="ws-plugin--s2member-paypal-sandbox">'."\n";
|
143 |
+
echo 'Developer/Sandbox Testing?'."\n";
|
144 |
+
echo '</label>'."\n";
|
145 |
+
echo '</th>'."\n";
|
146 |
+
/**/
|
147 |
+
echo '</tr>'."\n";
|
148 |
+
echo '<tr>'."\n";
|
149 |
+
/**/
|
150 |
+
echo '<td>'."\n";
|
151 |
+
echo '<input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-0" value="0"'.((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-sandbox-0">No</label> <input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-1" value="1"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-sandbox-1">Yes, enable support for Sandbox testing.</label><br />'."\n";
|
152 |
+
echo '<em>Only enable this if you\'ve provided Sandbox credentials above.<br />This puts the API, IPN, PDT and Form/Button Generators all into Sandbox mode.<br />See: <a href="http://www.s2member.com/paypal-developers" target="_blank" rel="external">PayPal® Developers</a></em>'."\n";
|
153 |
+
echo '</td>'."\n";
|
154 |
+
/**/
|
155 |
+
echo '</tr>'."\n";
|
156 |
+
echo '<tr>'."\n";
|
157 |
+
/**/
|
158 |
+
echo '<th>'."\n";
|
159 |
+
echo '<label for="ws-plugin--s2member-paypal-btn-encryption">'."\n";
|
160 |
+
echo 'Enable Button Encryption?'."\n";
|
161 |
+
echo '</label>'."\n";
|
162 |
+
echo '</th>'."\n";
|
163 |
+
/**/
|
164 |
+
echo '</tr>'."\n";
|
165 |
+
echo '<tr>'."\n";
|
166 |
+
/**/
|
167 |
+
echo '<td>'."\n";
|
168 |
+
echo '<input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-0" value="0"'.((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-btn-encryption-0">No</label> <input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-1" value="1"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-btn-encryption-1">Yes, enable PayPal® Button encryption.</label><br />'."\n";
|
169 |
+
echo '<em>If enabled, all of your PayPal® Button Shortcodes will produce *encrypted* PayPal® Buttons. This improves security against fraudulent transactions. For extra security, you should update your PayPal® account too, under: <code>My Profile -> Website Payment Preferences</code>. You\'ll want to block all non-encrypted payments. <strong>*Note*</strong> this will NOT work until you\'ve supplied s2Member with your PayPal® Email Address, and also with your API Username/Password/Signature.</em>'."\n";
|
170 |
+
echo '</td>'."\n";
|
171 |
+
/**/
|
172 |
+
echo '</tr>'."\n";
|
173 |
/**/
|
174 |
+
if(!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site())
|
175 |
{
|
176 |
+
echo '<tr>'."\n";
|
177 |
/**/
|
178 |
+
echo '<th>'."\n";
|
179 |
+
echo '<label for="ws-plugin--s2member-gateway-debug-logs">'."\n";
|
180 |
+
echo 'Enable Logging Routines?'."\n";
|
181 |
+
echo '</label>'."\n";
|
182 |
+
echo '</th>'."\n";
|
183 |
/**/
|
184 |
+
echo '</tr>'."\n";
|
185 |
+
echo '<tr>'."\n";
|
186 |
/**/
|
187 |
+
echo '<td>'."\n";
|
188 |
+
echo '<input type="radio" name="ws_plugin__s2member_gateway_debug_logs" id="ws-plugin--s2member-gateway-debug-logs-0" value="0"'.((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-gateway-debug-logs-0">No</label> <input type="radio" name="ws_plugin__s2member_gateway_debug_logs" id="ws-plugin--s2member-gateway-debug-logs-1" value="1"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-gateway-debug-logs-1">Yes, enable debugging, with API, IPN & Return Page logging.</label><br />'."\n";
|
189 |
+
echo '<em>This enables API, IPN and Return Page logging. The log files are stored here:<br /><code>'.esc_html(c_ws_plugin__s2member_utils_dirs::doc_root_path($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])).'</code></em>'."\n";
|
190 |
+
echo '</td>'."\n";
|
191 |
/**/
|
192 |
+
echo '</tr>'."\n";
|
193 |
}
|
194 |
/**/
|
195 |
+
echo '</tbody>'."\n";
|
196 |
+
echo '</table>'."\n";
|
197 |
/**/
|
198 |
+
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
199 |
/**/
|
200 |
+
echo '<p><em><strong>*Sandbox Tip*</strong> If you\'re testing your site through a PayPal® Sandbox account, please remember that Email Confirmations from s2Member will NOT be received after a test purchase. s2Member sends its Confirmation Emails to the PayPal® Email Address of the Customer. Since PayPal® Sandbox addresses are usually bogus ( for testing ), you will have to run live transactions before Email Confirmations from s2Member are received. That being said, all other s2Member functionality CAN be tested through a PayPal® Sandbox account. Email Confirmations are the only hang-up.</em></p>'."\n";
|
201 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_account_details_after_sandbox_tip", get_defined_vars());
|
202 |
+
echo '</div>'."\n";
|
203 |
/**/
|
204 |
+
echo '</div>'."\n";
|
205 |
/**/
|
206 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_paypal_account_details", get_defined_vars());
|
207 |
}
|
208 |
/**/
|
209 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_paypal_payflow_account_details", c_ws_plugin__s2member_utils_conds::pro_is_installed(), get_defined_vars()))
|
210 |
{
|
211 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_paypal_payflow_account_details", get_defined_vars());
|
212 |
+
/**/
|
213 |
+
echo '<div class="ws-menu-page-group" title="Payflow™ Account Details">'."\n";
|
214 |
+
/**/
|
215 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-payflow-account-details-section">'."\n";
|
216 |
+
echo '<a href="http://www.s2member.com/paypal" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/paypal-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
|
217 |
+
echo '<h3>Payflow® Account Details ( required, if using Payflow® )</h3>'."\n";
|
218 |
+
echo '<p>Newer PayPal® Pro accounts come with the Payflow® API for Recurring Billing service. If you have a newer PayPal® Pro account, and you wish to integrate PayPal\'s Recurring Billing service with s2Member® Pro Forms, you will need to fill in the details here. Providing Payflow® API Credentials here, automatically puts s2Member\'s Recurring Billing integration through Pro Forms, into Payflow® mode. Just fill in the details below, and you\'re ready to generate Pro Forms that charge customers on a recurring basis. s2Member® will use the Payflow® API instead of the standard PayPal® Pro API, which is being slowly phased out in favor of Payflow®.</p>'."\n";
|
219 |
+
echo '<p><em><strong>*Payflow® API Credentials*</strong> Once you have a PayPal® Pro account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">Payflow® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( Payflow® / API Access )</code>.</em></p>'."\n";
|
220 |
+
echo '<p><em><strong>*Important Note*</strong> s2Member® always uses the PayPal® Pro API. It can also use the Payflow® API (if details are supplied here). But please note... supplying Payflow® API Credentials here, does NOT mean you can bypass other sections. Please supply s2Member® with ALL of your PayPal® account details.</em></p>'."\n";
|
221 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_payflow_account_details", get_defined_vars());
|
222 |
+
/**/
|
223 |
+
echo '<table class="form-table">'."\n";
|
224 |
+
echo '<tbody>'."\n";
|
225 |
+
echo '<tr>'."\n";
|
226 |
+
/**/
|
227 |
+
echo '<th>'."\n";
|
228 |
+
echo '<label for="ws-plugin--s2member-paypal-payflow-api-username">'."\n";
|
229 |
+
echo 'Your Payflow® API Username:'."\n";
|
230 |
+
echo '</label>'."\n";
|
231 |
+
echo '</th>'."\n";
|
232 |
+
/**/
|
233 |
+
echo '</tr>'."\n";
|
234 |
+
echo '<tr>'."\n";
|
235 |
+
/**/
|
236 |
+
echo '<td>'."\n";
|
237 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_payflow_api_username" id="ws-plugin--s2member-paypal-payflow-api-username" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_username"]).'" /><br />'."\n";
|
238 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials) -> Payflow® API Access</code>.'."\n";
|
239 |
+
echo '</td>'."\n";
|
240 |
+
/**/
|
241 |
+
echo '</tr>'."\n";
|
242 |
+
echo '<tr>'."\n";
|
243 |
+
/**/
|
244 |
+
echo '<th>'."\n";
|
245 |
+
echo '<label for="ws-plugin--s2member-paypal-payflow-api-password">'."\n";
|
246 |
+
echo 'Your Payflow® API Password:'."\n";
|
247 |
+
echo '</label>'."\n";
|
248 |
+
echo '</th>'."\n";
|
249 |
+
/**/
|
250 |
+
echo '</tr>'."\n";
|
251 |
+
echo '<tr>'."\n";
|
252 |
+
/**/
|
253 |
+
echo '<td>'."\n";
|
254 |
+
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_payflow_api_password" id="ws-plugin--s2member-paypal-payflow-api-password" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_password"]).'" /><br />'."\n";
|
255 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials) -> Payflow® API Access</code>.'."\n";
|
256 |
+
echo '</td>'."\n";
|
257 |
+
/**/
|
258 |
+
echo '</tr>'."\n";
|
259 |
+
echo '<tr>'."\n";
|
260 |
+
/**/
|
261 |
+
echo '<th>'."\n";
|
262 |
+
echo '<label for="ws-plugin--s2member-paypal-payflow-api-partner">'."\n";
|
263 |
+
echo 'Your Payflow® API Partner:'."\n";
|
264 |
+
echo '</label>'."\n";
|
265 |
+
echo '</th>'."\n";
|
266 |
+
/**/
|
267 |
+
echo '</tr>'."\n";
|
268 |
+
echo '<tr>'."\n";
|
269 |
+
/**/
|
270 |
+
echo '<td>'."\n";
|
271 |
+
echo '<input type="text" name="ws_plugin__s2member_paypal_payflow_api_partner" id="ws-plugin--s2member-paypal-payflow-api-partner" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_partner"]).'" /><br />'."\n";
|
272 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials) -> Payflow® API Access</code>.'."\n";
|
273 |
+
echo '</td>'."\n";
|
274 |
+
/**/
|
275 |
+
echo '</tr>'."\n";
|
276 |
+
echo '<tr>'."\n";
|
277 |
+
/**/
|
278 |
+
echo '<th>'."\n";
|
279 |
+
echo '<label for="ws-plugin--s2member-paypal-payflow-api-vendor">'."\n";
|
280 |
+
echo 'Your Payflow® API Vendor:'."\n";
|
281 |
+
echo '</label>'."\n";
|
282 |
+
echo '</th>'."\n";
|
283 |
+
/**/
|
284 |
+
echo '</tr>'."\n";
|
285 |
+
echo '<tr>'."\n";
|
286 |
+
/**/
|
287 |
+
echo '<td>'."\n";
|
288 |
+
echo '<input type="text" name="ws_plugin__s2member_paypal_payflow_api_vendor" id="ws-plugin--s2member-paypal-payflow-api-vendor" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_payflow_api_vendor"]).'" /><br />'."\n";
|
289 |
+
echo 'At PayPal®, see: <code>Profile -> API Access (or Request API Credentials) -> Payflow® API Access</code>.'."\n";
|
290 |
+
echo '</td>'."\n";
|
291 |
+
/**/
|
292 |
+
echo '</tr>'."\n";
|
293 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_payflow_account_detail_rows", get_defined_vars());
|
294 |
+
echo '</tbody>'."\n";
|
295 |
+
echo '</table>'."\n";
|
296 |
+
echo '</div>'."\n";
|
297 |
+
/**/
|
298 |
+
echo '</div>'."\n";
|
299 |
+
/**/
|
300 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_paypal_payflow_account_details", get_defined_vars());
|
301 |
}
|
302 |
/**/
|
303 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_paypal_ipn", true, get_defined_vars()))
|
304 |
{
|
305 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_paypal_ipn", get_defined_vars());
|
306 |
+
/**/
|
307 |
+
echo '<div class="ws-menu-page-group" title="PayPal® IPN Integration">'."\n";
|
308 |
+
/**/
|
309 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-ipn-section">'."\n";
|
310 |
+
echo '<h3>PayPal® IPN / Instant Payment Notifications ( required, please enable )</h3>'."\n";
|
311 |
+
echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Instant Payment Notification Preferences</code></p>'."\n";
|
312 |
+
echo '<p>Edit your IPN settings & turn IPN Notifications: <strong><code>On</code></strong></p>'."\n";
|
313 |
+
echo '<p>You\'ll need your IPN URL, which is:<br /><code>'.esc_html(site_url("/?s2member_paypal_notify=1")).'</code></p>'."\n";
|
314 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn", get_defined_vars());
|
315 |
+
/**/
|
316 |
+
echo '<h3>More Information ( <a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-ipn-details\').toggle(); return false;" class="ws-dotted-link">click here</a> )</h3>'."\n";
|
317 |
+
echo '<div id="ws-plugin--s2member-paypal-ipn-details" style="display:none;">'."\n";
|
318 |
+
echo '<p><em><strong>*Quick Tip*</strong> In addition to the <a href="http://www.s2member.com/paypal-ipn-setup" target="_blank" rel="external">default IPN settings inside your PayPal® account</a>, the IPN URL is also set on a per-transaction basis by 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 IPN URL for each transaction. The result is that the IPN URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per-transaction basis. In fact, PayPal® recently updated their system to support IPN URL preservation. One PayPal® account can handle multiple sites, all using different IPN URLs.</em></p>'."\n";
|
319 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn_after_quick_tip", get_defined_vars());
|
320 |
+
echo '<p><em><strong>*IPN Communications*</strong> You\'ll be happy to know that s2Member handles cancellations, expirations, failed payments, terminations ( e.g. refunds & chargebacks ) for you automatically. If you log into your PayPal® account and cancel a Member\'s Subscription, or, if the Member logs into their PayPal® account and cancels their own Subscription, s2Member will be notified of these important changes and react accordingly through the PayPal® IPN service that runs silently behind-the-scene. The PayPal® IPN service will notify s2Member whenever a Member\'s payments have been failing, and/or whenever a Member\'s Subscription has expired for any reason. Even refunds & chargeback reversals are supported through the IPN service. If you issue a refund to an unhappy Customer through PayPal®, s2Member will be notified, and the account for that Customer will either be demoted to a Free Subscriber, or deleted automatically ( based on your configuration ). The communication from PayPal® -> s2Member is seamless.</em></p>'."\n";
|
321 |
+
echo '</div>'."\n";
|
322 |
+
/**/
|
323 |
+
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
324 |
+
/**/
|
325 |
+
echo '<h3>IPN w/ Proxy Key ( <a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-ipn-proxy-details\').toggle(); return false;" class="ws-dotted-link">optional, for 3rd-party integrations</a> )</h3>'."\n";
|
326 |
+
echo '<div id="ws-plugin--s2member-paypal-ipn-proxy-details" style="display:none;">'."\n";
|
327 |
+
echo '<p>If you\'re using a 3rd-party application that needs to POST simulated IPN transactions to your s2Member installation, you can use this alternate IPN URL, which includes a Proxy Key. This encrypted Proxy Key verifies incoming data being received by s2Member\'s IPN processor. You can change <em>[proxy-gateway]</em> to whatever you like. The <em>[proxy-gateway]</em> value is required. It will be stored by s2Member as the Customer\'s Paid Subscr. Gateway. Your [proxy-gateway] value will also be reflected in s2Member\'s IPN log.</p>'."\n";
|
328 |
+
echo '<input type="text" autocomplete="off" value="'.format_to_edit(site_url("/?s2member_paypal_notify=1&s2member_paypal_proxy=[proxy-gateway]&s2member_paypal_proxy_verification=".urlencode(c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()))).'" style="width:99%;" />'."\n";
|
329 |
+
echo '<p><em>Any 3rd-party application that is sending IPN transactions to your s2Member installation, must ALWAYS include the <code>custom</code> POST variable, and that variable must always start with your installation domain ( i.e. custom=<code>'.esc_html($_SERVER["HTTP_HOST"]).'</code> ). In addition, the <code>item_number</code> variable, must always match a format that s2Member looks for. Generally speaking, the <code>item_number</code> should be <code>1, 2, 3, or 4</code>, indicating a specific s2Member Level #. However, s2Member also uses some advanced formats in this field. Just to be sure, we suggest creating a PayPal® Button with the s2Member Button Generator, and then taking a look at the Full Button Code to see how s2Member expects <code>item_number</code> to be formatted. Other than the aforementioned exceptions; all other POST variables should follow PayPal® standards. Please see: <a href="http://www.s2member.com/paypal-ipn-pdt-vars" target="_blank" rel="external">PayPal\'s IPN/PDT reference guide</a> for full documentation.</em></p>'."\n";
|
330 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn_after_proxy", get_defined_vars());
|
331 |
+
echo '</div>'."\n";
|
332 |
+
echo '</div>'."\n";
|
333 |
+
/**/
|
334 |
+
echo '</div>'."\n";
|
335 |
+
/**/
|
336 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_paypal_ipn", get_defined_vars());
|
337 |
+
}
|
338 |
+
/**/
|
339 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_paypal_pdt", true, get_defined_vars()))
|
340 |
+
{
|
341 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_paypal_pdt", get_defined_vars());
|
342 |
/**/
|
343 |
+
echo '<div class="ws-menu-page-group" title="PayPal® PDT/Auto-Return Integration">'."\n";
|
344 |
/**/
|
345 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-pdt-section">'."\n";
|
346 |
+
echo '<h3>PayPal® PDT Identity Token ( required, please enable )</h3>'."\n";
|
347 |
+
echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Website Payment Preferences</code></p>'."\n";
|
348 |
+
echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>'."\n";
|
349 |
+
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";
|
350 |
+
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";
|
351 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt", get_defined_vars());
|
352 |
/**/
|
353 |
+
echo '<table class="form-table">'."\n";
|
354 |
+
echo '<tbody>'."\n";
|
355 |
+
echo '<tr>'."\n";
|
356 |
/**/
|
357 |
+
echo '<th>'."\n";
|
358 |
+
echo '<label for="ws-plugin--s2member-paypal-identity-token">'."\n";
|
359 |
+
echo 'PayPal® PDT Identity Token:'."\n";
|
360 |
+
echo '</label>'."\n";
|
361 |
+
echo '</th>'."\n";
|
362 |
/**/
|
363 |
+
echo '</tr>'."\n";
|
364 |
+
echo '<tr>'."\n";
|
365 |
/**/
|
366 |
+
echo '<td>'."\n";
|
367 |
+
echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_identity_token" id="ws-plugin--s2member-paypal-identity-token" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_identity_token"]).'" /><br />'."\n";
|
368 |
+
echo 'Your PDT Identity Token will appear under <em>Profile -> Website Payment Preferences</em> in your PayPal® account.'."\n";
|
369 |
+
echo '</td>'."\n";
|
370 |
/**/
|
371 |
+
echo '</tr>'."\n";
|
372 |
+
echo '</tbody>'."\n";
|
373 |
+
echo '</table>'."\n";
|
374 |
/**/
|
375 |
+
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
376 |
/**/
|
377 |
+
echo '<h3>More Information ( <a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-pdt-details\').toggle(); return false;" class="ws-dotted-link">click here</a> )</h3>'."\n";
|
378 |
+
echo '<div id="ws-plugin--s2member-paypal-pdt-details" style="display:none;">'."\n";
|
379 |
+
echo '<p><em><strong>*Quick Tip*</strong> In addition to the <a href="http://www.s2member.com/paypal-pdt-setup" 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";
|
380 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt_after_quick_tip", get_defined_vars());
|
381 |
+
echo '</div>'."\n";
|
382 |
/**/
|
383 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_pdt_after_more_info", get_defined_vars());
|
384 |
/**/
|
385 |
+
echo '</div>'."\n";
|
386 |
/**/
|
387 |
+
echo '</div>'."\n";
|
388 |
/**/
|
389 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_paypal_pdt", get_defined_vars());
|
390 |
}
|
391 |
/**/
|
392 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_signup_confirmation_email", true, get_defined_vars()))
|
393 |
{
|
394 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_signup_confirmation_email", get_defined_vars());
|
395 |
+
/**/
|
396 |
+
echo '<div class="ws-menu-page-group" title="Signup Confirmation Email ( Standard )">'."\n";
|
397 |
+
/**/
|
398 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-signup-confirmation-email-section">'."\n";
|
399 |
+
echo '<h3>Signup Confirmation Email ( required, but the default works fine )</h3>'."\n";
|
400 |
+
echo '<p>This email is sent to new Customers after they return from a successful signup at PayPal®. The <strong>primary</strong> purpose of this email, is to provide the Customer with instructions, along with a link to register a Username for their Membership. You may also customize this further, by providing details that are specifically geared to your site.</p>'."\n";
|
401 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_signup_confirmation_email", get_defined_vars());
|
402 |
+
/**/
|
403 |
+
echo '<table class="form-table">'."\n";
|
404 |
+
echo '<tbody>'."\n";
|
405 |
+
echo '<tr>'."\n";
|
406 |
+
/**/
|
407 |
+
echo '<th>'."\n";
|
408 |
+
echo '<label for="ws-plugin--s2member-signup-email-recipients">'."\n";
|
409 |
+
echo 'Signup Confirmation Recipients:'."\n";
|
410 |
+
echo '</label>'."\n";
|
411 |
+
echo '</th>'."\n";
|
412 |
+
/**/
|
413 |
+
echo '</tr>'."\n";
|
414 |
+
echo '<tr>'."\n";
|
415 |
+
/**/
|
416 |
+
echo '<td>'."\n";
|
417 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_signup_email_recipients" id="ws-plugin--s2member-signup-email-recipients" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_email_recipients"]).'" /><br />'."\n";
|
418 |
+
echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />'."\n";
|
419 |
+
echo '<code>"%%full_name%%" <%%payer_email%%>; admin@example.com; "Webmaster" <webmaster@example.com></code>'."\n";
|
420 |
+
echo '</td>'."\n";
|
421 |
+
/**/
|
422 |
+
echo '</tr>'."\n";
|
423 |
+
echo '<tr>'."\n";
|
424 |
+
/**/
|
425 |
+
echo '<th>'."\n";
|
426 |
+
echo '<label for="ws-plugin--s2member-signup-email-subject">'."\n";
|
427 |
+
echo 'Signup Confirmation Email Subject:'."\n";
|
428 |
+
echo '</label>'."\n";
|
429 |
+
echo '</th>'."\n";
|
430 |
+
/**/
|
431 |
+
echo '</tr>'."\n";
|
432 |
+
echo '<tr>'."\n";
|
433 |
+
/**/
|
434 |
+
echo '<td>'."\n";
|
435 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_signup_email_subject" id="ws-plugin--s2member-signup-email-subject" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_email_subject"]).'" /><br />'."\n";
|
436 |
+
echo 'Subject Line used in the email sent to a Customer after a successful signup has occurred through PayPal®.'."\n";
|
437 |
+
echo '</td>'."\n";
|
438 |
+
/**/
|
439 |
+
echo '</tr>'."\n";
|
440 |
+
echo '<tr>'."\n";
|
441 |
+
/**/
|
442 |
+
echo '<th>'."\n";
|
443 |
+
echo '<label for="ws-plugin--s2member-signup-email-message">'."\n";
|
444 |
+
echo 'Signup Confirmation Email Message:'."\n";
|
445 |
+
echo '</label>'."\n";
|
446 |
+
echo '</th>'."\n";
|
447 |
+
/**/
|
448 |
+
echo '</tr>'."\n";
|
449 |
+
echo '<tr>'."\n";
|
450 |
+
/**/
|
451 |
+
echo '<td>'."\n";
|
452 |
+
echo '<textarea name="ws_plugin__s2member_signup_email_message" id="ws-plugin--s2member-signup-email-message" rows="10">'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["signup_email_message"]).'</textarea><br />'."\n";
|
453 |
+
echo 'Message Body used in the email sent to a Customer after a successful signup has occurred through PayPal®.<br /><br />'."\n";
|
454 |
+
echo '<strong>You can also use these special Replacement Codes if you need them:</strong>'."\n";
|
455 |
+
echo '<ul>'."\n";
|
456 |
+
echo '<li><code>%%registration_url%%</code> = The full URL ( generated by s2Member ) where the Customer can get registered.</li>'."\n";
|
457 |
+
echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remains constant throughout any & all future payments. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the Transaction ID for the purchase. PayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime & Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>'."\n";
|
458 |
+
echo '<li><code>%%initial%%</code> = The Initial Fee charged during signup. If you offered a 100% Free Trial, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. If a Customer signs up, under the terms of a 100% Free Trial Period, this will be 0.\'); return false;">?</a> ]</li>'."\n";
|
459 |
+
echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. This value is <code>always > 0</code>, no matter what. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an Initial Period expires. The %%regular%% rate is always > 0. If you did NOT offer an Initial Period at a different price, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>'."\n";
|
460 |
+
echo '<li><code>%%recurring%%</code> = This is the amount that will be charged on a recurring basis, or <code>0</code> if non-recurring. [ <a href="#" onclick="alert(\'If Recurring Payments have not been required, this will be equal to 0. That being said, %%regular%% & %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the Regular Recurring Rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\'); return false;">?</a> ]</li>'."\n";
|
461 |
+
echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>'."\n";
|
462 |
+
echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>'."\n";
|
463 |
+
echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>'."\n";
|
464 |
+
echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>'."\n";
|
465 |
+
echo '<li><code>%%user_ip%%</code> = The Customer\'s IP Address, detected during checkout via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>'."\n";
|
466 |
+
echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <code><em>level:custom_capabilities:fixed term</em></code> ) that the Subscription is for.</li>'."\n";
|
467 |
+
echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>'."\n";
|
468 |
+
echo '<li><code>%%initial_term%%</code> = This is the term length of the Initial Period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe Initial Period never recurs, so this only lasts for the term length specified, then it is over.\'); return false;">?</a> ]</li>'."\n";
|
469 |
+
echo '<li><code>%%initial_cycle%%</code> = This is the <code>%%initial_term%%</code> from above, converted to a cycle representation of: <code><em>X days/weeks/months/years</em></code>.</li>'."\n";
|
470 |
+
echo '<li><code>%%regular_term%%</code> = This is the term length of the Regular Period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe Regular Term is usually recurring. So the Regular Term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the Regular Term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their Membership privileges are going to last after the %%initial_term%% has expired, if there was an Initial Term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>'."\n";
|
471 |
+
echo '<li><code>%%regular_cycle%%</code> = This is the <code>%%regular_term%%</code> from above, converted to a cycle representation of: <code><em>[every] X days/weeks/months/years — OR daily, weekly, bi-weekly, monthly, bi-monthly, quarterly, yearly, or lifetime</em></code>. This is a very useful Replacment Code. Its value is dynamic; depending on term length, recurring status, and period/term lengths configured.</li>'."\n";
|
472 |
+
echo '<li><code>%%recurring/regular_cycle%%</code> = Example ( <code>14.95 / Monthly</code> ), or ... ( <code>0 / non-recurring</code> ); depending on the value of <code>%%recurring%%</code>.</li>'."\n";
|
473 |
+
echo '</ul>'."\n";
|
474 |
+
/**/
|
475 |
+
echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>'."\n";
|
476 |
+
echo '<ul>'."\n";
|
477 |
+
echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>'."\n";
|
478 |
+
echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute; inside your Shortcode, like this: <code>custom="'.esc_html($_SERVER["HTTP_HOST"]).'|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables. Obviously, this is for advanced webmasters; but the functionality has been made available for those who need it.</li>'."\n";
|
479 |
+
echo '</ul>'."\n";
|
480 |
+
echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />'."\n";
|
481 |
+
echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />'."\n";
|
482 |
+
echo '<code>custom="'.esc_html($_SERVER["HTTP_HOST"]).'|christmas-promo"</code>'."\n";
|
483 |
+
/**/
|
484 |
+
echo '</td>'."\n";
|
485 |
+
/**/
|
486 |
+
echo '</tr>'."\n";
|
487 |
+
echo '</tbody>'."\n";
|
488 |
+
echo '</table>'."\n";
|
489 |
+
echo '</div>'."\n";
|
490 |
+
/**/
|
491 |
+
echo '</div>'."\n";
|
492 |
+
/**/
|
493 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_signup_confirmation_email", get_defined_vars());
|
494 |
}
|
495 |
/**/
|
496 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_sp_confirmation_email", true, get_defined_vars()))
|
497 |
{
|
498 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_sp_confirmation_email", get_defined_vars());
|
499 |
+
/**/
|
500 |
+
echo '<div class="ws-menu-page-group" title="Specific Post/Page Confirmation Email ( Standard )">'."\n";
|
501 |
+
/**/
|
502 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-confirmation-email-section">'."\n";
|
503 |
+
echo '<h3>Specific Post/Page Confirmation Email ( required, but the default works fine )</h3>'."\n";
|
504 |
+
echo '<p>This email is sent to new Customers after they return from a successful purchase at PayPal®, for Specific Post/Page Access. ( see: <code>s2Member -> Restriction Options -> Specific Post/Page Access</code> ). This is NOT used for Membership sales, only for Specific Post/Page Access. The <strong>primary</strong> purpose of this email, is to provide the Customer with instructions, along with a link to access the Specific Post/Page they\'ve purchased access to. If you\'ve created a Specific Post/Page Package ( with multiple Posts/Pages bundled together into one transaction ), this ONE link ( <code>%%sp_access_url%%</code> ) will automatically authenticate them for access to ALL of the Posts/Pages included in their transaction. You may customize this email further, by providing details that are specifically geared to your site.</p>'."\n";
|
505 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_sp_confirmation_email", get_defined_vars());
|
506 |
+
/**/
|
507 |
+
echo '<table class="form-table">'."\n";
|
508 |
+
echo '<tbody>'."\n";
|
509 |
+
echo '<tr>'."\n";
|
510 |
+
/**/
|
511 |
+
echo '<th>'."\n";
|
512 |
+
echo '<label for="ws-plugin--s2member-sp-email-recipients">'."\n";
|
513 |
+
echo 'Specific Post/Page Confirmation Recipients:'."\n";
|
514 |
+
echo '</label>'."\n";
|
515 |
+
echo '</th>'."\n";
|
516 |
+
/**/
|
517 |
+
echo '</tr>'."\n";
|
518 |
+
echo '<tr>'."\n";
|
519 |
+
/**/
|
520 |
+
echo '<td>'."\n";
|
521 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_sp_email_recipients" id="ws-plugin--s2member-sp-email-recipients" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_email_recipients"]).'" /><br />'."\n";
|
522 |
+
echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />'."\n";
|
523 |
+
echo '<code>"%%full_name%%" <%%payer_email%%>; admin@example.com; "Webmaster" <webmaster@example.com></code>'."\n";
|
524 |
+
echo '</td>'."\n";
|
525 |
+
/**/
|
526 |
+
echo '</tr>'."\n";
|
527 |
+
echo '<tr>'."\n";
|
528 |
+
/**/
|
529 |
+
echo '<th>'."\n";
|
530 |
+
echo '<label for="ws-plugin--s2member-sp-email-subject">'."\n";
|
531 |
+
echo 'Specific Post/Page Confirmation Email Subject:'."\n";
|
532 |
+
echo '</label>'."\n";
|
533 |
+
echo '</th>'."\n";
|
534 |
+
/**/
|
535 |
+
echo '</tr>'."\n";
|
536 |
+
echo '<tr>'."\n";
|
537 |
+
/**/
|
538 |
+
echo '<td>'."\n";
|
539 |
+
echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_sp_email_subject" id="ws-plugin--s2member-sp-email-subject" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_email_subject"]).'" /><br />'."\n";
|
540 |
+
echo 'Subject Line used in the email sent to a Customer after a successful purchase has occurred through PayPal®, for Specific Post/Page Access.'."\n";
|
541 |
+
echo '</td>'."\n";
|
542 |
+
/**/
|
543 |
+
echo '</tr>'."\n";
|
544 |
+
echo '<tr>'."\n";
|
545 |
+
/**/
|
546 |
+
echo '<th>'."\n";
|
547 |
+
echo '<label for="ws-plugin--s2member-sp-email-message">'."\n";
|
548 |
+
echo 'Specific Post/Page Confirmation Email Message:'."\n";
|
549 |
+
echo '</label>'."\n";
|
550 |
+
echo '</th>'."\n";
|
551 |
+
/**/
|
552 |
+
echo '</tr>'."\n";
|
553 |
+
echo '<tr>'."\n";
|
554 |
+
/**/
|
555 |
+
echo '<td>'."\n";
|
556 |
+
echo '<textarea name="ws_plugin__s2member_sp_email_message" id="ws-plugin--s2member-sp-email-message" rows="10">'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_email_message"]).'</textarea><br />'."\n";
|
557 |
+
echo 'Message Body used in the email sent to a Customer after a successful purchase has occurred through PayPal®, for Specific Post/Page Access.<br /><br />'."\n";
|
558 |
+
echo '<strong>You can also use these special Replacement Codes if you need them:</strong>'."\n";
|
559 |
+
echo '<ul>'."\n";
|
560 |
+
echo '<li><code>%%sp_access_url%%</code> = The full URL ( generated by s2Member ) where the Customer can gain access.</li>'."\n";
|
561 |
+
echo '<li><code>%%sp_access_exp%%</code> = Human readable expiration for <code>%%sp_access_url%%</code>. Ex: <em>( link expires in <code>%%sp_access_exp%%</code> )</em>.</li>'."\n";
|
562 |
+
echo '<li><code>%%txn_id%%</code> = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</li>'."\n";
|
563 |
+
echo '<li><code>%%amount%%</code> = The full Amount that you charged for Specific Post/Page Access. This value will <code>always be > 0</code>.</li>'."\n";
|
564 |
+
echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>'."\n";
|
565 |
+
echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>'."\n";
|
566 |
+
echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</li>'."\n";
|
567 |
+
echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased Specific Post/Page Access.</li>'."\n";
|
568 |
+
echo '<li><code>%%user_ip%%</code> = The Customer\'s IP Address, detected during checkout via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>'."\n";
|
569 |
+
echo '<li><code>%%item_number%%</code> = The Item Number. Ex: <code><em>sp:13,24,36:72</em></code> ( translates to: <code><em>sp:comma-delimited IDs:expiration hours</em></code> ).</li>'."\n";
|
570 |
+
echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>'."\n";
|
571 |
+
echo '</ul>'."\n";
|
572 |
+
/**/
|
573 |
+
echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>'."\n";
|
574 |
+
echo '<ul>'."\n";
|
575 |
+
echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>'."\n";
|
576 |
+
echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute; inside your Shortcode, like this: <code>custom="'.esc_html($_SERVER["HTTP_HOST"]).'|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables. Obviously, this is for advanced webmasters; but the functionality has been made available for those who need it.</li>'."\n";
|
577 |
+
echo '</ul>'."\n";
|
578 |
+
echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />'."\n";
|
579 |
+
echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />'."\n";
|
580 |
+
echo '<code>custom="'.esc_html($_SERVER["HTTP_HOST"]).'|christmas-promo"</code>'."\n";
|
581 |
+
/**/
|
582 |
+
echo '</td>'."\n";
|
583 |
+
/**/
|
584 |
+
echo '</tr>'."\n";
|
585 |
+
echo '</tbody>'."\n";
|
586 |
+
echo '</table>'."\n";
|
587 |
+
echo '</div>'."\n";
|
588 |
+
/**/
|
589 |
+
echo '</div>'."\n";
|
590 |
+
/**/
|
591 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_sp_confirmation_email", get_defined_vars());
|
592 |
}
|
593 |
/**/
|
594 |
+
if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_eot_behavior", true, get_defined_vars()))
|
595 |
{
|
596 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_eot_behavior", get_defined_vars());
|
597 |
/**/
|
598 |
+
echo '<div class="ws-menu-page-group" title="Automatic EOT Behavior">'."\n";
|
599 |
/**/
|
600 |
+
echo '<div class="ws-menu-page-section ws-plugin--s2member-eot-behavior-section">'."\n";
|
601 |
+
echo '<h3>PayPal® EOT Behavior ( required, please choose )</h3>'."\n";
|
602 |
+
echo '<p>EOT = End Of Term. By default, s2Member will demote a paid Member to a Free Subscriber whenever their Subscription term has ended ( i.e. expired ), been cancelled, refunded, charged back to you, etc. s2Member demotes them to a Free Subscriber, so they will no longer have Member Level Access to your site. However, in some cases, you may prefer to have Customer accounts deleted completely, instead of just being demoted. This is where you choose which method works best for your site. If you don\'t want s2Member to take ANY action at all, you can disable s2Member\'s EOT System temporarily, or even completely.</p>'."\n";
|
603 |
+
echo '<p>The PayPal® IPN service will notify s2Member whenever a Member\'s payments have been failing, and/or whenever a Member\'s Subscription has expired for any reason. Even refunds & chargeback reversals are supported through the IPN service. For example, if you issue a refund to an unhappy Customer through PayPal®, s2Member will eventually be notified, and the account for that Customer will either be demoted to a Free Subscriber, or deleted automatically ( based on your configuration ). The communication from PayPal® -> s2Member is seamless.</p>'."\n";
|
604 |
+
echo '<p><em><strong>*Some Hairy Details*</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal®... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT ( End Of Term ) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>'."\n";
|
605 |
+
echo '<p><em>s2Member will not process an EOT until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system ( based on your configuration ). s2Member also calculates one extra day ( 24 hours ) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>'."\n";
|
606 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_eot_behavior", get_defined_vars());
|
607 |
/**/
|
608 |
+
echo '<p id="ws-plugin--s2member-auto-eot-system-enabled-via-cron"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] == 2 && (!function_exists("wp_cron") || !wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule"))) ? '' : ' style="display:none;"').'>If you\'d like to run s2Member\'s Auto-EOT System through a more traditional Cron Job; instead of through <code>WP-Cron</code>, you will need to configure a Cron Job through your server control panel; provided by your hosting company. Set the Cron Job to run <code>once about every 10 minutes to an hour</code>. You\'ll want to configure an HTTP Cron Job that loads this URL:<br /><code>'.esc_html(site_url("/?s2member_auto_eot_system_via_cron=1")).'</code></p>'."\n";
|
609 |
/**/
|
610 |
+
echo '<table class="form-table">'."\n";
|
611 |
+
echo '<tbody>'."\n";
|
612 |
+
echo '<tr>'."\n";
|
613 |
/**/
|
614 |
+
echo '<th>'."\n";
|
615 |
+
echo '<label for="ws-plugin--s2member-auto-eot-system-enabled">'."\n";
|
616 |
+
echo 'Enable s2Member\'s Auto-EOT System?'."\n";
|
617 |
+
echo '</label>'."\n";
|
618 |
+
echo '</th>'."\n";
|
619 |
/**/
|
620 |
+
echo '</tr>'."\n";
|
621 |
+
echo '<tr>'."\n";
|
622 |
/**/
|
623 |
+
echo '<td>'."\n";
|
624 |
+
echo '<select name="ws_plugin__s2member_auto_eot_system_enabled" id="ws-plugin--s2member-auto-eot-system-enabled">'."\n";
|
625 |
/* Very advanced conditionals here. If the Auto-EOT System is NOT running, or NOT fully configured, this will indicate that no option is set - as sort of a built-in acknowledgment/warning in the UI panel. */
|
626 |
+
echo (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] == 1 && (!function_exists("wp_cron") || !wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule"))) || ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] == 2 && (function_exists("wp_cron") && wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule"))) || (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] && (function_exists("wp_cron") && wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule")))) ? '<option value=""></option>'."\n" : '';
|
627 |
+
echo '<option value="1"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] == 1 && function_exists("wp_cron") && wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule")) ? ' selected="selected"' : '').'>Yes ( enable the Auto-EOT System through WP-Cron )</option>'."\n";
|
628 |
+
echo (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) ? '<option value="2"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] == 2 && (!function_exists("wp_cron") || !wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule"))) ? ' selected="selected"' : '').'>Yes ( but, I\'ll run it with my own Cron Job )</option>'."\n" : '';
|
629 |
+
echo '<option value="0"'.((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["auto_eot_system_enabled"] && (!function_exists("wp_cron") || !wp_get_schedule("ws_plugin__s2member_auto_eot_system__schedule"))) ? ' selected="selected"' : '').'>No ( disable the Auto-EOT System )</option>'."\n";
|
630 |
+
echo '</select><br />'."\n";
|
631 |
+
echo 'Recommended setting: ( <code>Yes / enable via WP-Cron</code> )'."\n";
|
632 |
+
echo '</td>'."\n";
|
633 |
+
/**/
|
634 |
+
echo '</tr>'."\n";
|
635 |
+
echo '<tr>'."\n";
|
636 |
+
/**/
|
637 |
+
echo '<th>'."\n";
|
638 |
+
echo '<label for="ws-plugin--s2member-membership-eot-behavior">'."\n";
|
639 |
+
echo 'Membership EOT Behavior ( demote or delete )?'."\n";
|
640 |
+
echo '</label>'."\n";
|
641 |
+
echo '</th>'."\n";
|
642 |
+
/**/
|
643 |
+
echo '</tr>'."\n";
|
644 |
+
echo '<tr>'."\n";
|
645 |
+
/**/
|
646 |
+
echo '<td>'."\n";
|
647 |
+
echo '<select name="ws_plugin__s2member_membership_eot_behavior" id="ws-plugin--s2member-membership-eot-behavior">'."\n";
|
648 |
+
echo '<option value="demote"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_eot_behavior"] === "demote") ? ' selected="selected"' : '').'>Demote ( convert them to a Free Subscriber )</option>'."\n";
|
649 |
+
echo '<option value="delete"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_eot_behavior"] === "delete") ? ' selected="selected"' : '').'>Delete ( erase their account completely )</option>'."\n";
|
650 |
+
echo '</select>'."\n";
|
651 |
+
echo '</td>'."\n";
|
652 |
+
/**/
|
653 |
+
echo '</tr>'."\n";
|
654 |
+
echo '<tr>'."\n";
|
655 |
+
/**/
|
656 |
+
echo '<th>'."\n";
|
657 |
+
echo '<label for="ws-plugin--s2member-triggers-immediate-eot">'."\n";
|
658 |
+
echo 'Refunds/Reversals ( trigger immediate EOT )?'."\n";
|
659 |
+
echo '</label>'."\n";
|
660 |
+
echo '</th>'."\n";
|
661 |
+
/**/
|
662 |
+
echo '</tr>'."\n";
|
663 |
+
echo '<tr>'."\n";
|
664 |
+
/**/
|
665 |
+
echo '<td>'."\n";
|
666 |
+
echo '<select name="ws_plugin__s2member_triggers_immediate_eot" id="ws-plugin--s2member-triggers-immediate-eot">'."\n";
|
667 |
+
echo '<option value="none"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "none") ? ' selected="selected"' : '').'>Neither ( I\'ll review these two events manually )</option>'."\n";
|
668 |
+
echo '<option value="refunds"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "refunds") ? ' selected="selected"' : '').'>Refunds ( refunds ALWAYS trigger an immediate EOT action )</option>'."\n";
|
669 |
+
echo '<option value="reversals"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "reversals") ? ' selected="selected"' : '').'>Reversals ( chargebacks ALWAYS trigger an immediate EOT action )</option>'."\n";
|
670 |
+
echo '<option value="refunds,reversals"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["triggers_immediate_eot"] === "refunds,reversals") ? ' selected="selected"' : '').'>Refunds/Reversals ( ALWAYS trigger an immediate EOT action )</option>'."\n";
|
671 |
+
echo '</select><br />'."\n";
|
672 |
+
echo 'This setting will <a href="#" onclick="alert(\'A Refund/Reversal Notification will ALWAYS be processed internally by s2Member, even if no action is taken by s2Member. This way you\\\'ll have the full ability to listen for these two events on your own; if you prefer ( optional ). For more information, check your Dashboard under: `s2Member -> API Notifications -> Refunds/Reversals`.\'); return false;">NOT affect</a> s2Member\'s internal API Notifications for Refund/Reversal events.'."\n";
|
673 |
+
echo '</td>'."\n";
|
674 |
+
/**/
|
675 |
+
echo '</tr>'."\n";
|
676 |
+
echo '<tr>'."\n";
|
677 |
+
/**/
|
678 |
+
echo '<th>'."\n";
|
679 |
+
echo '<label for="ws-plugin--s2member-eot-time-ext-behavior">'."\n";
|
680 |
+
echo 'Fixed-Term Extensions ( auto-extend )?'."\n";
|
681 |
+
echo '</label>'."\n";
|
682 |
+
echo '</th>'."\n";
|
683 |
+
/**/
|
684 |
+
echo '</tr>'."\n";
|
685 |
+
echo '<tr>'."\n";
|
686 |
+
/**/
|
687 |
+
echo '<td>'."\n";
|
688 |
+
echo '<select name="ws_plugin__s2member_eot_time_ext_behavior" id="ws-plugin--s2member-eot-time-ext-behavior">'."\n";
|
689 |
+
echo '<option value="extend"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_time_ext_behavior"] === "extend") ? ' selected="selected"' : '').'>Yes ( default, automatically extend any existing EOT Time )</option>'."\n";
|
690 |
+
echo '<option value="reset"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_time_ext_behavior"] === "reset") ? ' selected="selected"' : '').'>No ( do NOT extend; s2Member should reset EOT Time completely )</option>'."\n";
|
691 |
+
echo '</select><br />'."\n";
|
692 |
+
echo 'This setting will only affect Buy Now transactions for fixed-term lengths. By default, s2Member will automatically extend any existing EOT Time that a Customer may have.'."\n";
|
693 |
+
echo '</td>'."\n";
|
694 |
+
/**/
|
695 |
+
echo '</tr>'."\n";
|
696 |
+
echo '</tbody>'."\n";
|
697 |
+
echo '</table>'."\n";
|
698 |
+
echo '</div>'."\n";
|
699 |
+
/**/
|
700 |
+
echo '</div>'."\n";
|
701 |
+
/**/
|
702 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_eot_behavior", get_defined_vars());
|
703 |
}
|
704 |
/**/
|
705 |
+
do_action("ws_plugin__s2member_during_paypal_ops_page_after_left_sections", get_defined_vars());
|
706 |
/**/
|
707 |
+
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
708 |
/**/
|
709 |
+
echo '<p class="submit"><input type="submit" class="button-primary" value="Save All Changes" /></p>'."\n";
|
710 |
/**/
|
711 |
+
echo '</form>'."\n";
|
712 |
/**/
|
713 |
+
echo '</td>'."\n";
|
714 |
/**/
|
715 |
+
echo '<td class="ws-menu-page-table-r">'."\n";
|
716 |
+
c_ws_plugin__s2member_menu_pages_rs::display();
|
717 |
+
echo '</td>'."\n";
|
718 |
/**/
|
719 |
+
echo '</tr>'."\n";
|
720 |
+
echo '</tbody>'."\n";
|
721 |
+
echo '</table>'."\n";
|
722 |
/**/
|
723 |
+
echo '</div>'."\n";
|
724 |
}
|
725 |
}
|
726 |
}
|
727 |
/**/
|
728 |
+
new c_ws_plugin__s2member_menu_page_paypal_ops();
|
729 |
?>
|
includes/syscon.inc.php
CHANGED
@@ -160,8 +160,7 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
|
|
160 |
$default_options["mms_auto_patch"] = "1";
|
161 |
$default_options["mms_registration_file"] = "wp-login";
|
162 |
$default_options["mms_registration_grants"] = "none";
|
163 |
-
for($n = 0, $v = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++, $v = $v + 5)
|
164 |
-
$default_options["mms_registration_blogs_level".$n] = (string)$v;
|
165 |
/**/
|
166 |
$default_options["login_welcome_page"] = "";
|
167 |
$default_options["login_redirection_override"] = "";
|
@@ -208,6 +207,11 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
|
|
208 |
$default_options["paypal_identity_token"] = "";
|
209 |
$default_options["paypal_btn_encryption"] = "0";
|
210 |
/**/
|
|
|
|
|
|
|
|
|
|
|
211 |
$default_options["signup_tracking_codes"] = "";
|
212 |
$default_options["modification_tracking_codes"] = "";
|
213 |
$default_options["ccap_tracking_codes"] = "";
|
@@ -223,11 +227,9 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
|
|
223 |
/**/
|
224 |
$default_options["mailchimp_api_key"] = "";
|
225 |
/**/
|
226 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
227 |
-
$default_options["level".$n."_mailchimp_list_ids"] = "";
|
228 |
/**/
|
229 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
230 |
-
$default_options["level".$n."_aweber_list_ids"] = "";
|
231 |
/**/
|
232 |
$default_options["signup_notification_urls"] = "";
|
233 |
$default_options["registration_notification_urls"] = "";
|
@@ -249,16 +251,13 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
|
|
249 |
$default_options["sp_sale_notification_recipients"] = "";
|
250 |
$default_options["sp_ref_rev_notification_recipients"] = "";
|
251 |
/**/
|
252 |
-
for($n = 0, $l = array(_x("Free Subscriber", "s2member-front", "s2member"), _x("Bronze Member", "s2member-front", "s2member"), _x("Silver Member", "s2member-front", "s2member"), _x("Gold Member", "s2member-front", "s2member"), _x("Platinum Member", "s2member-front", "s2member")); $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
253 |
-
$default_options["level".$n."_label"] = (!empty($l[$n])) ? $l[$n] : sprintf(_x("Level %s Member", "s2member-front", "s2member"), $n);
|
254 |
/**/
|
255 |
$default_options["apply_label_translations"] = "0";
|
256 |
/**/
|
257 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
258 |
-
$default_options["level".$n."_file_downloads_allowed"] = "";
|
259 |
/**/
|
260 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
261 |
-
$default_options["level".$n."_file_downloads_allowed_days"] = "";
|
262 |
/**/
|
263 |
$default_options["file_download_limit_exceeded_page"] = "";
|
264 |
$default_options["file_download_inline_extensions"] = "";
|
@@ -280,20 +279,15 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
|
|
280 |
$default_options["amazon_cf_files_distro_streaming_dname"] = "";
|
281 |
$default_options["amazon_cf_files_distros_auto_config_status"] = "";
|
282 |
/**/
|
283 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
284 |
-
$default_options["level".$n."_ruris"] = "";
|
285 |
/**/
|
286 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
287 |
-
$default_options["level".$n."_catgs"] = "";
|
288 |
/**/
|
289 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
290 |
-
$default_options["level".$n."_ptags"] = "";
|
291 |
/**/
|
292 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
293 |
-
$default_options["level".$n."_posts"] = "";
|
294 |
/**/
|
295 |
-
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
|
296 |
-
$default_options["level".$n."_pages"] = "";
|
297 |
/**/
|
298 |
$default_options["specific_ids"] = "";
|
299 |
/**/
|
@@ -454,6 +448,9 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
|
|
454 |
else if(preg_match("/^paypal_(?:business|api_username|api_password|api_signature|identity_token)$/", $key) && (!is_string($value) || !strlen($value)))
|
455 |
$value = $default_options[$key];
|
456 |
/**/
|
|
|
|
|
|
|
457 |
else if($key === "paypal_btn_encryption" && (!is_string($value) || !is_numeric($value)))
|
458 |
$value = $default_options[$key];
|
459 |
/**/
|
160 |
$default_options["mms_auto_patch"] = "1";
|
161 |
$default_options["mms_registration_file"] = "wp-login";
|
162 |
$default_options["mms_registration_grants"] = "none";
|
163 |
+
for($n = 0, $v = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++, $v = $v + 5)$default_options["mms_registration_blogs_level".$n] = (string)$v;
|
|
|
164 |
/**/
|
165 |
$default_options["login_welcome_page"] = "";
|
166 |
$default_options["login_redirection_override"] = "";
|
207 |
$default_options["paypal_identity_token"] = "";
|
208 |
$default_options["paypal_btn_encryption"] = "0";
|
209 |
/**/
|
210 |
+
$default_options["paypal_payflow_api_username"] = "";
|
211 |
+
$default_options["paypal_payflow_api_partner"] = "PayPal";
|
212 |
+
$default_options["paypal_payflow_api_vendor"] = "";
|
213 |
+
$default_options["paypal_payflow_api_password"] = "";
|
214 |
+
/**/
|
215 |
$default_options["signup_tracking_codes"] = "";
|
216 |
$default_options["modification_tracking_codes"] = "";
|
217 |
$default_options["ccap_tracking_codes"] = "";
|
227 |
/**/
|
228 |
$default_options["mailchimp_api_key"] = "";
|
229 |
/**/
|
230 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_mailchimp_list_ids"] = "";
|
|
|
231 |
/**/
|
232 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_aweber_list_ids"] = "";
|
|
|
233 |
/**/
|
234 |
$default_options["signup_notification_urls"] = "";
|
235 |
$default_options["registration_notification_urls"] = "";
|
251 |
$default_options["sp_sale_notification_recipients"] = "";
|
252 |
$default_options["sp_ref_rev_notification_recipients"] = "";
|
253 |
/**/
|
254 |
+
for($n = 0, $l = array(_x("Free Subscriber", "s2member-front", "s2member"), _x("Bronze Member", "s2member-front", "s2member"), _x("Silver Member", "s2member-front", "s2member"), _x("Gold Member", "s2member-front", "s2member"), _x("Platinum Member", "s2member-front", "s2member")); $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_label"] = (!empty($l[$n])) ? $l[$n] : sprintf(_x("Level %s Member", "s2member-front", "s2member"), $n);
|
|
|
255 |
/**/
|
256 |
$default_options["apply_label_translations"] = "0";
|
257 |
/**/
|
258 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_file_downloads_allowed"] = "";
|
|
|
259 |
/**/
|
260 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_file_downloads_allowed_days"] = "";
|
|
|
261 |
/**/
|
262 |
$default_options["file_download_limit_exceeded_page"] = "";
|
263 |
$default_options["file_download_inline_extensions"] = "";
|
279 |
$default_options["amazon_cf_files_distro_streaming_dname"] = "";
|
280 |
$default_options["amazon_cf_files_distros_auto_config_status"] = "";
|
281 |
/**/
|
282 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_ruris"] = "";
|
|
|
283 |
/**/
|
284 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_catgs"] = "";
|
|
|
285 |
/**/
|
286 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_ptags"] = "";
|
|
|
287 |
/**/
|
288 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_posts"] = "";
|
|
|
289 |
/**/
|
290 |
+
for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)$default_options["level".$n."_pages"] = "";
|
|
|
291 |
/**/
|
292 |
$default_options["specific_ids"] = "";
|
293 |
/**/
|
448 |
else if(preg_match("/^paypal_(?:business|api_username|api_password|api_signature|identity_token)$/", $key) && (!is_string($value) || !strlen($value)))
|
449 |
$value = $default_options[$key];
|
450 |
/**/
|
451 |
+
else if(preg_match("/^paypal_payflow(?:api_username|api_partner|api_vendor|api_password)$/", $key) && (!is_string($value) || !strlen($value)))
|
452 |
+
$value = $default_options[$key];
|
453 |
+
/**/
|
454 |
else if($key === "paypal_btn_encryption" && (!is_string($value) || !is_numeric($value)))
|
455 |
$value = $default_options[$key];
|
456 |
/**/
|
includes/translations/s2member.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the s2Member® Framework package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: s2Member® Framework
|
6 |
-
"Report-Msgid-Bugs-To: http://wordpress.org/tag/
|
7 |
-
"POT-Creation-Date: 2012-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -666,6 +666,8 @@ msgid "Error #%1$s. %2$s. %3$s."
|
|
666 |
msgstr ""
|
667 |
|
668 |
#: s2member/includes/classes/paypal-utilities.inc.php:178
|
|
|
|
|
669 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:96
|
670 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:318
|
671 |
msgctxt "s2member-front"
|
@@ -674,15 +676,41 @@ msgstr ""
|
|
674 |
|
675 |
#: s2member/includes/classes/paypal-utilities.inc.php:219
|
676 |
#: s2member/includes/classes/paypal-utilities.inc.php:225
|
|
|
|
|
677 |
msgctxt "s2member-front"
|
678 |
msgid "Error #%s. Transaction declined. Please use an alternate funding source."
|
679 |
msgstr ""
|
680 |
|
681 |
#: s2member/includes/classes/paypal-utilities.inc.php:222
|
|
|
682 |
msgctxt "s2member-front"
|
683 |
msgid "Error #%s. Transaction declined. Express Checkout was NOT confirmed."
|
684 |
msgstr ""
|
685 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
686 |
#: s2member/includes/classes/profile-in.inc.php:78
|
687 |
#: s2member/includes/classes/sc-profile-in.inc.php:94
|
688 |
#: s2member-pro/includes/classes/login-widget.inc.php:118
|
@@ -1420,12 +1448,12 @@ msgctxt "s2member-front"
|
|
1420 |
msgid "Yes, I want to receive updates via email."
|
1421 |
msgstr ""
|
1422 |
|
1423 |
-
#: s2member/includes/syscon.inc.php:
|
1424 |
msgctxt "s2member-front"
|
1425 |
msgid "[%s] Username/Password"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#: s2member/includes/syscon.inc.php:
|
1429 |
msgctxt "s2member-front"
|
1430 |
msgid ""
|
1431 |
"Your Username/Password for:\n"
|
@@ -1436,12 +1464,12 @@ msgid ""
|
|
1436 |
"%%%%wp_login_url%%%%"
|
1437 |
msgstr ""
|
1438 |
|
1439 |
-
#: s2member/includes/syscon.inc.php:
|
1440 |
msgctxt "s2member-front"
|
1441 |
msgid "[%s] New User Registration"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
-
#: s2member/includes/syscon.inc.php:
|
1445 |
msgctxt "s2member-front"
|
1446 |
msgid ""
|
1447 |
"New User Registration on your site:\n"
|
@@ -1453,12 +1481,12 @@ msgid ""
|
|
1453 |
"IP Address: %%%%user_ip%%%%"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
-
#: s2member/includes/syscon.inc.php:
|
1457 |
msgctxt "s2member-front"
|
1458 |
msgid "Congratulations! ( your membership has been approved )"
|
1459 |
msgstr ""
|
1460 |
|
1461 |
-
#: s2member/includes/syscon.inc.php:
|
1462 |
msgctxt "s2member-front"
|
1463 |
msgid ""
|
1464 |
"Thanks %%%%first_name%%%%! Your membership has been approved.\n"
|
@@ -1474,12 +1502,12 @@ msgid ""
|
|
1474 |
"%s"
|
1475 |
msgstr ""
|
1476 |
|
1477 |
-
#: s2member/includes/syscon.inc.php:
|
1478 |
msgctxt "s2member-front"
|
1479 |
msgid "Thank You! ( instructions for access )"
|
1480 |
msgstr ""
|
1481 |
|
1482 |
-
#: s2member/includes/syscon.inc.php:
|
1483 |
msgctxt "s2member-front"
|
1484 |
msgid ""
|
1485 |
"Thanks %%%%first_name%%%%!\n"
|
@@ -1496,32 +1524,32 @@ msgid ""
|
|
1496 |
"%s"
|
1497 |
msgstr ""
|
1498 |
|
1499 |
-
#: s2member/includes/syscon.inc.php:
|
1500 |
msgctxt "s2member-front"
|
1501 |
msgid "Free Subscriber"
|
1502 |
msgstr ""
|
1503 |
|
1504 |
-
#: s2member/includes/syscon.inc.php:
|
1505 |
msgctxt "s2member-front"
|
1506 |
msgid "Bronze Member"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: s2member/includes/syscon.inc.php:
|
1510 |
msgctxt "s2member-front"
|
1511 |
msgid "Silver Member"
|
1512 |
msgstr ""
|
1513 |
|
1514 |
-
#: s2member/includes/syscon.inc.php:
|
1515 |
msgctxt "s2member-front"
|
1516 |
msgid "Gold Member"
|
1517 |
msgstr ""
|
1518 |
|
1519 |
-
#: s2member/includes/syscon.inc.php:
|
1520 |
msgctxt "s2member-front"
|
1521 |
msgid "Platinum Member"
|
1522 |
msgstr ""
|
1523 |
|
1524 |
-
#: s2member/includes/syscon.inc.php:
|
1525 |
msgctxt "s2member-front"
|
1526 |
msgid "Level %s Member"
|
1527 |
msgstr ""
|
@@ -2364,6 +2392,7 @@ msgstr ""
|
|
2364 |
|
2365 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-cancellation-in.inc.php:115
|
2366 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:114
|
|
|
2367 |
msgctxt "s2member-front"
|
2368 |
msgid "<strong>Billing termination confirmed.</strong> Your account has been cancelled."
|
2369 |
msgstr ""
|
@@ -2374,6 +2403,9 @@ msgstr ""
|
|
2374 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:126
|
2375 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:138
|
2376 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:146
|
|
|
|
|
|
|
2377 |
msgctxt "s2member-front"
|
2378 |
msgid "<strong>Billing terminated.</strong> Your account has been cancelled."
|
2379 |
msgstr ""
|
@@ -2381,7 +2413,9 @@ msgstr ""
|
|
2381 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-cancellation-in.inc.php:147
|
2382 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-update-in.inc.php:133
|
2383 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:154
|
|
|
2384 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:150
|
|
|
2385 |
msgctxt "s2member-front"
|
2386 |
msgid "You're <strong>NOT</strong> logged in."
|
2387 |
msgstr ""
|
@@ -2390,6 +2424,8 @@ msgstr ""
|
|
2390 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:580
|
2391 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:289
|
2392 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:612
|
|
|
|
|
2393 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:420
|
2394 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:848
|
2395 |
msgctxt "s2member-front"
|
@@ -2400,6 +2436,8 @@ msgstr ""
|
|
2400 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:696
|
2401 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:451
|
2402 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:764
|
|
|
|
|
2403 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:682
|
2404 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1000
|
2405 |
msgctxt "s2member-front"
|
@@ -2416,6 +2454,10 @@ msgstr ""
|
|
2416 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:481
|
2417 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:773
|
2418 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:794
|
|
|
|
|
|
|
|
|
2419 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:691
|
2420 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:712
|
2421 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1009
|
@@ -2430,6 +2472,8 @@ msgstr ""
|
|
2430 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:717
|
2431 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:472
|
2432 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:785
|
|
|
|
|
2433 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:703
|
2434 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1021
|
2435 |
msgctxt "s2member-front"
|
@@ -2438,7 +2482,9 @@ msgstr ""
|
|
2438 |
|
2439 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:737
|
2440 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:805
|
|
|
2441 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1041
|
|
|
2442 |
msgctxt "s2member-front"
|
2443 |
msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
|
2444 |
msgstr ""
|
@@ -2533,9 +2579,9 @@ msgid "Authorize.Net® configuration error. Your Authorize.Net® Secret MD5 Hash
|
|
2533 |
msgstr ""
|
2534 |
|
2535 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:238
|
2536 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2537 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:241
|
2538 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2539 |
msgctxt "s2member-front"
|
2540 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to cancel your account."
|
2541 |
msgstr ""
|
@@ -2548,328 +2594,332 @@ msgstr ""
|
|
2548 |
|
2549 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:246
|
2550 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:249
|
2551 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2552 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
|
|
2553 |
msgctxt "s2member-front"
|
2554 |
msgid "Nothing to cancel. You have NO recurring fees."
|
2555 |
msgstr ""
|
2556 |
|
2557 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:256
|
2558 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2559 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2560 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2561 |
msgctxt "s2member-front"
|
2562 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to update your billing information."
|
2563 |
msgstr ""
|
2564 |
|
2565 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:259
|
2566 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2567 |
msgctxt "s2member-front"
|
2568 |
msgid "Nothing to update. You're NOT a paid Member."
|
2569 |
msgstr ""
|
2570 |
|
2571 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:264
|
2572 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:267
|
2573 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2574 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
|
|
2575 |
msgctxt "s2member-front"
|
2576 |
msgid "Nothing to update. You have NO recurring fees. Or, your billing profile is no longer active. Please contact Support if you need assistance."
|
2577 |
msgstr ""
|
2578 |
|
2579 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:274
|
2580 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2581 |
msgctxt "s2member-admin"
|
2582 |
msgid "Invalid form configuration. Missing \"level\" attribute. Membership Level. Must be numeric [0-%s]."
|
2583 |
msgstr ""
|
2584 |
|
2585 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:277
|
2586 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2587 |
msgctxt "s2member-admin"
|
2588 |
msgid "Invalid form configuration. Invalid \"level\" attribute. Membership Level. Must be numeric [0-%s]."
|
2589 |
msgstr ""
|
2590 |
|
2591 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:280
|
2592 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:370
|
2593 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2594 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2595 |
msgctxt "s2member-admin"
|
2596 |
msgid "Invalid form configuration. Invalid \"ccaps\" attribute. Custom Capabilities. When provided, must be all lowercase [a-z_0-9,]. A preceding `-all,` directive is also acceptable."
|
2597 |
msgstr ""
|
2598 |
|
2599 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:283
|
2600 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:394
|
2601 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2602 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2603 |
msgctxt "s2member-admin"
|
2604 |
msgid "Invalid form configuration. Invalid \"tp\" attribute. The Trial Period. When provided, must be numeric."
|
2605 |
msgstr ""
|
2606 |
|
2607 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:286
|
2608 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:397
|
2609 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2610 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2611 |
msgctxt "s2member-admin"
|
2612 |
msgid "Invalid form configuration. Invalid \"tp\" attribute. The Trial Period. When provided, must be >= 1."
|
2613 |
msgstr ""
|
2614 |
|
2615 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:289
|
2616 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:400
|
2617 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2618 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2619 |
msgctxt "s2member-admin"
|
2620 |
msgid "Invalid form configuration. Missing \"tt\" attribute. The Trial Term. When \"tp\" is provided, \"tt\" ( Trial Term ) must be one of D,W,M,Y."
|
2621 |
msgstr ""
|
2622 |
|
2623 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:292
|
2624 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:403
|
2625 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2626 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2627 |
msgctxt "s2member-admin"
|
2628 |
msgid "Invalid form configuration. Invalid \"tt\" attribute. The Trial Term. When \"tp\" is provided, \"tt\" ( Trial Term ) must be one of D,W,M,Y."
|
2629 |
msgstr ""
|
2630 |
|
2631 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:295
|
2632 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2633 |
msgctxt "s2member-admin"
|
2634 |
msgid "Invalid form configuration. Invalid \"custom\" attribute. When provided, must start with your domain name."
|
2635 |
msgstr ""
|
2636 |
|
2637 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:301
|
2638 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2639 |
msgctxt "s2member-admin"
|
2640 |
msgid "Invalid form configuration. Missing \"ids\" attribute. Must contain comma-delimited Post/Page IDs."
|
2641 |
msgstr ""
|
2642 |
|
2643 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:304
|
2644 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2645 |
msgctxt "s2member-admin"
|
2646 |
msgid "Invalid form configuration. Invalid \"ids\" attribute. Must contain comma-delimited Post/Page IDs. Must contain [0-9,] only."
|
2647 |
msgstr ""
|
2648 |
|
2649 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:307
|
2650 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2651 |
msgctxt "s2member-admin"
|
2652 |
msgid "Invalid form configuration. Missing \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be numeric."
|
2653 |
msgstr ""
|
2654 |
|
2655 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:310
|
2656 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2657 |
msgctxt "s2member-admin"
|
2658 |
msgid "Invalid form configuration. Invalid \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be numeric."
|
2659 |
msgstr ""
|
2660 |
|
2661 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:313
|
2662 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2663 |
msgctxt "s2member-admin"
|
2664 |
msgid "Invalid form configuration. Invalid \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be >= 1."
|
2665 |
msgstr ""
|
2666 |
|
2667 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:316
|
2668 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2669 |
msgctxt "s2member-admin"
|
2670 |
msgid "Invalid form configuration. Invalid \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be <= 43800."
|
2671 |
msgstr ""
|
2672 |
|
2673 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:319
|
2674 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2675 |
msgctxt "s2member-admin"
|
2676 |
msgid "Invalid form configuration. Missing \"sp_ids_exp\" internal attribute. Please check Shortcode Attributes."
|
2677 |
msgstr ""
|
2678 |
|
2679 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:322
|
2680 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2681 |
msgctxt "s2member-admin"
|
2682 |
msgid "Invalid form configuration. Invalid \"sp_ids_exp\" internal attribute. Please check Shortcode Attributes."
|
2683 |
msgstr ""
|
2684 |
|
2685 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:325
|
2686 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:376
|
2687 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2688 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2689 |
msgctxt "s2member-admin"
|
2690 |
msgid "Invalid form configuration. Missing \"desc\" attribute. Please provide a Description for this form."
|
2691 |
msgstr ""
|
2692 |
|
2693 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:328
|
2694 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:379
|
2695 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2696 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2697 |
msgctxt "s2member-admin"
|
2698 |
msgid "Invalid form configuration. Your \"desc\" ( Description ) attribute must be <= 100 characters long."
|
2699 |
msgstr ""
|
2700 |
|
2701 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:331
|
2702 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:382
|
2703 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2704 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2705 |
msgctxt "s2member-admin"
|
2706 |
msgid "Invalid form configuration. Missing \"custom\" attribute. Must start with your domain name."
|
2707 |
msgstr ""
|
2708 |
|
2709 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:334
|
2710 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2711 |
msgctxt "s2member-admin"
|
2712 |
msgid "Invalid form configuration. Invalid \"custom\" attribute. Must start with your domain name."
|
2713 |
msgstr ""
|
2714 |
|
2715 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:337
|
2716 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:388
|
2717 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2718 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2719 |
msgctxt "s2member-admin"
|
2720 |
msgid "Invalid form configuration. Missing \"cc\" attribute. Must be a 3 character Currency Code."
|
2721 |
msgstr ""
|
2722 |
|
2723 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:340
|
2724 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:391
|
2725 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2726 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2727 |
msgctxt "s2member-admin"
|
2728 |
msgid "Invalid form configuration. Invalid \"cc\" attribute. Must be a 3 character Currency Code."
|
2729 |
msgstr ""
|
2730 |
|
2731 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:343
|
2732 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:475
|
2733 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2734 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2735 |
msgctxt "s2member-admin"
|
2736 |
msgid "Invalid form configuration. Missing \"ra\" attribute. The Regular Amount. Must be >= 0.01."
|
2737 |
msgstr ""
|
2738 |
|
2739 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:346
|
2740 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:478
|
2741 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2742 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2743 |
msgctxt "s2member-admin"
|
2744 |
msgid "Invalid form configuration. Invalid \"ra\" attribute. The Regular Amount. Must be numeric."
|
2745 |
msgstr ""
|
2746 |
|
2747 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:349
|
2748 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:481
|
2749 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2750 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2751 |
msgctxt "s2member-admin"
|
2752 |
msgid "Invalid form configuration. Invalid \"ra\" attribute. The Regular Amount. Must be >= 0.01."
|
2753 |
msgstr ""
|
2754 |
|
2755 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:352
|
2756 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:484
|
2757 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2758 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2759 |
msgctxt "s2member-admin"
|
2760 |
msgid "Invalid form configuration. Invalid \"ra\" attribute. The Regular Amount. Must be <= 10000.00."
|
2761 |
msgstr ""
|
2762 |
|
2763 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:358
|
2764 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2765 |
msgctxt "s2member-front"
|
2766 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">login</a> to update your billing plan."
|
2767 |
msgstr ""
|
2768 |
|
2769 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:361
|
2770 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2771 |
msgctxt "s2member-front"
|
2772 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">login</a> before making this purchase."
|
2773 |
msgstr ""
|
2774 |
|
2775 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:364
|
2776 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2777 |
msgctxt "s2member-admin"
|
2778 |
msgid "Invalid form configuration. Missing \"level\" attribute. Membership Level. Must be numeric [1-%s], or an asterisk (*)."
|
2779 |
msgstr ""
|
2780 |
|
2781 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:367
|
2782 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2783 |
msgctxt "s2member-admin"
|
2784 |
msgid "Invalid form configuration. Invalid \"level\" attribute. Membership Level. Must be numeric [1-%s], or an asterisk (*)."
|
2785 |
msgstr ""
|
2786 |
|
2787 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:373
|
2788 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2789 |
msgctxt "s2member-admin"
|
2790 |
msgid "Invalid form configuration. Missing or invalid \"ccaps\" attribute. When \"level\" is \"*\" for ( Independent Custom Capabilities ), \"ccaps\" is required. All lowercase [a-z_0-9,]. A preceding `-all,` directive is also acceptable."
|
2791 |
msgstr ""
|
2792 |
|
2793 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:385
|
2794 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2795 |
msgctxt "s2member-admin"
|
2796 |
msgid "Invalid form configuration. Invalid \"custom\" attribute. Must start with matching domain."
|
2797 |
msgstr ""
|
2798 |
|
2799 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:406
|
2800 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2801 |
msgctxt "s2member-admin"
|
2802 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"D\", and \"tp\" ( Trial Period ) > 365."
|
2803 |
msgstr ""
|
2804 |
|
2805 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:409
|
2806 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2807 |
msgctxt "s2member-admin"
|
2808 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"W\", and \"tp\" ( Trial Period ) > 52."
|
2809 |
msgstr ""
|
2810 |
|
2811 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:412
|
2812 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2813 |
msgctxt "s2member-admin"
|
2814 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"M\", and \"tp\" ( Trial Period ) > 12."
|
2815 |
msgstr ""
|
2816 |
|
2817 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:415
|
2818 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2819 |
msgctxt "s2member-admin"
|
2820 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"Y\", and \"tp\" ( Trial Period ) > 1."
|
2821 |
msgstr ""
|
2822 |
|
2823 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:418
|
2824 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2825 |
msgctxt "s2member-admin"
|
2826 |
msgid "Invalid form configuration. Invalid \"ta\" attribute. The Trial Amount. When provided, must be numeric."
|
2827 |
msgstr ""
|
2828 |
|
2829 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:421
|
2830 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2831 |
msgctxt "s2member-admin"
|
2832 |
msgid "Invalid form configuration. Invalid \"ta\" attribute. The Trial Amount. When provided, must be >= 0.00."
|
2833 |
msgstr ""
|
2834 |
|
2835 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:424
|
2836 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2837 |
msgctxt "s2member-admin"
|
2838 |
msgid "Invalid form configuration. Invalid \"ta\" attribute. The Trial Amount. When provided, must be <= 10000.00."
|
2839 |
msgstr ""
|
2840 |
|
2841 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:427
|
2842 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2843 |
msgctxt "s2member-admin"
|
2844 |
msgid "Invalid form configuration. Missing \"rp\" attribute. The Regular Period. Must be >= 1."
|
2845 |
msgstr ""
|
2846 |
|
2847 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:430
|
2848 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2849 |
msgctxt "s2member-admin"
|
2850 |
msgid "Invalid form configuration. Invalid \"rp\" attribute. The Regular Period. Must be numeric."
|
2851 |
msgstr ""
|
2852 |
|
2853 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:433
|
2854 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2855 |
msgctxt "s2member-admin"
|
2856 |
msgid "Invalid form configuration. Invalid \"rp\" attribute. The Regular Period. Must be >= 1."
|
2857 |
msgstr ""
|
2858 |
|
2859 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:436
|
2860 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2861 |
msgctxt "s2member-admin"
|
2862 |
msgid "Invalid form configuration. Missing \"rt\" attribute. The Regular Term. Must be one of D,W,M,Y,L."
|
2863 |
msgstr ""
|
2864 |
|
2865 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:439
|
2866 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2867 |
msgctxt "s2member-admin"
|
2868 |
msgid "Invalid form configuration. Invalid \"rt\" attribute. The Regular Term. Must be one of D,W,M,Y,L."
|
2869 |
msgstr ""
|
2870 |
|
2871 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:442
|
2872 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2873 |
msgctxt "s2member-admin"
|
2874 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"D\", \"rp\" ( Regular Period ) > 365, and \"rr\" is not \"BN\" ( Buy Now )."
|
2875 |
msgstr ""
|
@@ -2880,341 +2930,359 @@ msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\"
|
|
2880 |
msgstr ""
|
2881 |
|
2882 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:448
|
2883 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2884 |
msgctxt "s2member-admin"
|
2885 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"W\", \"rp\" ( Regular Period ) > 52, and \"rr\" is not \"BN\" ( Buy Now )."
|
2886 |
msgstr ""
|
2887 |
|
2888 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:451
|
2889 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2890 |
msgctxt "s2member-admin"
|
2891 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"M\", \"rp\" ( Regular Period ) > 12, and \"rr\" is not \"BN\" ( Buy Now )."
|
2892 |
msgstr ""
|
2893 |
|
2894 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:454
|
2895 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2896 |
msgctxt "s2member-admin"
|
2897 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"Y\", \"rp\" ( Regular Period ) > 5, and \"rr\" is not \"BN\" ( Buy Now )."
|
2898 |
msgstr ""
|
2899 |
|
2900 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:457
|
2901 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2902 |
msgctxt "s2member-admin"
|
2903 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"Y\", \"rp\" ( Regular Period ) > 1, and \"rr\" is not \"BN\" ( Buy Now )."
|
2904 |
msgstr ""
|
2905 |
|
2906 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:460
|
2907 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2908 |
msgctxt "s2member-admin"
|
2909 |
msgid "Invalid form configuration. Invalid \"rp, rt\" attributes. The \"rt\" ( Regular Term ) attribute is \"L\" ( Lifetime ), and \"rp\" ( Regular Period ) > 1."
|
2910 |
msgstr ""
|
2911 |
|
2912 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:463
|
2913 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2914 |
msgctxt "s2member-admin"
|
2915 |
msgid "Invalid form configuration. Invalid \"rt, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"L\" ( Lifetime ), and \"rr\" is not \"BN\" ( Buy Now )."
|
2916 |
msgstr ""
|
2917 |
|
2918 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:466
|
2919 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2920 |
msgctxt "s2member-admin"
|
2921 |
msgid "Invalid form configuration. Missing \"level_ccaps_eotper\" attribute. Please check Shortcode Attributes."
|
2922 |
msgstr ""
|
2923 |
|
2924 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:469
|
2925 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:472
|
2926 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2927 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2928 |
msgctxt "s2member-admin"
|
2929 |
msgid "Invalid form configuration. Invalid \"level_ccaps_eotper\" attribute. Please check Shortcode Attributes."
|
2930 |
msgstr ""
|
2931 |
|
2932 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:487
|
2933 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2934 |
msgctxt "s2member-admin"
|
2935 |
msgid "Invalid form configuration. Invalid \"rr\" attribute. Regular Recurring. When provided, must be 0, 1, or BN."
|
2936 |
msgstr ""
|
2937 |
|
2938 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:490
|
2939 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2940 |
msgctxt "s2member-admin"
|
2941 |
msgid "Invalid form configuration. Invalid \"rr, tp\" attributes. The \"rr\" ( Regular Recurring ) attribute is \"BN\" ( Buy Now ), and \"tp\" ( Trial Period ) is not \"0\"."
|
2942 |
msgstr ""
|
2943 |
|
2944 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:493
|
2945 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2946 |
msgctxt "s2member-admin"
|
2947 |
msgid "Invalid form configuration. Invalid \"level, rr\" attributes. The \"level\" ( Level ) attribute is \"*\" for ( Independent Custom Capabilities ), and \"rr\" is not \"BN\" ( Buy Now )."
|
2948 |
msgstr ""
|
2949 |
|
2950 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:496
|
2951 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
2952 |
msgctxt "s2member-admin"
|
2953 |
msgid "Invalid form configuration. Invalid \"ta, tp, tt\" attributes. Trial Period. When provided, these cannot be exactly the same as your \"ra, rp, rt\" attributes."
|
2954 |
msgstr ""
|
2955 |
|
2956 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2957 |
-
#: s2member-pro/includes/classes/gateways/
|
2958 |
-
|
2959 |
-
|
2960 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:764
|
2961 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:596
|
2962 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:647
|
2963 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:692
|
2964 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:746
|
2965 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:836
|
2966 |
-
msgctxt "s2member-front"
|
2967 |
-
msgid "Missing or invalid Security Code. Please try again."
|
2968 |
msgstr ""
|
2969 |
|
2970 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2971 |
-
#: s2member-pro/includes/classes/gateways/
|
2972 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:686
|
2973 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:599
|
2974 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:608
|
2975 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:758
|
2976 |
msgctxt "s2member-admin"
|
2977 |
-
msgid "
|
2978 |
msgstr ""
|
2979 |
|
2980 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2981 |
-
#: s2member-pro/includes/classes/gateways/
|
2982 |
-
|
2983 |
-
|
2984 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:710
|
2985 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:800
|
2986 |
-
msgctxt "s2member-front"
|
2987 |
-
msgid "Missing Card Type ( Billing Method ). Please try again."
|
2988 |
msgstr ""
|
2989 |
|
2990 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2991 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2992 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
2993 |
-
#: s2member-pro/includes/classes/gateways/
|
2994 |
-
#: s2member-pro/includes/classes/gateways/
|
2995 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
|
|
|
|
|
|
2996 |
msgctxt "s2member-front"
|
2997 |
-
msgid "
|
2998 |
msgstr ""
|
2999 |
|
|
|
3000 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:545
|
3001 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3002 |
-
#: s2member-pro/includes/classes/gateways/
|
3003 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3004 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3005 |
-
|
3006 |
-
|
3007 |
-
msgid "Missing Card Number. Please try again."
|
3008 |
msgstr ""
|
3009 |
|
3010 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:548
|
3011 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:647
|
3012 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:737
|
3013 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3014 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3015 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3016 |
msgctxt "s2member-front"
|
3017 |
-
msgid "Missing Card
|
3018 |
msgstr ""
|
3019 |
|
3020 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:551
|
3021 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:650
|
3022 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:740
|
3023 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3024 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3025 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3026 |
msgctxt "s2member-front"
|
3027 |
-
msgid "Invalid Card
|
3028 |
msgstr ""
|
3029 |
|
3030 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:554
|
3031 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:653
|
3032 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:743
|
3033 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3034 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3035 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3036 |
msgctxt "s2member-front"
|
3037 |
-
msgid "Missing Card
|
3038 |
msgstr ""
|
3039 |
|
3040 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:557
|
3041 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:656
|
3042 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:746
|
3043 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3044 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3045 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3046 |
msgctxt "s2member-front"
|
3047 |
-
msgid "Missing Card
|
3048 |
msgstr ""
|
3049 |
|
3050 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:560
|
3051 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:659
|
3052 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:749
|
3053 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3054 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3055 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3056 |
msgctxt "s2member-front"
|
3057 |
-
msgid "
|
3058 |
msgstr ""
|
3059 |
|
3060 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:563
|
3061 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:662
|
3062 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:752
|
3063 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3064 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3065 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3066 |
msgctxt "s2member-front"
|
3067 |
-
msgid "Missing
|
3068 |
msgstr ""
|
3069 |
|
3070 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:566
|
3071 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:665
|
3072 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:755
|
3073 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3074 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3075 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3076 |
msgctxt "s2member-front"
|
3077 |
-
msgid "Missing
|
3078 |
msgstr ""
|
3079 |
|
3080 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:569
|
3081 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:668
|
3082 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:758
|
3083 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3084 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3085 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3086 |
msgctxt "s2member-front"
|
3087 |
-
msgid "Missing
|
3088 |
msgstr ""
|
3089 |
|
3090 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:572
|
3091 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:671
|
3092 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:761
|
3093 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3094 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3095 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3096 |
msgctxt "s2member-front"
|
3097 |
-
msgid "Missing
|
3098 |
msgstr ""
|
3099 |
|
3100 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3101 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3102 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3103 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3104 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3105 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3106 |
msgctxt "s2member-front"
|
3107 |
-
msgid "Missing
|
3108 |
msgstr ""
|
3109 |
|
3110 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3111 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3112 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3113 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3114 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3115 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3116 |
msgctxt "s2member-front"
|
3117 |
-
msgid "Missing
|
3118 |
msgstr ""
|
3119 |
|
3120 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3121 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3122 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3123 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3124 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3125 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3126 |
msgctxt "s2member-front"
|
3127 |
-
msgid "Missing
|
3128 |
msgstr ""
|
3129 |
|
3130 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:590
|
3131 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:635
|
3132 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:698
|
3133 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3134 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3135 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3136 |
msgctxt "s2member-front"
|
3137 |
-
msgid "
|
3138 |
msgstr ""
|
3139 |
|
3140 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:593
|
|
|
3141 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:701
|
3142 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3143 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
3144 |
msgctxt "s2member-front"
|
3145 |
-
msgid "
|
3146 |
msgstr ""
|
3147 |
|
3148 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:596
|
|
|
3149 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:704
|
3150 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3151 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
3152 |
msgctxt "s2member-front"
|
3153 |
-
msgid "Missing or invalid
|
3154 |
msgstr ""
|
3155 |
|
3156 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:599
|
|
|
3157 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:707
|
3158 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3159 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
3160 |
msgctxt "s2member-front"
|
3161 |
-
msgid "Invalid
|
3162 |
msgstr ""
|
3163 |
|
3164 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:602
|
3165 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:710
|
3166 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3167 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3168 |
msgctxt "s2member-front"
|
3169 |
-
msgid "That
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3170 |
msgstr ""
|
3171 |
|
3172 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:608
|
3173 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:716
|
3174 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3175 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3176 |
msgctxt "s2member-front"
|
3177 |
-
msgid "
|
3178 |
msgstr ""
|
3179 |
|
3180 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:611
|
3181 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:719
|
3182 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3183 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3184 |
msgctxt "s2member-front"
|
3185 |
msgid "Invalid Password. Must be at least 6 characters. Please try again."
|
3186 |
msgstr ""
|
3187 |
|
3188 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3189 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3190 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3191 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3192 |
msgctxt "s2member-front"
|
3193 |
msgid "Invalid Password. Max length is 20 characters. Please try again."
|
3194 |
msgstr ""
|
3195 |
|
3196 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3197 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3198 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3199 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3200 |
msgctxt "s2member-front"
|
3201 |
msgid "Password fields do NOT match. Please try again."
|
3202 |
msgstr ""
|
3203 |
|
3204 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3205 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3206 |
msgctxt "s2member-front"
|
3207 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to modify your billing plan."
|
3208 |
msgstr ""
|
3209 |
|
3210 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3211 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3212 |
msgctxt "s2member-front"
|
3213 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> before making this purchase."
|
3214 |
msgstr ""
|
3215 |
|
3216 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3217 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3218 |
msgctxt "s2member-front"
|
3219 |
msgid "Unknown form submission type. Please contact Support."
|
3220 |
msgstr ""
|
@@ -3233,12 +3301,14 @@ msgstr ""
|
|
3233 |
|
3234 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-update-in.inc.php:107
|
3235 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:112
|
|
|
3236 |
msgctxt "s2member-front"
|
3237 |
msgid "<strong>Confirmed.</strong> Your billing information has been updated."
|
3238 |
msgstr ""
|
3239 |
|
3240 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-update-in.inc.php:119
|
3241 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:128
|
|
|
3242 |
msgctxt "s2member-front"
|
3243 |
msgid "<strong>Unable to update.</strong> You have NO recurring fees. Or, your billing profile is no longer active. Please contact Support if you need assistance."
|
3244 |
msgstr ""
|
@@ -3249,67 +3319,66 @@ msgctxt "s2member-front"
|
|
3249 |
msgid "<strong>Oops.</strong> No Subscr. ID. Please contact Support for assistance."
|
3250 |
msgstr ""
|
3251 |
|
3252 |
-
|
3253 |
-
|
3254 |
-
|
3255 |
-
|
3256 |
-
#. `ws_plugin__s2member_pro_authnet_aim_response`.
|
3257 |
-
#. translators: Exclude `%2$s`. This is an English error returned by
|
3258 |
-
#. Authorize.Net®. Please replace `%2$s` with: `Unable to process, please try
|
3259 |
-
#. again`, or something to that affect. Or, if you prefer, you could Filter
|
3260 |
-
#. ``$response["__error"]`` with
|
3261 |
-
#. `ws_plugin__s2member_pro_authnet_arb_response`.
|
3262 |
-
|
3263 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:93
|
3264 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:315
|
3265 |
-
msgctxt "s2member-front"
|
3266 |
-
msgid "Error #%1$s. %2$s."
|
3267 |
-
msgstr ""
|
3268 |
-
|
3269 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:651
|
3270 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:794
|
3271 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:221
|
3272 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:364
|
3273 |
msgctxt "s2member-front percentage-symbol"
|
3274 |
msgid "%"
|
3275 |
msgstr ""
|
3276 |
|
3277 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3278 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3279 |
msgctxt "s2member-front"
|
3280 |
msgid " + tax"
|
3281 |
msgstr ""
|
3282 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3283 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:838
|
3284 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:890
|
3285 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:903
|
3286 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:925
|
3287 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:985
|
3288 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1000
|
3289 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3290 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3291 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3292 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3293 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3294 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3295 |
msgctxt "s2member-front"
|
3296 |
-
msgid "
|
3297 |
msgstr ""
|
3298 |
|
3299 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3300 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3301 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3302 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3303 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3304 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3305 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3306 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3307 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3308 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3309 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3310 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3311 |
msgctxt "s2member-front"
|
3312 |
-
msgid "
|
3313 |
msgstr ""
|
3314 |
|
3315 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:851
|
@@ -3318,54 +3387,38 @@ msgstr ""
|
|
3318 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:940
|
3319 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:955
|
3320 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:970
|
3321 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3322 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3323 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3324 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3325 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3326 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3327 |
-
msgctxt "s2member-front"
|
3328 |
-
msgid "COUPON %s off. ( Now: %s, then %s )"
|
3329 |
-
msgstr ""
|
3330 |
-
|
3331 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:852
|
3332 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:865
|
3333 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:878
|
3334 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:941
|
3335 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:956
|
3336 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:971
|
3337 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:422
|
3338 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:435
|
3339 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:448
|
3340 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:511
|
3341 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:526
|
3342 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:541
|
3343 |
msgctxt "s2member-front"
|
3344 |
msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s, then %s</strong> )</div>"
|
3345 |
msgstr ""
|
3346 |
|
3347 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3348 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3349 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3350 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3351 |
msgctxt "s2member-front"
|
3352 |
msgid "<div>Sorry, your Coupon is not applicable.</div>"
|
3353 |
msgstr ""
|
3354 |
|
3355 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3356 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3357 |
msgctxt "s2member-front"
|
3358 |
msgid "<div>Coupon: <strong>%s0.00 off</strong>.</div>"
|
3359 |
msgstr ""
|
3360 |
|
3361 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3362 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3363 |
msgctxt "s2member-front"
|
3364 |
msgid "<div>Sorry, your Coupon cannot be applied to this particular purchase.</div>"
|
3365 |
msgstr ""
|
3366 |
|
3367 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3368 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3369 |
msgctxt "s2member-front"
|
3370 |
msgid "<div>Sorry, your Coupon <strong>expired</strong>: <em>%s</em>.</div>"
|
3371 |
msgstr ""
|
@@ -3373,16 +3426,16 @@ msgstr ""
|
|
3373 |
#. translators: `%1$s` is new price/description, after coupon applied. `%2$s`
|
3374 |
#. is original description.
|
3375 |
|
3376 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3377 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3378 |
msgctxt "s2member-front"
|
3379 |
msgid "%1$s ~ ORIGINALLY: %2$s"
|
3380 |
msgstr ""
|
3381 |
|
3382 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3383 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3384 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3385 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:
|
3386 |
msgctxt "s2member-front"
|
3387 |
msgid "<div>Sorry, your Coupon is N/A, invalid or expired.</div>"
|
3388 |
msgstr ""
|
@@ -3488,19 +3541,24 @@ msgid "Cancel at any time to avoid charges."
|
|
3488 |
msgstr ""
|
3489 |
|
3490 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:122
|
3491 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-
|
|
|
|
|
3492 |
msgctxt "s2member-front"
|
3493 |
msgid "<strong>Unable to cancel at this time.</strong> Your account is pending other changes. Please try again in 15 minutes."
|
3494 |
msgstr ""
|
3495 |
|
3496 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:134
|
3497 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-
|
|
|
3498 |
msgctxt "s2member-front"
|
3499 |
msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal®</a> to cancel your Subscription."
|
3500 |
msgstr ""
|
3501 |
|
3502 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:301
|
3503 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:624
|
|
|
|
|
3504 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:437
|
3505 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:860
|
3506 |
msgctxt "s2member-front"
|
@@ -3547,82 +3605,82 @@ msgctxt "s2member-admin"
|
|
3547 |
msgid "PayPal® configuration error. Your PayPal® API Signature is not yet configured."
|
3548 |
msgstr ""
|
3549 |
|
3550 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3551 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
3552 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:76
|
3553 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:132
|
3554 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:136
|
|
|
|
|
3555 |
msgctxt "s2member-front"
|
3556 |
msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal®</a> to update your billing information."
|
3557 |
msgstr ""
|
3558 |
|
3559 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
3560 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:124
|
|
|
3561 |
msgctxt "s2member-front"
|
3562 |
msgid "<strong>Unable to update at this time.</strong> Your account is pending other changes. Please try again in 15 minutes."
|
3563 |
msgstr ""
|
3564 |
|
3565 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3566 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3567 |
msgctxt "s2member-admin"
|
3568 |
msgid "Invalid form configuration. Missing \"dg\" attribute. Digital indicator. Must be numeric [0-1]."
|
3569 |
msgstr ""
|
3570 |
|
3571 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3572 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3573 |
msgctxt "s2member-admin"
|
3574 |
msgid "Invalid form configuration. Invalid \"dg\" attribute. Digital indicator. Must be numeric [0-1]."
|
3575 |
msgstr ""
|
3576 |
|
3577 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3578 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3579 |
msgctxt "s2member-admin"
|
3580 |
msgid "Invalid form configuration. Missing \"ns\" attribute. Shipping configuration. Must be numeric [0-2]."
|
3581 |
msgstr ""
|
3582 |
|
3583 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3584 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3585 |
msgctxt "s2member-admin"
|
3586 |
msgid "Invalid form configuration. Invalid \"ns\" attribute. Shipping configuration. Must be numeric [0-2]."
|
3587 |
msgstr ""
|
3588 |
|
3589 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3590 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3591 |
msgctxt "s2member-admin"
|
3592 |
msgid "Invalid form configuration. Invalid \"ns\" attribute. Shipping configuration. Must be 1 with \"dg\" ( digital ) items."
|
3593 |
msgstr ""
|
3594 |
|
3595 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3596 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3597 |
msgctxt "s2member-admin"
|
3598 |
msgid "Invalid form configuration. Invalid \"lc\" attribute. Locale Code. When provided, must be a 2 character country code."
|
3599 |
msgstr ""
|
3600 |
|
3601 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3602 |
-
msgctxt "s2member-admin"
|
3603 |
-
msgid "Invalid form configuration. Invalid \"rrt\" attribute. Recurring Times ( fixed ). When provided, must be numeric."
|
3604 |
-
msgstr ""
|
3605 |
-
|
3606 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:559
|
3607 |
-
msgctxt "s2member-admin"
|
3608 |
-
msgid "Invalid form configuration. Invalid \"rrt\" attribute. Recurring Times ( fixed ). When provided, must be >= 1."
|
3609 |
-
msgstr ""
|
3610 |
-
|
3611 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:562
|
3612 |
msgctxt "s2member-admin"
|
3613 |
-
msgid "Invalid form configuration. Invalid \"
|
3614 |
msgstr ""
|
3615 |
|
3616 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3617 |
msgctxt "s2member-admin"
|
3618 |
msgid "Invalid form configuration. Invalid \"rr, rra\" attributes. When \"rr\" ( Regular Recurring ) is 0 or 1, \"rra\" ( Recurring Retry Attempts ) must be numeric."
|
3619 |
msgstr ""
|
3620 |
|
3621 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3622 |
msgctxt "s2member-admin"
|
3623 |
msgid "Invalid form configuration. Invalid \"rr, rra\" attributes. When \"rr\" ( Regular Recurring ) is 0 or 1, \"rra\" ( Recurring Retry Attempts ) must be >= 0."
|
3624 |
msgstr ""
|
3625 |
|
|
|
|
|
|
|
|
|
|
|
3626 |
#: s2member-pro/includes/classes/login-widget.inc.php:123
|
3627 |
msgctxt "s2member-front"
|
3628 |
msgid "Password"
|
2 |
# This file is distributed under the same license as the s2Member® Framework package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: s2Member® Framework 120514\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
|
7 |
+
"POT-Creation-Date: 2012-05-15 10:48:05+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
666 |
msgstr ""
|
667 |
|
668 |
#: s2member/includes/classes/paypal-utilities.inc.php:178
|
669 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:273
|
670 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:281
|
671 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:96
|
672 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:318
|
673 |
msgctxt "s2member-front"
|
676 |
|
677 |
#: s2member/includes/classes/paypal-utilities.inc.php:219
|
678 |
#: s2member/includes/classes/paypal-utilities.inc.php:225
|
679 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:322
|
680 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:328
|
681 |
msgctxt "s2member-front"
|
682 |
msgid "Error #%s. Transaction declined. Please use an alternate funding source."
|
683 |
msgstr ""
|
684 |
|
685 |
#: s2member/includes/classes/paypal-utilities.inc.php:222
|
686 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:325
|
687 |
msgctxt "s2member-front"
|
688 |
msgid "Error #%s. Transaction declined. Express Checkout was NOT confirmed."
|
689 |
msgstr ""
|
690 |
|
691 |
+
#. translators: Exclude `%2$s`. These are English details returned by PayPal®.
|
692 |
+
#. Replace `%2$s` with: `Unable to process, please try again`, or something to
|
693 |
+
#. that affect. Or, if you prefer, you could Filter ``$response["__error"]``
|
694 |
+
#. with `ws_plugin__s2member_paypal_payflow_api_response`.
|
695 |
+
#. translators: Exclude `%2$s`. This is an English error returned by
|
696 |
+
#. Authorize.Net®. Please replace `%2$s` with: `Unable to process, please try
|
697 |
+
#. again`, or something to that affect. Or, if you prefer, you could Filter
|
698 |
+
#. ``$response["__error"]`` with
|
699 |
+
#. `ws_plugin__s2member_pro_authnet_aim_response`.
|
700 |
+
#. translators: Exclude `%2$s`. This is an English error returned by
|
701 |
+
#. Authorize.Net®. Please replace `%2$s` with: `Unable to process, please try
|
702 |
+
#. again`, or something to that affect. Or, if you prefer, you could Filter
|
703 |
+
#. ``$response["__error"]`` with
|
704 |
+
#. `ws_plugin__s2member_pro_authnet_arb_response`.
|
705 |
+
|
706 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:271
|
707 |
+
#: s2member/includes/classes/paypal-utilities.inc.php:279
|
708 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:93
|
709 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:315
|
710 |
+
msgctxt "s2member-front"
|
711 |
+
msgid "Error #%1$s. %2$s."
|
712 |
+
msgstr ""
|
713 |
+
|
714 |
#: s2member/includes/classes/profile-in.inc.php:78
|
715 |
#: s2member/includes/classes/sc-profile-in.inc.php:94
|
716 |
#: s2member-pro/includes/classes/login-widget.inc.php:118
|
1448 |
msgid "Yes, I want to receive updates via email."
|
1449 |
msgstr ""
|
1450 |
|
1451 |
+
#: s2member/includes/syscon.inc.php:195
|
1452 |
msgctxt "s2member-front"
|
1453 |
msgid "[%s] Username/Password"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
+
#: s2member/includes/syscon.inc.php:196
|
1457 |
msgctxt "s2member-front"
|
1458 |
msgid ""
|
1459 |
"Your Username/Password for:\n"
|
1464 |
"%%%%wp_login_url%%%%"
|
1465 |
msgstr ""
|
1466 |
|
1467 |
+
#: s2member/includes/syscon.inc.php:199
|
1468 |
msgctxt "s2member-front"
|
1469 |
msgid "[%s] New User Registration"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: s2member/includes/syscon.inc.php:200
|
1473 |
msgctxt "s2member-front"
|
1474 |
msgid ""
|
1475 |
"New User Registration on your site:\n"
|
1481 |
"IP Address: %%%%user_ip%%%%"
|
1482 |
msgstr ""
|
1483 |
|
1484 |
+
#: s2member/includes/syscon.inc.php:221 s2member-pro/includes/syscon.inc.php:94
|
1485 |
msgctxt "s2member-front"
|
1486 |
msgid "Congratulations! ( your membership has been approved )"
|
1487 |
msgstr ""
|
1488 |
|
1489 |
+
#: s2member/includes/syscon.inc.php:222
|
1490 |
msgctxt "s2member-front"
|
1491 |
msgid ""
|
1492 |
"Thanks %%%%first_name%%%%! Your membership has been approved.\n"
|
1502 |
"%s"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
+
#: s2member/includes/syscon.inc.php:225 s2member-pro/includes/syscon.inc.php:98
|
1506 |
msgctxt "s2member-front"
|
1507 |
msgid "Thank You! ( instructions for access )"
|
1508 |
msgstr ""
|
1509 |
|
1510 |
+
#: s2member/includes/syscon.inc.php:226
|
1511 |
msgctxt "s2member-front"
|
1512 |
msgid ""
|
1513 |
"Thanks %%%%first_name%%%%!\n"
|
1524 |
"%s"
|
1525 |
msgstr ""
|
1526 |
|
1527 |
+
#: s2member/includes/syscon.inc.php:254
|
1528 |
msgctxt "s2member-front"
|
1529 |
msgid "Free Subscriber"
|
1530 |
msgstr ""
|
1531 |
|
1532 |
+
#: s2member/includes/syscon.inc.php:254
|
1533 |
msgctxt "s2member-front"
|
1534 |
msgid "Bronze Member"
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: s2member/includes/syscon.inc.php:254
|
1538 |
msgctxt "s2member-front"
|
1539 |
msgid "Silver Member"
|
1540 |
msgstr ""
|
1541 |
|
1542 |
+
#: s2member/includes/syscon.inc.php:254
|
1543 |
msgctxt "s2member-front"
|
1544 |
msgid "Gold Member"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
+
#: s2member/includes/syscon.inc.php:254
|
1548 |
msgctxt "s2member-front"
|
1549 |
msgid "Platinum Member"
|
1550 |
msgstr ""
|
1551 |
|
1552 |
+
#: s2member/includes/syscon.inc.php:254
|
1553 |
msgctxt "s2member-front"
|
1554 |
msgid "Level %s Member"
|
1555 |
msgstr ""
|
2392 |
|
2393 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-cancellation-in.inc.php:115
|
2394 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:114
|
2395 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:112
|
2396 |
msgctxt "s2member-front"
|
2397 |
msgid "<strong>Billing termination confirmed.</strong> Your account has been cancelled."
|
2398 |
msgstr ""
|
2403 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:126
|
2404 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:138
|
2405 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:146
|
2406 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:123
|
2407 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:135
|
2408 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:143
|
2409 |
msgctxt "s2member-front"
|
2410 |
msgid "<strong>Billing terminated.</strong> Your account has been cancelled."
|
2411 |
msgstr ""
|
2413 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-cancellation-in.inc.php:147
|
2414 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-update-in.inc.php:133
|
2415 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:154
|
2416 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:151
|
2417 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:150
|
2418 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:146
|
2419 |
msgctxt "s2member-front"
|
2420 |
msgid "You're <strong>NOT</strong> logged in."
|
2421 |
msgstr ""
|
2424 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:580
|
2425 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:289
|
2426 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:612
|
2427 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:332
|
2428 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:662
|
2429 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:420
|
2430 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:848
|
2431 |
msgctxt "s2member-front"
|
2436 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:696
|
2437 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:451
|
2438 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:764
|
2439 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:501
|
2440 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:814
|
2441 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:682
|
2442 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1000
|
2443 |
msgctxt "s2member-front"
|
2454 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:481
|
2455 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:773
|
2456 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:794
|
2457 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:510
|
2458 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:531
|
2459 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:823
|
2460 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:844
|
2461 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:691
|
2462 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:712
|
2463 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1009
|
2472 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:717
|
2473 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:472
|
2474 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:785
|
2475 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:522
|
2476 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:835
|
2477 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:703
|
2478 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1021
|
2479 |
msgctxt "s2member-front"
|
2482 |
|
2483 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:737
|
2484 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:805
|
2485 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:855
|
2486 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1041
|
2487 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:137
|
2488 |
msgctxt "s2member-front"
|
2489 |
msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
|
2490 |
msgstr ""
|
2579 |
msgstr ""
|
2580 |
|
2581 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:238
|
2582 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:530
|
2583 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:241
|
2584 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:623
|
2585 |
msgctxt "s2member-front"
|
2586 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to cancel your account."
|
2587 |
msgstr ""
|
2594 |
|
2595 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:246
|
2596 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:249
|
2597 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:249
|
2598 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:255
|
2599 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:266
|
2600 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:273
|
2601 |
msgctxt "s2member-front"
|
2602 |
msgid "Nothing to cancel. You have NO recurring fees."
|
2603 |
msgstr ""
|
2604 |
|
2605 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:256
|
2606 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:542
|
2607 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:280
|
2608 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:635
|
2609 |
msgctxt "s2member-front"
|
2610 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to update your billing information."
|
2611 |
msgstr ""
|
2612 |
|
2613 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:259
|
2614 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:283
|
2615 |
msgctxt "s2member-front"
|
2616 |
msgid "Nothing to update. You're NOT a paid Member."
|
2617 |
msgstr ""
|
2618 |
|
2619 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:264
|
2620 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:267
|
2621 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:288
|
2622 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:297
|
2623 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:311
|
2624 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:318
|
2625 |
msgctxt "s2member-front"
|
2626 |
msgid "Nothing to update. You have NO recurring fees. Or, your billing profile is no longer active. Please contact Support if you need assistance."
|
2627 |
msgstr ""
|
2628 |
|
2629 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:274
|
2630 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:325
|
2631 |
msgctxt "s2member-admin"
|
2632 |
msgid "Invalid form configuration. Missing \"level\" attribute. Membership Level. Must be numeric [0-%s]."
|
2633 |
msgstr ""
|
2634 |
|
2635 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:277
|
2636 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:328
|
2637 |
msgctxt "s2member-admin"
|
2638 |
msgid "Invalid form configuration. Invalid \"level\" attribute. Membership Level. Must be numeric [0-%s]."
|
2639 |
msgstr ""
|
2640 |
|
2641 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:280
|
2642 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:370
|
2643 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:331
|
2644 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:439
|
2645 |
msgctxt "s2member-admin"
|
2646 |
msgid "Invalid form configuration. Invalid \"ccaps\" attribute. Custom Capabilities. When provided, must be all lowercase [a-z_0-9,]. A preceding `-all,` directive is also acceptable."
|
2647 |
msgstr ""
|
2648 |
|
2649 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:283
|
2650 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:394
|
2651 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:334
|
2652 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:481
|
2653 |
msgctxt "s2member-admin"
|
2654 |
msgid "Invalid form configuration. Invalid \"tp\" attribute. The Trial Period. When provided, must be numeric."
|
2655 |
msgstr ""
|
2656 |
|
2657 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:286
|
2658 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:397
|
2659 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:337
|
2660 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:484
|
2661 |
msgctxt "s2member-admin"
|
2662 |
msgid "Invalid form configuration. Invalid \"tp\" attribute. The Trial Period. When provided, must be >= 1."
|
2663 |
msgstr ""
|
2664 |
|
2665 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:289
|
2666 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:400
|
2667 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:340
|
2668 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:487
|
2669 |
msgctxt "s2member-admin"
|
2670 |
msgid "Invalid form configuration. Missing \"tt\" attribute. The Trial Term. When \"tp\" is provided, \"tt\" ( Trial Term ) must be one of D,W,M,Y."
|
2671 |
msgstr ""
|
2672 |
|
2673 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:292
|
2674 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:403
|
2675 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:343
|
2676 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:490
|
2677 |
msgctxt "s2member-admin"
|
2678 |
msgid "Invalid form configuration. Invalid \"tt\" attribute. The Trial Term. When \"tp\" is provided, \"tt\" ( Trial Term ) must be one of D,W,M,Y."
|
2679 |
msgstr ""
|
2680 |
|
2681 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:295
|
2682 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:346
|
2683 |
msgctxt "s2member-admin"
|
2684 |
msgid "Invalid form configuration. Invalid \"custom\" attribute. When provided, must start with your domain name."
|
2685 |
msgstr ""
|
2686 |
|
2687 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:301
|
2688 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:352
|
2689 |
msgctxt "s2member-admin"
|
2690 |
msgid "Invalid form configuration. Missing \"ids\" attribute. Must contain comma-delimited Post/Page IDs."
|
2691 |
msgstr ""
|
2692 |
|
2693 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:304
|
2694 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:355
|
2695 |
msgctxt "s2member-admin"
|
2696 |
msgid "Invalid form configuration. Invalid \"ids\" attribute. Must contain comma-delimited Post/Page IDs. Must contain [0-9,] only."
|
2697 |
msgstr ""
|
2698 |
|
2699 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:307
|
2700 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:358
|
2701 |
msgctxt "s2member-admin"
|
2702 |
msgid "Invalid form configuration. Missing \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be numeric."
|
2703 |
msgstr ""
|
2704 |
|
2705 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:310
|
2706 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:361
|
2707 |
msgctxt "s2member-admin"
|
2708 |
msgid "Invalid form configuration. Invalid \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be numeric."
|
2709 |
msgstr ""
|
2710 |
|
2711 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:313
|
2712 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:364
|
2713 |
msgctxt "s2member-admin"
|
2714 |
msgid "Invalid form configuration. Invalid \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be >= 1."
|
2715 |
msgstr ""
|
2716 |
|
2717 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:316
|
2718 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:367
|
2719 |
msgctxt "s2member-admin"
|
2720 |
msgid "Invalid form configuration. Invalid \"exp\" attribute. Specific Post/Page Expiration ( in hours ). Must be <= 43800."
|
2721 |
msgstr ""
|
2722 |
|
2723 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:319
|
2724 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:370
|
2725 |
msgctxt "s2member-admin"
|
2726 |
msgid "Invalid form configuration. Missing \"sp_ids_exp\" internal attribute. Please check Shortcode Attributes."
|
2727 |
msgstr ""
|
2728 |
|
2729 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:322
|
2730 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:373
|
2731 |
msgctxt "s2member-admin"
|
2732 |
msgid "Invalid form configuration. Invalid \"sp_ids_exp\" internal attribute. Please check Shortcode Attributes."
|
2733 |
msgstr ""
|
2734 |
|
2735 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:325
|
2736 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:376
|
2737 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:376
|
2738 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:445
|
2739 |
msgctxt "s2member-admin"
|
2740 |
msgid "Invalid form configuration. Missing \"desc\" attribute. Please provide a Description for this form."
|
2741 |
msgstr ""
|
2742 |
|
2743 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:328
|
2744 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:379
|
2745 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:379
|
2746 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:448
|
2747 |
msgctxt "s2member-admin"
|
2748 |
msgid "Invalid form configuration. Your \"desc\" ( Description ) attribute must be <= 100 characters long."
|
2749 |
msgstr ""
|
2750 |
|
2751 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:331
|
2752 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:382
|
2753 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:382
|
2754 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:451
|
2755 |
msgctxt "s2member-admin"
|
2756 |
msgid "Invalid form configuration. Missing \"custom\" attribute. Must start with your domain name."
|
2757 |
msgstr ""
|
2758 |
|
2759 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:334
|
2760 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:385
|
2761 |
msgctxt "s2member-admin"
|
2762 |
msgid "Invalid form configuration. Invalid \"custom\" attribute. Must start with your domain name."
|
2763 |
msgstr ""
|
2764 |
|
2765 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:337
|
2766 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:388
|
2767 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:388
|
2768 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:457
|
2769 |
msgctxt "s2member-admin"
|
2770 |
msgid "Invalid form configuration. Missing \"cc\" attribute. Must be a 3 character Currency Code."
|
2771 |
msgstr ""
|
2772 |
|
2773 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:340
|
2774 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:391
|
2775 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:391
|
2776 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:460
|
2777 |
msgctxt "s2member-admin"
|
2778 |
msgid "Invalid form configuration. Invalid \"cc\" attribute. Must be a 3 character Currency Code."
|
2779 |
msgstr ""
|
2780 |
|
2781 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:343
|
2782 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:475
|
2783 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:412
|
2784 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:562
|
2785 |
msgctxt "s2member-admin"
|
2786 |
msgid "Invalid form configuration. Missing \"ra\" attribute. The Regular Amount. Must be >= 0.01."
|
2787 |
msgstr ""
|
2788 |
|
2789 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:346
|
2790 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:478
|
2791 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:415
|
2792 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:565
|
2793 |
msgctxt "s2member-admin"
|
2794 |
msgid "Invalid form configuration. Invalid \"ra\" attribute. The Regular Amount. Must be numeric."
|
2795 |
msgstr ""
|
2796 |
|
2797 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:349
|
2798 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:481
|
2799 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:418
|
2800 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:568
|
2801 |
msgctxt "s2member-admin"
|
2802 |
msgid "Invalid form configuration. Invalid \"ra\" attribute. The Regular Amount. Must be >= 0.01."
|
2803 |
msgstr ""
|
2804 |
|
2805 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:352
|
2806 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:484
|
2807 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:421
|
2808 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:571
|
2809 |
msgctxt "s2member-admin"
|
2810 |
msgid "Invalid form configuration. Invalid \"ra\" attribute. The Regular Amount. Must be <= 10000.00."
|
2811 |
msgstr ""
|
2812 |
|
2813 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:358
|
2814 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:427
|
2815 |
msgctxt "s2member-front"
|
2816 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">login</a> to update your billing plan."
|
2817 |
msgstr ""
|
2818 |
|
2819 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:361
|
2820 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:430
|
2821 |
msgctxt "s2member-front"
|
2822 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">login</a> before making this purchase."
|
2823 |
msgstr ""
|
2824 |
|
2825 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:364
|
2826 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:433
|
2827 |
msgctxt "s2member-admin"
|
2828 |
msgid "Invalid form configuration. Missing \"level\" attribute. Membership Level. Must be numeric [1-%s], or an asterisk (*)."
|
2829 |
msgstr ""
|
2830 |
|
2831 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:367
|
2832 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:436
|
2833 |
msgctxt "s2member-admin"
|
2834 |
msgid "Invalid form configuration. Invalid \"level\" attribute. Membership Level. Must be numeric [1-%s], or an asterisk (*)."
|
2835 |
msgstr ""
|
2836 |
|
2837 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:373
|
2838 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:442
|
2839 |
msgctxt "s2member-admin"
|
2840 |
msgid "Invalid form configuration. Missing or invalid \"ccaps\" attribute. When \"level\" is \"*\" for ( Independent Custom Capabilities ), \"ccaps\" is required. All lowercase [a-z_0-9,]. A preceding `-all,` directive is also acceptable."
|
2841 |
msgstr ""
|
2842 |
|
2843 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:385
|
2844 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:454
|
2845 |
msgctxt "s2member-admin"
|
2846 |
msgid "Invalid form configuration. Invalid \"custom\" attribute. Must start with matching domain."
|
2847 |
msgstr ""
|
2848 |
|
2849 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:406
|
2850 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:493
|
2851 |
msgctxt "s2member-admin"
|
2852 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"D\", and \"tp\" ( Trial Period ) > 365."
|
2853 |
msgstr ""
|
2854 |
|
2855 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:409
|
2856 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:496
|
2857 |
msgctxt "s2member-admin"
|
2858 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"W\", and \"tp\" ( Trial Period ) > 52."
|
2859 |
msgstr ""
|
2860 |
|
2861 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:412
|
2862 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:499
|
2863 |
msgctxt "s2member-admin"
|
2864 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"M\", and \"tp\" ( Trial Period ) > 12."
|
2865 |
msgstr ""
|
2866 |
|
2867 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:415
|
2868 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:502
|
2869 |
msgctxt "s2member-admin"
|
2870 |
msgid "Invalid form configuration. Invalid \"tt, tp\" attributes. The \"tt\" ( Trial Term ) attribute is \"Y\", and \"tp\" ( Trial Period ) > 1."
|
2871 |
msgstr ""
|
2872 |
|
2873 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:418
|
2874 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:505
|
2875 |
msgctxt "s2member-admin"
|
2876 |
msgid "Invalid form configuration. Invalid \"ta\" attribute. The Trial Amount. When provided, must be numeric."
|
2877 |
msgstr ""
|
2878 |
|
2879 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:421
|
2880 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:508
|
2881 |
msgctxt "s2member-admin"
|
2882 |
msgid "Invalid form configuration. Invalid \"ta\" attribute. The Trial Amount. When provided, must be >= 0.00."
|
2883 |
msgstr ""
|
2884 |
|
2885 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:424
|
2886 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:511
|
2887 |
msgctxt "s2member-admin"
|
2888 |
msgid "Invalid form configuration. Invalid \"ta\" attribute. The Trial Amount. When provided, must be <= 10000.00."
|
2889 |
msgstr ""
|
2890 |
|
2891 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:427
|
2892 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:514
|
2893 |
msgctxt "s2member-admin"
|
2894 |
msgid "Invalid form configuration. Missing \"rp\" attribute. The Regular Period. Must be >= 1."
|
2895 |
msgstr ""
|
2896 |
|
2897 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:430
|
2898 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:517
|
2899 |
msgctxt "s2member-admin"
|
2900 |
msgid "Invalid form configuration. Invalid \"rp\" attribute. The Regular Period. Must be numeric."
|
2901 |
msgstr ""
|
2902 |
|
2903 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:433
|
2904 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:520
|
2905 |
msgctxt "s2member-admin"
|
2906 |
msgid "Invalid form configuration. Invalid \"rp\" attribute. The Regular Period. Must be >= 1."
|
2907 |
msgstr ""
|
2908 |
|
2909 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:436
|
2910 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:523
|
2911 |
msgctxt "s2member-admin"
|
2912 |
msgid "Invalid form configuration. Missing \"rt\" attribute. The Regular Term. Must be one of D,W,M,Y,L."
|
2913 |
msgstr ""
|
2914 |
|
2915 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:439
|
2916 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:526
|
2917 |
msgctxt "s2member-admin"
|
2918 |
msgid "Invalid form configuration. Invalid \"rt\" attribute. The Regular Term. Must be one of D,W,M,Y,L."
|
2919 |
msgstr ""
|
2920 |
|
2921 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:442
|
2922 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:529
|
2923 |
msgctxt "s2member-admin"
|
2924 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"D\", \"rp\" ( Regular Period ) > 365, and \"rr\" is not \"BN\" ( Buy Now )."
|
2925 |
msgstr ""
|
2930 |
msgstr ""
|
2931 |
|
2932 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:448
|
2933 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:532
|
2934 |
msgctxt "s2member-admin"
|
2935 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"W\", \"rp\" ( Regular Period ) > 52, and \"rr\" is not \"BN\" ( Buy Now )."
|
2936 |
msgstr ""
|
2937 |
|
2938 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:451
|
2939 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:535
|
2940 |
msgctxt "s2member-admin"
|
2941 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"M\", \"rp\" ( Regular Period ) > 12, and \"rr\" is not \"BN\" ( Buy Now )."
|
2942 |
msgstr ""
|
2943 |
|
2944 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:454
|
2945 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:541
|
2946 |
msgctxt "s2member-admin"
|
2947 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"Y\", \"rp\" ( Regular Period ) > 5, and \"rr\" is not \"BN\" ( Buy Now )."
|
2948 |
msgstr ""
|
2949 |
|
2950 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:457
|
2951 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:544
|
2952 |
msgctxt "s2member-admin"
|
2953 |
msgid "Invalid form configuration. Invalid \"rt, rp, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"Y\", \"rp\" ( Regular Period ) > 1, and \"rr\" is not \"BN\" ( Buy Now )."
|
2954 |
msgstr ""
|
2955 |
|
2956 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:460
|
2957 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:547
|
2958 |
msgctxt "s2member-admin"
|
2959 |
msgid "Invalid form configuration. Invalid \"rp, rt\" attributes. The \"rt\" ( Regular Term ) attribute is \"L\" ( Lifetime ), and \"rp\" ( Regular Period ) > 1."
|
2960 |
msgstr ""
|
2961 |
|
2962 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:463
|
2963 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:550
|
2964 |
msgctxt "s2member-admin"
|
2965 |
msgid "Invalid form configuration. Invalid \"rt, rr\" attributes. The \"rt\" ( Regular Term ) attribute is \"L\" ( Lifetime ), and \"rr\" is not \"BN\" ( Buy Now )."
|
2966 |
msgstr ""
|
2967 |
|
2968 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:466
|
2969 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:553
|
2970 |
msgctxt "s2member-admin"
|
2971 |
msgid "Invalid form configuration. Missing \"level_ccaps_eotper\" attribute. Please check Shortcode Attributes."
|
2972 |
msgstr ""
|
2973 |
|
2974 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:469
|
2975 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:472
|
2976 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:556
|
2977 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:559
|
2978 |
msgctxt "s2member-admin"
|
2979 |
msgid "Invalid form configuration. Invalid \"level_ccaps_eotper\" attribute. Please check Shortcode Attributes."
|
2980 |
msgstr ""
|
2981 |
|
2982 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:487
|
2983 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:574
|
2984 |
msgctxt "s2member-admin"
|
2985 |
msgid "Invalid form configuration. Invalid \"rr\" attribute. Regular Recurring. When provided, must be 0, 1, or BN."
|
2986 |
msgstr ""
|
2987 |
|
2988 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:490
|
2989 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:577
|
2990 |
msgctxt "s2member-admin"
|
2991 |
msgid "Invalid form configuration. Invalid \"rr, tp\" attributes. The \"rr\" ( Regular Recurring ) attribute is \"BN\" ( Buy Now ), and \"tp\" ( Trial Period ) is not \"0\"."
|
2992 |
msgstr ""
|
2993 |
|
2994 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:493
|
2995 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:580
|
2996 |
msgctxt "s2member-admin"
|
2997 |
msgid "Invalid form configuration. Invalid \"level, rr\" attributes. The \"level\" ( Level ) attribute is \"*\" for ( Independent Custom Capabilities ), and \"rr\" is not \"BN\" ( Buy Now )."
|
2998 |
msgstr ""
|
2999 |
|
3000 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:496
|
3001 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:583
|
3002 |
msgctxt "s2member-admin"
|
3003 |
msgid "Invalid form configuration. Invalid \"ta, tp, tt\" attributes. Trial Period. When provided, these cannot be exactly the same as your \"ra, rp, rt\" attributes."
|
3004 |
msgstr ""
|
3005 |
|
3006 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:499
|
3007 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:586
|
3008 |
+
msgctxt "s2member-admin"
|
3009 |
+
msgid "Invalid form configuration. Invalid \"rrt\" attribute. Recurring Times ( fixed ). When provided, must be numeric."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3010 |
msgstr ""
|
3011 |
|
3012 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:502
|
3013 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:589
|
|
|
|
|
|
|
|
|
3014 |
msgctxt "s2member-admin"
|
3015 |
+
msgid "Invalid form configuration. Invalid \"rrt\" attribute. Recurring Times ( fixed ). When provided, must be >= 1."
|
3016 |
msgstr ""
|
3017 |
|
3018 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:505
|
3019 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:592
|
3020 |
+
msgctxt "s2member-admin"
|
3021 |
+
msgid "Invalid form configuration. Invalid \"rr, rrt\" attributes. When \"rrt\" ( Recurring Times ) is provided, \"rr\" ( Regular Recurring ) must be 1."
|
|
|
|
|
|
|
|
|
3022 |
msgstr ""
|
3023 |
|
3024 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:533
|
3025 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:584
|
3026 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:629
|
3027 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:683
|
3028 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:773
|
3029 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:626
|
3030 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:677
|
3031 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:722
|
3032 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:776
|
3033 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:866
|
3034 |
msgctxt "s2member-front"
|
3035 |
+
msgid "Missing or invalid Security Code. Please try again."
|
3036 |
msgstr ""
|
3037 |
|
3038 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:536
|
3039 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:545
|
3040 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:695
|
3041 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:629
|
3042 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:638
|
3043 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:788
|
3044 |
+
msgctxt "s2member-admin"
|
3045 |
+
msgid "Unable to process. You are an Administrator. Stopping here for security. Otherwise, an Administrator could lose access."
|
|
|
3046 |
msgstr ""
|
3047 |
|
3048 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:548
|
3049 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:647
|
3050 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:737
|
3051 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:641
|
3052 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:740
|
3053 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:830
|
3054 |
msgctxt "s2member-front"
|
3055 |
+
msgid "Missing Card Type ( Billing Method ). Please try again."
|
3056 |
msgstr ""
|
3057 |
|
3058 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:551
|
3059 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:650
|
3060 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:740
|
3061 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:644
|
3062 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:743
|
3063 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:833
|
3064 |
msgctxt "s2member-front"
|
3065 |
+
msgid "Invalid Card Type ( Billing Method ). Please try again."
|
3066 |
msgstr ""
|
3067 |
|
3068 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:554
|
3069 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:653
|
3070 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:743
|
3071 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:647
|
3072 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:746
|
3073 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:836
|
3074 |
msgctxt "s2member-front"
|
3075 |
+
msgid "Missing Card Number. Please try again."
|
3076 |
msgstr ""
|
3077 |
|
3078 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:557
|
3079 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:656
|
3080 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:746
|
3081 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:650
|
3082 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:749
|
3083 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:839
|
3084 |
msgctxt "s2member-front"
|
3085 |
+
msgid "Missing Card Expiration Date ( mm/yyyy ). Please try again."
|
3086 |
msgstr ""
|
3087 |
|
3088 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:560
|
3089 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:659
|
3090 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:749
|
3091 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:653
|
3092 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:752
|
3093 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:842
|
3094 |
msgctxt "s2member-front"
|
3095 |
+
msgid "Invalid Card Expiration Date. Must be in this format ( mm/yyyy ). Please try again."
|
3096 |
msgstr ""
|
3097 |
|
3098 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:563
|
3099 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:662
|
3100 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:752
|
3101 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:656
|
3102 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:755
|
3103 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:845
|
3104 |
msgctxt "s2member-front"
|
3105 |
+
msgid "Missing Card Verification Code. It's on the back of your Card. 3-4 digits. Please try again."
|
3106 |
msgstr ""
|
3107 |
|
3108 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:566
|
3109 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:665
|
3110 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:755
|
3111 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:659
|
3112 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:758
|
3113 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:848
|
3114 |
msgctxt "s2member-front"
|
3115 |
+
msgid "Missing Card Start Date, or Issue #. Required for Maestro/Solo. Please try again."
|
3116 |
msgstr ""
|
3117 |
|
3118 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:569
|
3119 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:668
|
3120 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:758
|
3121 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:662
|
3122 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:761
|
3123 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:851
|
3124 |
msgctxt "s2member-front"
|
3125 |
+
msgid "Missing Street Address. Please try again."
|
3126 |
msgstr ""
|
3127 |
|
3128 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:572
|
3129 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:671
|
3130 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:761
|
3131 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:665
|
3132 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:764
|
3133 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:854
|
3134 |
msgctxt "s2member-front"
|
3135 |
+
msgid "Missing City/Town. Please try again."
|
3136 |
msgstr ""
|
3137 |
|
3138 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:575
|
3139 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:674
|
3140 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:764
|
3141 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:668
|
3142 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:767
|
3143 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:857
|
3144 |
msgctxt "s2member-front"
|
3145 |
+
msgid "Missing State/Province. Please try again."
|
3146 |
msgstr ""
|
3147 |
|
3148 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:578
|
3149 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:677
|
3150 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:767
|
3151 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:671
|
3152 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:770
|
3153 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:860
|
3154 |
msgctxt "s2member-front"
|
3155 |
+
msgid "Missing Country. Please try again."
|
3156 |
msgstr ""
|
3157 |
|
3158 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:581
|
3159 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:680
|
3160 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:770
|
3161 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:674
|
3162 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:773
|
3163 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:863
|
3164 |
msgctxt "s2member-front"
|
3165 |
+
msgid "Missing Postal/Zip Code. Please try again."
|
3166 |
msgstr ""
|
3167 |
|
3168 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:590
|
3169 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:635
|
3170 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:698
|
3171 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:683
|
3172 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:728
|
3173 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:791
|
3174 |
msgctxt "s2member-front"
|
3175 |
+
msgid "Missing First Name. Please try again."
|
3176 |
msgstr ""
|
3177 |
|
3178 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:593
|
3179 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:638
|
3180 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:701
|
3181 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:686
|
3182 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:731
|
3183 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:794
|
3184 |
msgctxt "s2member-front"
|
3185 |
+
msgid "Missing Last Name. Please try again."
|
3186 |
msgstr ""
|
3187 |
|
3188 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:596
|
3189 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:641
|
3190 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:704
|
3191 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:689
|
3192 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:734
|
3193 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:797
|
3194 |
msgctxt "s2member-front"
|
3195 |
+
msgid "Missing or invalid Email Address. Please try again."
|
3196 |
msgstr ""
|
3197 |
|
3198 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:599
|
3199 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:644
|
3200 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:707
|
3201 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:692
|
3202 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:737
|
3203 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:800
|
3204 |
msgctxt "s2member-front"
|
3205 |
+
msgid "Invalid Email Address. Please try again."
|
3206 |
msgstr ""
|
3207 |
|
3208 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:602
|
3209 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:710
|
3210 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:695
|
3211 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:803
|
3212 |
msgctxt "s2member-front"
|
3213 |
+
msgid "That Email Address is already in use. Please try again."
|
3214 |
+
msgstr ""
|
3215 |
+
|
3216 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:605
|
3217 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:713
|
3218 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:698
|
3219 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:806
|
3220 |
+
msgctxt "s2member-front"
|
3221 |
+
msgid "Missing or invalid Username. Please try again."
|
3222 |
msgstr ""
|
3223 |
|
3224 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:608
|
3225 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:716
|
3226 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:701
|
3227 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:809
|
3228 |
msgctxt "s2member-front"
|
3229 |
+
msgid "Invalid Username. Please try again. Use ONLY lowercase alphanumerics."
|
3230 |
msgstr ""
|
3231 |
|
3232 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:611
|
3233 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:719
|
3234 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:704
|
3235 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:812
|
3236 |
+
msgctxt "s2member-front"
|
3237 |
+
msgid "That Username is already in use. Please try again."
|
3238 |
+
msgstr ""
|
3239 |
+
|
3240 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:617
|
3241 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:725
|
3242 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:710
|
3243 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:818
|
3244 |
+
msgctxt "s2member-front"
|
3245 |
+
msgid "Missing Password. Please try again."
|
3246 |
+
msgstr ""
|
3247 |
+
|
3248 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:620
|
3249 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:728
|
3250 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:713
|
3251 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:821
|
3252 |
msgctxt "s2member-front"
|
3253 |
msgid "Invalid Password. Must be at least 6 characters. Please try again."
|
3254 |
msgstr ""
|
3255 |
|
3256 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:623
|
3257 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:731
|
3258 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:716
|
3259 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:824
|
3260 |
msgctxt "s2member-front"
|
3261 |
msgid "Invalid Password. Max length is 20 characters. Please try again."
|
3262 |
msgstr ""
|
3263 |
|
3264 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:626
|
3265 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:734
|
3266 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:719
|
3267 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:827
|
3268 |
msgctxt "s2member-front"
|
3269 |
msgid "Password fields do NOT match. Please try again."
|
3270 |
msgstr ""
|
3271 |
|
3272 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:689
|
3273 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:782
|
3274 |
msgctxt "s2member-front"
|
3275 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to modify your billing plan."
|
3276 |
msgstr ""
|
3277 |
|
3278 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:692
|
3279 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:785
|
3280 |
msgctxt "s2member-front"
|
3281 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> before making this purchase."
|
3282 |
msgstr ""
|
3283 |
|
3284 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:776
|
3285 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:869
|
3286 |
msgctxt "s2member-front"
|
3287 |
msgid "Unknown form submission type. Please contact Support."
|
3288 |
msgstr ""
|
3301 |
|
3302 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-update-in.inc.php:107
|
3303 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:112
|
3304 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:115
|
3305 |
msgctxt "s2member-front"
|
3306 |
msgid "<strong>Confirmed.</strong> Your billing information has been updated."
|
3307 |
msgstr ""
|
3308 |
|
3309 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-update-in.inc.php:119
|
3310 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:128
|
3311 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:131
|
3312 |
msgctxt "s2member-front"
|
3313 |
msgid "<strong>Unable to update.</strong> You have NO recurring fees. Or, your billing profile is no longer active. Please contact Support if you need assistance."
|
3314 |
msgstr ""
|
3319 |
msgid "<strong>Oops.</strong> No Subscr. ID. Please contact Support for assistance."
|
3320 |
msgstr ""
|
3321 |
|
3322 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:650
|
3323 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:793
|
3324 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:271
|
3325 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:414
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3326 |
msgctxt "s2member-front percentage-symbol"
|
3327 |
msgid "%"
|
3328 |
msgstr ""
|
3329 |
|
3330 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:792
|
3331 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:413
|
3332 |
msgctxt "s2member-front"
|
3333 |
msgid " + tax"
|
3334 |
msgstr ""
|
3335 |
|
3336 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:837
|
3337 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:889
|
3338 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:902
|
3339 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:924
|
3340 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:984
|
3341 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:999
|
3342 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:458
|
3343 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:510
|
3344 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:523
|
3345 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:545
|
3346 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:605
|
3347 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:620
|
3348 |
+
msgctxt "s2member-front"
|
3349 |
+
msgid "COUPON %s off. ( Now: %s )"
|
3350 |
+
msgstr ""
|
3351 |
+
|
3352 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:838
|
3353 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:890
|
3354 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:903
|
3355 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:925
|
3356 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:985
|
3357 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1000
|
3358 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:459
|
3359 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:511
|
3360 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:524
|
3361 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:546
|
3362 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:606
|
3363 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:621
|
3364 |
msgctxt "s2member-front"
|
3365 |
+
msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s</strong> )</div>"
|
3366 |
msgstr ""
|
3367 |
|
3368 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:850
|
3369 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:863
|
3370 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:876
|
3371 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:939
|
3372 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:954
|
3373 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:969
|
3374 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:471
|
3375 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:484
|
3376 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:497
|
3377 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:560
|
3378 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:575
|
3379 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:590
|
3380 |
msgctxt "s2member-front"
|
3381 |
+
msgid "COUPON %s off. ( Now: %s, then %s )"
|
3382 |
msgstr ""
|
3383 |
|
3384 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:851
|
3387 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:940
|
3388 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:955
|
3389 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:970
|
3390 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:472
|
3391 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:485
|
3392 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:498
|
3393 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:561
|
3394 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:576
|
3395 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:591
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3396 |
msgctxt "s2member-front"
|
3397 |
msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s, then %s</strong> )</div>"
|
3398 |
msgstr ""
|
3399 |
|
3400 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:907
|
3401 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1004
|
3402 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:528
|
3403 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:625
|
3404 |
msgctxt "s2member-front"
|
3405 |
msgid "<div>Sorry, your Coupon is not applicable.</div>"
|
3406 |
msgstr ""
|
3407 |
|
3408 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1008
|
3409 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:629
|
3410 |
msgctxt "s2member-front"
|
3411 |
msgid "<div>Coupon: <strong>%s0.00 off</strong>.</div>"
|
3412 |
msgstr ""
|
3413 |
|
3414 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1012
|
3415 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:633
|
3416 |
msgctxt "s2member-front"
|
3417 |
msgid "<div>Sorry, your Coupon cannot be applied to this particular purchase.</div>"
|
3418 |
msgstr ""
|
3419 |
|
3420 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1016
|
3421 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:637
|
3422 |
msgctxt "s2member-front"
|
3423 |
msgid "<div>Sorry, your Coupon <strong>expired</strong>: <em>%s</em>.</div>"
|
3424 |
msgstr ""
|
3426 |
#. translators: `%1$s` is new price/description, after coupon applied. `%2$s`
|
3427 |
#. is original description.
|
3428 |
|
3429 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1022
|
3430 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:643
|
3431 |
msgctxt "s2member-front"
|
3432 |
msgid "%1$s ~ ORIGINALLY: %2$s"
|
3433 |
msgstr ""
|
3434 |
|
3435 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1050
|
3436 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1054
|
3437 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:671
|
3438 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:675
|
3439 |
msgctxt "s2member-front"
|
3440 |
msgid "<div>Sorry, your Coupon is N/A, invalid or expired.</div>"
|
3441 |
msgstr ""
|
3541 |
msgstr ""
|
3542 |
|
3543 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:122
|
3544 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:119
|
3545 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:252
|
3546 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:270
|
3547 |
msgctxt "s2member-front"
|
3548 |
msgid "<strong>Unable to cancel at this time.</strong> Your account is pending other changes. Please try again in 15 minutes."
|
3549 |
msgstr ""
|
3550 |
|
3551 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:134
|
3552 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-pf-in.inc.php:131
|
3553 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:263
|
3554 |
msgctxt "s2member-front"
|
3555 |
msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal®</a> to cancel your Subscription."
|
3556 |
msgstr ""
|
3557 |
|
3558 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:301
|
3559 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:624
|
3560 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:344
|
3561 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:674
|
3562 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:437
|
3563 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:860
|
3564 |
msgctxt "s2member-front"
|
3605 |
msgid "PayPal® configuration error. Your PayPal® API Signature is not yet configured."
|
3606 |
msgstr ""
|
3607 |
|
3608 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:291
|
3609 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:305
|
3610 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:308
|
3611 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:76
|
3612 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:132
|
3613 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:136
|
3614 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:76
|
3615 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:135
|
3616 |
msgctxt "s2member-front"
|
3617 |
msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal®</a> to update your billing information."
|
3618 |
msgstr ""
|
3619 |
|
3620 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:294
|
3621 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:315
|
3622 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-in.inc.php:124
|
3623 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:127
|
3624 |
msgctxt "s2member-front"
|
3625 |
msgid "<strong>Unable to update at this time.</strong> Your account is pending other changes. Please try again in 15 minutes."
|
3626 |
msgstr ""
|
3627 |
|
3628 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:394
|
3629 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:463
|
3630 |
msgctxt "s2member-admin"
|
3631 |
msgid "Invalid form configuration. Missing \"dg\" attribute. Digital indicator. Must be numeric [0-1]."
|
3632 |
msgstr ""
|
3633 |
|
3634 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:397
|
3635 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:466
|
3636 |
msgctxt "s2member-admin"
|
3637 |
msgid "Invalid form configuration. Invalid \"dg\" attribute. Digital indicator. Must be numeric [0-1]."
|
3638 |
msgstr ""
|
3639 |
|
3640 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:400
|
3641 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:469
|
3642 |
msgctxt "s2member-admin"
|
3643 |
msgid "Invalid form configuration. Missing \"ns\" attribute. Shipping configuration. Must be numeric [0-2]."
|
3644 |
msgstr ""
|
3645 |
|
3646 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:403
|
3647 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:472
|
3648 |
msgctxt "s2member-admin"
|
3649 |
msgid "Invalid form configuration. Invalid \"ns\" attribute. Shipping configuration. Must be numeric [0-2]."
|
3650 |
msgstr ""
|
3651 |
|
3652 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:406
|
3653 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:475
|
3654 |
msgctxt "s2member-admin"
|
3655 |
msgid "Invalid form configuration. Invalid \"ns\" attribute. Shipping configuration. Must be 1 with \"dg\" ( digital ) items."
|
3656 |
msgstr ""
|
3657 |
|
3658 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:409
|
3659 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:478
|
3660 |
msgctxt "s2member-admin"
|
3661 |
msgid "Invalid form configuration. Invalid \"lc\" attribute. Locale Code. When provided, must be a 2 character country code."
|
3662 |
msgstr ""
|
3663 |
|
3664 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:538
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3665 |
msgctxt "s2member-admin"
|
3666 |
+
msgid "Invalid Payflow® form configuration. Invalid \"rt, rp, rr\" attributes. Payflow® supports a specific set of recurring intervals. Pro Forms can be configured to charge: daily, weekly, bi-weekly, monthly, quarterly, or yearly. Any other combination results in this error. This is a Payflow® limitation. Note that Payflow® does NOT support bi-monthly billing."
|
3667 |
msgstr ""
|
3668 |
|
3669 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:595
|
3670 |
msgctxt "s2member-admin"
|
3671 |
msgid "Invalid form configuration. Invalid \"rr, rra\" attributes. When \"rr\" ( Regular Recurring ) is 0 or 1, \"rra\" ( Recurring Retry Attempts ) must be numeric."
|
3672 |
msgstr ""
|
3673 |
|
3674 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:598
|
3675 |
msgctxt "s2member-admin"
|
3676 |
msgid "Invalid form configuration. Invalid \"rr, rra\" attributes. When \"rr\" ( Regular Recurring ) is 0 or 1, \"rra\" ( Recurring Retry Attempts ) must be >= 0."
|
3677 |
msgstr ""
|
3678 |
|
3679 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:141
|
3680 |
+
msgctxt "s2member-front"
|
3681 |
+
msgid "<strong>No Subscr. ID.</strong> Please contact Support for assistance."
|
3682 |
+
msgstr ""
|
3683 |
+
|
3684 |
#: s2member-pro/includes/classes/login-widget.inc.php:123
|
3685 |
msgctxt "s2member-front"
|
3686 |
msgid "Password"
|
readme.txt
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
=== s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
|
2 |
|
3 |
-
Version:
|
4 |
-
Stable tag:
|
5 |
|
6 |
SSL Compatible: yes
|
7 |
bbPress® Compatible: yes
|
@@ -16,7 +16,7 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
|
|
16 |
Google® Checkout Compatible: yes w/s2Member® Pro
|
17 |
ClickBank® Compatible: yes w/s2Member® Pro
|
18 |
|
19 |
-
Tested up to: 3.3.
|
20 |
Requires at least: 3.2
|
21 |
|
22 |
Copyright: © 2009 WebSharks, Inc.
|
@@ -85,11 +85,20 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
|
|
85 |
|
86 |
== Upgrade Notice ==
|
87 |
|
88 |
-
=
|
89 |
-
Upgrade immediately.
|
90 |
|
91 |
== Changelog ==
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
= v120309 =
|
94 |
* (s2Member Pro) **ccBill® Cancellations**. It's now possible for s2Member to pull ccBill® "cancellation" events, from the ccBill® DataLink Service Suite. For further details and configuration options, please check this section of your Dashboard: `s2Member -> ccBill Options -> DataLink Integration`.
|
95 |
* (s2Member/s2Member Pro) **Bug fix**. Some PHP installations running in safe mode were experiencing `400 Bad Request` errors whenever s2Member's Amazon® CloudFront configuration routines for file downloads were processed. Fixed in this release.
|
1 |
=== s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
|
2 |
|
3 |
+
Version: 120514
|
4 |
+
Stable tag: 120514
|
5 |
|
6 |
SSL Compatible: yes
|
7 |
bbPress® Compatible: yes
|
16 |
Google® Checkout Compatible: yes w/s2Member® Pro
|
17 |
ClickBank® Compatible: yes w/s2Member® Pro
|
18 |
|
19 |
+
Tested up to: 3.3.2
|
20 |
Requires at least: 3.2
|
21 |
|
22 |
Copyright: © 2009 WebSharks, Inc.
|
85 |
|
86 |
== Upgrade Notice ==
|
87 |
|
88 |
+
= v120514 =
|
89 |
+
Maintenance release. Upgrade immediately.
|
90 |
|
91 |
== Changelog ==
|
92 |
|
93 |
+
= v120514 =
|
94 |
+
* **(Maintenance Release) Upgrade immediately.**
|
95 |
+
* (s2Member Pro) **Payflow® API Support**. s2Member® Pro now supports PayPal® Pro accounts operating with the Payflow® edition. It is now possible to process recurring payments through newer PayPal® Pro accounts (e.g. those which may use the new Payflow® API for recurring billing). Please note, this feature should ONLY be used by site owners with a brand new PayPal® Pro account, which has Recurring Billing service enabled under the Payflow® edition. Site owners with existing PayPal® Pro accounts are NOT impacted by this feature, nor should they attempt to use this feature. For further details, please check your Dashboard under: `s2Member® -> PayPal® Options -> Payflow® Account Details`.
|
96 |
+
* (s2Member Pro) **Authorize.Net® Shortcode Attribute**. A new Shortcode Attribute `rrt=""`, is available for Authorize.Net® Pro Forms. For further details, please check your Dashboard under: `s2Member® -> Authorize.Net® Forms -> Shortcode Attributes (Explained)`.
|
97 |
+
* (s2Member Pro) **Authorize.Net® Bug Fix**. Transactions were sometimes failing due to character length restrictions imposed by the Authorize.Net® API. Fixed in this release. Please see [this thread](http://www.s2member.com/forums/topic/customer-charged-but-not-given-access/#post-13454) for further details.
|
98 |
+
* (s2Member/s2Member Pro) **Remote Request Hook**. A few developers requested this. A new WordPress® Hook was added to s2Member's remote connection routine. Search s2Member's source code for Hook name: `ws_plugin__s2member_before_wp_remote_request`.
|
99 |
+
* (s2Member Framework) **PayPal® Buttons**. Restrictions limiting the number of days/weeks/months/years allowed in recurring periods for a PayPal® Button have been increased. Max days was increased from `7` to `90`, weeks remains at `52` max, months is up from `12` to `24` max; years increased from `1`, up to `5` years max. This change impacts PayPal® Standard Buttons only, and does NOT affect Pro Forms, which operate on restrictions imposed by the PayPal® Pro API (and these are slightly different).
|
100 |
+
* (s2Member/s2Member Pro) **JW Player® Code Samples**. Updated code samples for JW Player®. For further details, please check your Dashboard under: `s2Member® -> Download Options -> JW Player® Code Samples`.
|
101 |
+
|
102 |
= v120309 =
|
103 |
* (s2Member Pro) **ccBill® Cancellations**. It's now possible for s2Member to pull ccBill® "cancellation" events, from the ccBill® DataLink Service Suite. For further details and configuration options, please check this section of your Dashboard: `s2Member -> ccBill Options -> DataLink Integration`.
|
104 |
* (s2Member/s2Member Pro) **Bug fix**. Some PHP installations running in safe mode were experiencing `400 Bad Request` errors whenever s2Member's Amazon® CloudFront configuration routines for file downloads were processed. Fixed in this release.
|
s2member.php
CHANGED
@@ -19,8 +19,8 @@
|
|
19 |
*/
|
20 |
/* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
-
Version:
|
23 |
-
Stable tag:
|
24 |
|
25 |
SSL Compatible: yes
|
26 |
bbPress® Compatible: yes
|
@@ -35,7 +35,7 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
|
|
35 |
Google® Checkout Compatible: yes w/s2Member® Pro
|
36 |
ClickBank® Compatible: yes w/s2Member® Pro
|
37 |
|
38 |
-
Tested up to: 3.3.
|
39 |
Requires at least: 3.2
|
40 |
|
41 |
Copyright: © 2009 WebSharks, Inc.
|
@@ -75,7 +75,7 @@ if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
|
|
75 |
* @var str
|
76 |
*/
|
77 |
if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
|
78 |
-
define("WS_PLUGIN__S2MEMBER_VERSION", "
|
79 |
/**
|
80 |
* Minimum PHP version required to run s2Member.
|
81 |
*
|
@@ -85,7 +85,7 @@ if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
|
|
85 |
* @var str
|
86 |
*/
|
87 |
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION"))
|
88 |
-
define("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2
|
89 |
/**
|
90 |
* Minimum WordPress® version required to run s2Member.
|
91 |
*
|
@@ -105,7 +105,7 @@ if(!defined("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION"))
|
|
105 |
* @var str
|
106 |
*/
|
107 |
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
|
108 |
-
define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "
|
109 |
/*
|
110 |
Several compatibility checks.
|
111 |
If all pass, load the s2Member plugin.
|
19 |
*/
|
20 |
/* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
+
Version: 120514
|
23 |
+
Stable tag: 120514
|
24 |
|
25 |
SSL Compatible: yes
|
26 |
bbPress® Compatible: yes
|
35 |
Google® Checkout Compatible: yes w/s2Member® Pro
|
36 |
ClickBank® Compatible: yes w/s2Member® Pro
|
37 |
|
38 |
+
Tested up to: 3.3.2
|
39 |
Requires at least: 3.2
|
40 |
|
41 |
Copyright: © 2009 WebSharks, Inc.
|
75 |
* @var str
|
76 |
*/
|
77 |
if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
|
78 |
+
define("WS_PLUGIN__S2MEMBER_VERSION", "120514" /* !#distro-version#! */);
|
79 |
/**
|
80 |
* Minimum PHP version required to run s2Member.
|
81 |
*
|
85 |
* @var str
|
86 |
*/
|
87 |
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION"))
|
88 |
+
define("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2" /* !#php-requires-at-least-version#! */);
|
89 |
/**
|
90 |
* Minimum WordPress® version required to run s2Member.
|
91 |
*
|
105 |
* @var str
|
106 |
*/
|
107 |
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
|
108 |
+
define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "120514" /* !#distro-version#! */);
|
109 |
/*
|
110 |
Several compatibility checks.
|
111 |
If all pass, load the s2Member plugin.
|