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

Version Description

= v131126 =

(Maintenance Release) Upgrade immediately.

Download this release

Release Info

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

Code changes from version 131109 to 131126

Files changed (58) hide show
  1. .htaccess +4 -0
  2. checksum.txt +1 -1
  3. images/index.php +0 -0
  4. includes/classes/css-js-themes.inc.php +8 -2
  5. includes/classes/custom-reg-fields.inc.php +13 -10
  6. includes/classes/index.php +0 -0
  7. includes/classes/meta-boxes.inc.php +1 -1
  8. includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php +74 -10
  9. includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php +80 -4
  10. includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php +71 -8
  11. includes/classes/profile-in.inc.php +8 -8
  12. includes/classes/sc-paypal-button-in.inc.php +1 -0
  13. includes/classes/sc-profile-in.inc.php +10 -10
  14. includes/classes/sp-access.inc.php +1 -1
  15. includes/classes/ssl-in.inc.php +2 -0
  16. includes/classes/user-new-in.inc.php +2 -2
  17. includes/classes/users-list-in.inc.php +2 -2
  18. includes/classes/utils-logs.inc.php +2 -1
  19. includes/dropins/bridges/index.php +0 -0
  20. includes/dropins/index.php +0 -0
  21. includes/dropins/mu-plugins/index.php +0 -0
  22. includes/externals/index.php +0 -0
  23. includes/externals/mailchimp/index.php +0 -0
  24. includes/externals/markdown/index.php +0 -0
  25. includes/functions/index.php +0 -0
  26. includes/functions/separates/index.php +0 -0
  27. includes/index.php +0 -0
  28. includes/jquery/index.php +0 -0
  29. includes/jquery/jquery.json-ps/index.php +0 -0
  30. includes/jquery/jquery.sprintf/index.php +0 -0
  31. includes/jquery/jquery.ui-effects/index.php +0 -0
  32. includes/menu-pages/api-ops.inc.php +1 -1
  33. includes/menu-pages/code-samples/index.php +0 -0
  34. includes/menu-pages/gen-ops.inc.php +44 -1
  35. includes/menu-pages/index.php +0 -0
  36. includes/menu-pages/menu-pages.css +1 -1
  37. includes/menu-pages/paypal-buttons.inc.php +6 -6
  38. includes/menu-pages/paypal-ops.inc.php +238 -3
  39. includes/menu-pages/start.inc.php +1 -1
  40. includes/s2member.css +273 -317
  41. includes/syscon.inc.php +16 -21
  42. includes/templates/badges/index.php +0 -0
  43. includes/templates/buttons/index.php +0 -0
  44. includes/templates/cfg-files/index.php +0 -0
  45. includes/templates/errors/index.php +0 -0
  46. includes/templates/index.php +0 -0
  47. includes/templates/options/index.php +0 -0
  48. includes/templates/options/paypal-sp-hours.php +1 -0
  49. includes/templates/players/index.php +0 -0
  50. includes/templates/returns/index.php +0 -0
  51. includes/templates/shortcodes/index.php +0 -0
  52. includes/translations/index.php +0 -0
  53. includes/translations/s2member.pot +227 -305
  54. index.php +0 -0
  55. licensing/index.php +0 -0
  56. licensing/license.txt +3 -13
  57. readme.txt +123 -24
  58. s2member.php +6 -6
.htaccess ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ # Configuration of directory indexes.
2
+ # For added security (set these explicitly).
3
+ Options -Indexes
4
+ DirectoryIndex index.php
checksum.txt CHANGED
@@ -1 +1 @@
1
- 4f4a8d6b4f39d49be334333ddb1b073e
1
+ 5718bf703692fc39fab134dd4f863d5c
images/index.php DELETED
File without changes
includes/classes/css-js-themes.inc.php CHANGED
@@ -41,14 +41,20 @@ if (!class_exists ("c_ws_plugin__s2member_css_js_themes"))
41
 
42
  if(isset($load)) return $load;
43
 
44
- if(c_ws_plugin__s2member_systematics::is_s2_systematic_use_page())
 
 
 
 
 
 
45
  $load = TRUE;
46
 
47
  else if(c_ws_plugin__s2member_utils_conds::bp_is_installed()
48
  && (bp_is_register_page() || bp_is_activation_page() || bp_is_user_profile()))
49
  $load = TRUE;
50
 
51
- else if(is_singular() && ($post = get_post())
52
  && (stripos($post->post_content, "s2member") !== FALSE
53
  || stripos($post->post_content, "[s2") !== FALSE))
54
  $load = TRUE;
41
 
42
  if(isset($load)) return $load;
43
 
44
+ if(!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["lazy_load_css_js"])
45
+ $load = TRUE;
46
+
47
+ else if(c_ws_plugin__s2member_systematics::is_s2_systematic_use_page())
48
+ $load = TRUE;
49
+
50
+ else if(!empty($_GET[apply_filters ("ws_plugin__s2member_check_force_ssl_get_var_name", "s2-ssl", array())]))
51
  $load = TRUE;
52
 
53
  else if(c_ws_plugin__s2member_utils_conds::bp_is_installed()
54
  && (bp_is_register_page() || bp_is_activation_page() || bp_is_user_profile()))
55
  $load = TRUE;
56
 
57
+ else if(is_singular() && ($post = get_post(NULL))
58
  && (stripos($post->post_content, "s2member") !== FALSE
59
  || stripos($post->post_content, "[s2") !== FALSE))
60
  $load = TRUE;
includes/classes/custom-reg-fields.inc.php CHANGED
@@ -64,6 +64,9 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
64
  $name_suffix = (preg_match("/\[$/", $_name_prefix)) ? ']' : '';
65
  $field_name = trim($_name_prefix.$field_var.$name_suffix);
66
 
 
 
 
67
  $common = /* Common attributes. */ '';
68
  $common .= ' name="'.esc_attr($field_name).'"';
69
  $common .= ' id="'.esc_attr($_id_prefix.$field_id_class).'"';
@@ -326,7 +329,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
326
  unset /* Unset defined __refs, __v. */($__refs, $__v);
327
 
328
  echo '<label for="ws-plugin--s2member-custom-reg-field-first-name">'._x("First Name", "s2member-front", "s2member").' *</label>'."\n";
329
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_first_name" id="ws-plugin--s2member-custom-reg-field-first-name" class="ws-plugin--s2member-custom-reg-field" value="'.esc_attr($_p["ws_plugin__s2member_custom_reg_field_first_name"]).'" />'."\n";
330
  echo '<br />'."\n";
331
 
332
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
@@ -338,7 +341,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
338
  unset /* Unset defined __refs, __v. */($__refs, $__v);
339
 
340
  echo '<label for="ws-plugin--s2member-custom-reg-field-last-name">'._x("Last Name", "s2member-front", "s2member").' *</label>'."\n";
341
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_last_name" id="ws-plugin--s2member-custom-reg-field-last-name" class="ws-plugin--s2member-custom-reg-field" value="'.esc_attr($_p["ws_plugin__s2member_custom_reg_field_last_name"]).'" />'."\n";
342
  echo '<br />'."\n";
343
 
344
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
@@ -365,7 +368,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
365
  echo '<div class="ws-plugin--s2member-custom-reg-field-divider-section'.((!empty($field["sectitle"])) ? '-title' : '').'">'.((!empty($field["sectitle"])) ? $field["sectitle"] : '').'</div>';
366
 
367
  echo '<label for="ws-plugin--s2member-custom-reg-field-'.esc_attr($field_id_class).'"'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? ' style="display:none;"' : '').'>'.$field["label"].(($field["required"] === "yes") ? ' *' : '').'</label>'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? '<br />' : '')."\n";
368
- echo c_ws_plugin__s2member_custom_reg_fields::custom_field_gen(__FUNCTION__, $field, "ws_plugin__s2member_custom_reg_field_", "ws-plugin--s2member-custom-reg-field-", "ws-plugin--s2member-custom-reg-field", "", "", "", $_p, $_p["ws_plugin__s2member_custom_reg_field_".$field_var], "registration");
369
  echo '<br />'."\n";
370
  }
371
  unset /* Unset defined __refs, __v. */($__refs, $__v);
@@ -381,7 +384,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
381
  unset /* Unset defined __refs, __v. */($__refs, $__v);
382
 
383
  echo '<label for="ws-plugin--s2member-custom-reg-field-opt-in">'."\n";
384
- echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_field_opt_in" id="ws-plugin--s2member-custom-reg-field-opt-in" class="ws-plugin--s2member-custom-reg-field" value="1"'.(((empty($_p) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] == 1) || $_p["ws_plugin__s2member_custom_reg_field_opt_in"]) ? ' checked="checked"' : '').' />'."\n";
385
  echo $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in_label"]."\n";
386
  echo '</label>'."\n";
387
  echo '<br />'."\n";
@@ -436,11 +439,11 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
436
 
437
  echo '<label for="ws-plugin--s2member-custom-reg-field-user-pass1" title="'.esc_attr(_x("Please type your Password twice to confirm.", "s2member-front", "s2member")).'">'."\n";
438
  echo '<span>'._x("Password (please type it twice)", "s2member-front", "s2member").' *</span><br />'."\n";
439
- echo '<input type="password" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_user_pass1" id="ws-plugin--s2member-custom-reg-field-user-pass1" class="ws-plugin--s2member-custom-reg-field" value="'.format_to_edit($_p["ws_plugin__s2member_custom_reg_field_user_pass1"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
440
  echo '</label>'."\n";
441
 
442
  echo '<label for="ws-plugin--s2member-custom-reg-field-user-pass2" title="'.esc_attr(_x("Please type your Password twice to confirm.", "s2member-front", "s2member")).'">'."\n";
443
- echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_user_pass2" id="ws-plugin--s2member-custom-reg-field-user-pass2" class="ws-plugin--s2member-custom-reg-field" value="'.format_to_edit($_p["ws_plugin__s2member_custom_reg_field_user_pass2"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
444
  echo '</label>'."\n";
445
 
446
  echo '<div id="ws-plugin--s2member-custom-reg-field-user-pass-strength" class="ws-plugin--s2member-password-strength"><em>'._x("password strength indicator", "s2member-front", "s2member").'</em></div>'."\n";
@@ -462,7 +465,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
462
  echo '<p>'."\n";
463
  echo '<label for="ws-plugin--s2member-custom-reg-field-first-name">'."\n";
464
  echo '<span>'._x("First Name", "s2member-front", "s2member").' *</span><br />'."\n";
465
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_first_name" id="ws-plugin--s2member-custom-reg-field-first-name" class="ws-plugin--s2member-custom-reg-field" value="'.esc_attr($_p["ws_plugin__s2member_custom_reg_field_first_name"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
466
  echo '</label>'."\n";
467
  echo '</p>'."\n";
468
 
@@ -477,7 +480,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
477
  echo '<p>'."\n";
478
  echo '<label for="ws-plugin--s2member-custom-reg-field-last-name">'."\n";
479
  echo '<span>'._x("Last Name", "s2member-front", "s2member").' *</span><br />'."\n";
480
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_last_name" id="ws-plugin--s2member-custom-reg-field-last-name" class="ws-plugin--s2member-custom-reg-field" value="'.esc_attr($_p["ws_plugin__s2member_custom_reg_field_last_name"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
481
  echo '</label>'."\n";
482
  echo '</p>'."\n";
483
 
@@ -510,7 +513,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
510
  echo '<p>'."\n";
511
  echo '<label for="ws-plugin--s2member-custom-reg-field-'.esc_attr($field_id_class).'">'."\n";
512
  echo '<span'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? ' style="display:none;"' : '').'>'.$field["label"].(($field["required"] === "yes") ? ' *' : '').'</span></label>'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? '' : '<br />')."\n";
513
- echo c_ws_plugin__s2member_custom_reg_fields::custom_field_gen(__FUNCTION__, $field, "ws_plugin__s2member_custom_reg_field_", "ws-plugin--s2member-custom-reg-field-", "ws-plugin--s2member-custom-reg-field", "", ($tabindex = $tabindex + 1), "", $_p, $_p["ws_plugin__s2member_custom_reg_field_".$field_var], "registration");
514
  echo '</p>'."\n";
515
  }
516
  unset /* Unset defined __refs, __v. */($__refs, $__v);
@@ -528,7 +531,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
528
 
529
  echo '<p>'."\n";
530
  echo '<label for="ws-plugin--s2member-custom-reg-field-opt-in">'."\n";
531
- echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_field_opt_in" id="ws-plugin--s2member-custom-reg-field-opt-in" class="ws-plugin--s2member-custom-reg-field" value="1"'.(((empty($_p) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] == 1) || $_p["ws_plugin__s2member_custom_reg_field_opt_in"]) ? ' checked="checked"' : '').' tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
532
  echo $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in_label"]."\n";
533
  echo '</label>'."\n";
534
  echo '</p>'."\n";
64
  $name_suffix = (preg_match("/\[$/", $_name_prefix)) ? ']' : '';
65
  $field_name = trim($_name_prefix.$field_var.$name_suffix);
66
 
67
+ if(in_array($field["type"], array("text", "textarea", "select"), TRUE))
68
+ $_classes = trim($_classes." form-control"); // Bootstrap.
69
+
70
  $common = /* Common attributes. */ '';
71
  $common .= ' name="'.esc_attr($field_name).'"';
72
  $common .= ' id="'.esc_attr($_id_prefix.$field_id_class).'"';
329
  unset /* Unset defined __refs, __v. */($__refs, $__v);
330
 
331
  echo '<label for="ws-plugin--s2member-custom-reg-field-first-name">'._x("First Name", "s2member-front", "s2member").' *</label>'."\n";
332
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_first_name" id="ws-plugin--s2member-custom-reg-field-first-name" class="ws-plugin--s2member-custom-reg-field form-control" value="'.esc_attr(@$_p["ws_plugin__s2member_custom_reg_field_first_name"]).'" />'."\n";
333
  echo '<br />'."\n";
334
 
335
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
341
  unset /* Unset defined __refs, __v. */($__refs, $__v);
342
 
343
  echo '<label for="ws-plugin--s2member-custom-reg-field-last-name">'._x("Last Name", "s2member-front", "s2member").' *</label>'."\n";
344
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_last_name" id="ws-plugin--s2member-custom-reg-field-last-name" class="ws-plugin--s2member-custom-reg-field form-control" value="'.esc_attr(@$_p["ws_plugin__s2member_custom_reg_field_last_name"]).'" />'."\n";
345
  echo '<br />'."\n";
346
 
347
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
368
  echo '<div class="ws-plugin--s2member-custom-reg-field-divider-section'.((!empty($field["sectitle"])) ? '-title' : '').'">'.((!empty($field["sectitle"])) ? $field["sectitle"] : '').'</div>';
369
 
370
  echo '<label for="ws-plugin--s2member-custom-reg-field-'.esc_attr($field_id_class).'"'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? ' style="display:none;"' : '').'>'.$field["label"].(($field["required"] === "yes") ? ' *' : '').'</label>'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? '<br />' : '')."\n";
371
+ echo c_ws_plugin__s2member_custom_reg_fields::custom_field_gen(__FUNCTION__, $field, "ws_plugin__s2member_custom_reg_field_", "ws-plugin--s2member-custom-reg-field-", "ws-plugin--s2member-custom-reg-field", "", "", "", $_p, @$_p["ws_plugin__s2member_custom_reg_field_".$field_var], "registration");
372
  echo '<br />'."\n";
373
  }
374
  unset /* Unset defined __refs, __v. */($__refs, $__v);
384
  unset /* Unset defined __refs, __v. */($__refs, $__v);
385
 
386
  echo '<label for="ws-plugin--s2member-custom-reg-field-opt-in">'."\n";
387
+ echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_field_opt_in" id="ws-plugin--s2member-custom-reg-field-opt-in" class="ws-plugin--s2member-custom-reg-field" value="1"'.(((empty($_p) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] == 1) || @$_p["ws_plugin__s2member_custom_reg_field_opt_in"]) ? ' checked="checked"' : '').' />'."\n";
388
  echo $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in_label"]."\n";
389
  echo '</label>'."\n";
390
  echo '<br />'."\n";
439
 
440
  echo '<label for="ws-plugin--s2member-custom-reg-field-user-pass1" title="'.esc_attr(_x("Please type your Password twice to confirm.", "s2member-front", "s2member")).'">'."\n";
441
  echo '<span>'._x("Password (please type it twice)", "s2member-front", "s2member").' *</span><br />'."\n";
442
+ echo '<input type="password" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_user_pass1" id="ws-plugin--s2member-custom-reg-field-user-pass1" class="ws-plugin--s2member-custom-reg-field form-control" value="'.format_to_edit(@$_p["ws_plugin__s2member_custom_reg_field_user_pass1"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
443
  echo '</label>'."\n";
444
 
445
  echo '<label for="ws-plugin--s2member-custom-reg-field-user-pass2" title="'.esc_attr(_x("Please type your Password twice to confirm.", "s2member-front", "s2member")).'">'."\n";
446
+ echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_user_pass2" id="ws-plugin--s2member-custom-reg-field-user-pass2" class="ws-plugin--s2member-custom-reg-field form-control" value="'.format_to_edit(@$_p["ws_plugin__s2member_custom_reg_field_user_pass2"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
447
  echo '</label>'."\n";
448
 
449
  echo '<div id="ws-plugin--s2member-custom-reg-field-user-pass-strength" class="ws-plugin--s2member-password-strength"><em>'._x("password strength indicator", "s2member-front", "s2member").'</em></div>'."\n";
465
  echo '<p>'."\n";
466
  echo '<label for="ws-plugin--s2member-custom-reg-field-first-name">'."\n";
467
  echo '<span>'._x("First Name", "s2member-front", "s2member").' *</span><br />'."\n";
468
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_first_name" id="ws-plugin--s2member-custom-reg-field-first-name" class="ws-plugin--s2member-custom-reg-field form-control" value="'.esc_attr(@$_p["ws_plugin__s2member_custom_reg_field_first_name"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
469
  echo '</label>'."\n";
470
  echo '</p>'."\n";
471
 
480
  echo '<p>'."\n";
481
  echo '<label for="ws-plugin--s2member-custom-reg-field-last-name">'."\n";
482
  echo '<span>'._x("Last Name", "s2member-front", "s2member").' *</span><br />'."\n";
483
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_custom_reg_field_last_name" id="ws-plugin--s2member-custom-reg-field-last-name" class="ws-plugin--s2member-custom-reg-field form-control" value="'.esc_attr(@$_p["ws_plugin__s2member_custom_reg_field_last_name"]).'" tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
484
  echo '</label>'."\n";
485
  echo '</p>'."\n";
486
 
513
  echo '<p>'."\n";
514
  echo '<label for="ws-plugin--s2member-custom-reg-field-'.esc_attr($field_id_class).'">'."\n";
515
  echo '<span'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? ' style="display:none;"' : '').'>'.$field["label"].(($field["required"] === "yes") ? ' *' : '').'</span></label>'.((preg_match("/^(checkbox|pre_checkbox)$/", $field["type"])) ? '' : '<br />')."\n";
516
+ echo c_ws_plugin__s2member_custom_reg_fields::custom_field_gen(__FUNCTION__, $field, "ws_plugin__s2member_custom_reg_field_", "ws-plugin--s2member-custom-reg-field-", "ws-plugin--s2member-custom-reg-field", "", ($tabindex = $tabindex + 1), "", $_p, @$_p["ws_plugin__s2member_custom_reg_field_".$field_var], "registration");
517
  echo '</p>'."\n";
518
  }
519
  unset /* Unset defined __refs, __v. */($__refs, $__v);
531
 
532
  echo '<p>'."\n";
533
  echo '<label for="ws-plugin--s2member-custom-reg-field-opt-in">'."\n";
534
+ echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_field_opt_in" id="ws-plugin--s2member-custom-reg-field-opt-in" class="ws-plugin--s2member-custom-reg-field" value="1"'.(((empty($_p) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] == 1) || @$_p["ws_plugin__s2member_custom_reg_field_opt_in"]) ? ' checked="checked"' : '').' tabindex="'.esc_attr(($tabindex = $tabindex + 10)).'" />'."\n";
535
  echo $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in_label"]."\n";
536
  echo '</label>'."\n";
537
  echo '</p>'."\n";
includes/classes/index.php DELETED
File without changes
includes/classes/meta-boxes.inc.php CHANGED
@@ -45,7 +45,7 @@ if (!class_exists ("c_ws_plugin__s2member_meta_boxes"))
45
  {
46
  do_action ("ws_plugin__s2member_before_add_meta_boxes", get_defined_vars ());
47
 
48
- $excluded_types = array ("link", "comment", "revision", "attachment", "nav_menu_item");
49
  $excluded_types = apply_filters ("ws_plugin__s2member_add_meta_boxes_excluded_types", $excluded_types, get_defined_vars ());
50
 
51
  if (in_array ($type, array_keys (get_post_types ())) && !in_array ($type, $excluded_types))
45
  {
46
  do_action ("ws_plugin__s2member_before_add_meta_boxes", get_defined_vars ());
47
 
48
+ $excluded_types = array ("link", "comment", "revision", "attachment", "nav_menu_item", "snippet", "redirect");
49
  $excluded_types = apply_filters ("ws_plugin__s2member_add_meta_boxes_excluded_types", $excluded_types, get_defined_vars ());
50
 
51
  if (in_array ($type, array_keys (get_post_types ())) && !in_array ($type, $excluded_types))
includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php CHANGED
@@ -90,7 +90,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
90
  add_existing_user_to_blog(array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
91
  $user = new WP_User ($user_id);
92
  }
93
-
94
  $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
95
 
96
  if ($current_role !== "s2member_level" . $paypal["level"]) // Only if we need to.
@@ -129,10 +128,80 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
129
 
130
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated on Subscription modification.";
131
 
132
- c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_modification_email_sbj", _x ("Thank you! Your account has been updated.", "s2member-front", "s2member"), get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", _x ("Thank you! You've been updated to:", "s2member-front", "s2member") . "\n" . $paypal["item_name"] . "\n\n" . _x ("Please log back in now.", "s2member-front", "s2member") . "\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release ();
133
-
134
- $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
135
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
137
  {
138
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
@@ -160,10 +229,8 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
160
  if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
161
  c_ws_plugin__s2member_utils_urls::remote ($url);
162
  }
163
-
164
  $paypal["s2member_log"][] = "Modification Notification URLs have been processed.";
165
  }
166
-
167
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
168
  {
169
  $msg = $sbj = "(s2Member / API Notification Email) - Modification";
@@ -233,7 +300,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
233
 
234
  $paypal["s2member_log"][] = "Modification Notification Emails have been processed.";
235
  }
236
-
237
  if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
238
  {
239
  if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $code)))
@@ -264,7 +330,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
264
  }
265
  }
266
  }
267
-
268
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
269
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_modify", get_defined_vars ());
270
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
@@ -281,7 +346,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level
281
  $paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_modify` ).";
282
  $paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
283
  }
284
-
285
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
286
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_modify", get_defined_vars ());
287
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
90
  add_existing_user_to_blog(array ("user_id" => $user_id, "role" => "s2member_level" . $paypal["level"]));
91
  $user = new WP_User ($user_id);
92
  }
 
93
  $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
94
 
95
  if ($current_role !== "s2member_level" . $paypal["level"]) // Only if we need to.
128
 
129
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated on Subscription modification.";
130
 
131
+ $sbj = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_subject"]; // The same for standard and w/ Pro Forms.
132
+ $msg = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_message"]; // The same for standard and w/ Pro Forms.
133
+ $rec = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_recipients"]; // The same for standard and w/ Pro Forms.
134
+
135
+ if (($rec = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $rec)) && ($rec = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $rec)))
136
+ if (($rec = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $rec)) && ($rec = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $rec)))
137
+ if (($rec = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $rec)) && ($rec = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $rec)))
138
+ if (($rec = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $rec)) && ($rec = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $rec)))
139
+ if (($rec = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $rec)) && ($rec = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $rec)))
140
+ if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
141
+ if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
142
+ if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) // **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. (ex. "N\"ame" <email>).
143
+ if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
144
+
145
+ if (($rec = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $rec)) && ($rec = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $rec)))
146
+ if (($rec = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $rec)))
147
+ if (($rec = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $rec)))
148
+ if (($rec = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $rec)))
149
+ if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $rec)))
150
+ if (($rec = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $rec)))
151
+
152
+ if (($sbj = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $sbj)) && ($sbj = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $sbj)))
153
+ if (($sbj = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $sbj)) && ($sbj = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $sbj)))
154
+ if (($sbj = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $sbj)) && ($sbj = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $sbj)))
155
+ if (($sbj = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $sbj)) && ($sbj = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $sbj)))
156
+ if (($sbj = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $sbj)) && ($sbj = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $sbj)))
157
+ if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
158
+ if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
159
+ if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
160
+ if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
161
+
162
+ if (($sbj = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $sbj)) && ($sbj = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $sbj)))
163
+ if (($sbj = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $sbj)))
164
+ if (($sbj = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $sbj)))
165
+ if (($sbj = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $sbj)))
166
+ if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $sbj)))
167
+ if (($sbj = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $sbj)))
168
+
169
+ if (($msg = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $msg)))
170
+ if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)))
171
+ if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
172
+ if (($msg = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $msg)) && ($msg = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $msg)))
173
+ if (($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)) && ($msg = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $msg)))
174
+ if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
175
+ if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
176
+ if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
177
+ if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
178
+
179
+ if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
180
+ if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
181
+ if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
182
+ if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
183
+ if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
184
+ if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
185
+ {
186
+ if (is_array ($fields) && !empty ($fields)) foreach /* Custom Registration/Profile Fields. */ ($fields as $var => $val)
187
+ {
188
+ $rec = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $rec);
189
+ $sbj = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $sbj);
190
+ $msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg);
191
+ }
192
+ if (($rec = trim (preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
193
+ {
194
+ if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
195
+ {
196
+ $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars());
197
+ $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars());
198
+ }
199
+ foreach /* Go through a possible list of recipients. */(c_ws_plugin__s2member_utils_strings::parse_emails ($rec) as $recipient)
200
+ c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($recipient, apply_filters ("ws_plugin__s2member_modification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release ();
201
+
202
+ $paypal["s2member_log"][] = "Modification Confirmation Email sent to: " . $rec . ".";
203
+ }
204
+ }
205
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
206
  {
207
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
229
  if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
230
  c_ws_plugin__s2member_utils_urls::remote ($url);
231
  }
 
232
  $paypal["s2member_log"][] = "Modification Notification URLs have been processed.";
233
  }
 
234
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
235
  {
236
  $msg = $sbj = "(s2Member / API Notification Email) - Modification";
300
 
301
  $paypal["s2member_log"][] = "Modification Notification Emails have been processed.";
302
  }
 
303
  if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
304
  {
305
  if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $code)))
330
  }
331
  }
332
  }
 
333
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
334
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_modify", get_defined_vars ());
335
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
346
  $paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_modify` ).";
347
  $paypal["s2member_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
348
  }
 
349
  foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
350
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_modify", get_defined_vars ());
351
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php CHANGED
@@ -153,10 +153,86 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level"
153
 
154
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
155
 
156
- c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_modification_email_sbj", _x ("Thank you! Your account has been updated.", "s2member-front", "s2member"), get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", _x ("Thank you! You've been updated to:", "s2member-front", "s2member") . "\n" . $paypal["item_name"] . "\n\n" . _x ("Please log back in now.", "s2member-front", "s2member") . "\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release ();
157
-
158
- $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
159
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
161
  {
162
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
153
 
154
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
155
 
156
+ $sbj = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_subject"]; // The same for standard and w/ Pro Forms.
157
+ $msg = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_message"]; // The same for standard and w/ Pro Forms.
158
+ $rec = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_recipients"]; // The same for standard and w/ Pro Forms.
159
+
160
+ if (($rec = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $rec)) && ($rec = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $rec)))
161
+ if (($rec = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $rec)) && ($rec = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $rec)))
162
+ if (($rec = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $rec)) && ($rec = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $rec)))
163
+ if (($rec = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $rec)) && ($rec = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $rec)))
164
+ if (($rec = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $rec)) && ($rec = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $rec)))
165
+ if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
166
+ if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
167
+ if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) // **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. (ex. "N\"ame" <email>).
168
+ if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
169
+
170
+ if (($rec = preg_replace ("/%%full_coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["full_coupon_code"]), $rec)) && ($rec = preg_replace ("/%%coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["coupon_code"]), $rec)) && ($rec = preg_replace ("/%%coupon_affiliate_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["affiliate_id"]), $rec)))
171
+
172
+ if (($rec = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $rec)) && ($rec = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $rec)))
173
+ if (($rec = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $rec)))
174
+ if (($rec = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $rec)))
175
+ if (($rec = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $rec)))
176
+ if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $rec)))
177
+ if (($rec = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $rec)))
178
+
179
+ if (($sbj = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $sbj)) && ($sbj = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $sbj)))
180
+ if (($sbj = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $sbj)) && ($sbj = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $sbj)))
181
+ if (($sbj = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $sbj)) && ($sbj = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $sbj)))
182
+ if (($sbj = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $sbj)) && ($sbj = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $sbj)))
183
+ if (($sbj = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $sbj)) && ($sbj = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $sbj)))
184
+ if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
185
+ if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
186
+ if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
187
+ if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
188
+
189
+ if (($sbj = preg_replace ("/%%full_coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["full_coupon_code"]), $sbj)) && ($sbj = preg_replace ("/%%coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["coupon_code"]), $sbj)) && ($sbj = preg_replace ("/%%coupon_affiliate_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["affiliate_id"]), $sbj)))
190
+
191
+ if (($sbj = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $sbj)) && ($sbj = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $sbj)))
192
+ if (($sbj = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $sbj)))
193
+ if (($sbj = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $sbj)))
194
+ if (($sbj = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $sbj)))
195
+ if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $sbj)))
196
+ if (($sbj = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $sbj)))
197
+
198
+ if (($msg = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $msg)))
199
+ if (($msg = preg_replace ("/%%initial%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial"]), $msg)) && ($msg = preg_replace ("/%%regular%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular"]), $msg)))
200
+ if (($msg = preg_replace ("/%%initial_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["initial_term"]), $msg)) && ($msg = preg_replace ("/%%regular_term%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["regular_term"]), $msg)))
201
+ if (($msg = preg_replace ("/%%initial_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["initial_term"])), $msg)) && ($msg = preg_replace ("/%%regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], $paypal["recurring"])), $msg)))
202
+ if (($msg = preg_replace ("/%%recurring%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["recurring"]), $msg)) && ($msg = preg_replace ("/%%recurring\/regular_cycle%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ((($paypal["recurring"]) ? $paypal["recurring"] . " / " . c_ws_plugin__s2member_utils_time::period_term ($paypal["regular_term"], true) : "0 / non-recurring")), $msg)))
203
+ if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
204
+ if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
205
+ if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
206
+ if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
207
+
208
+ if (($msg = preg_replace ("/%%full_coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["full_coupon_code"]), $msg)) && ($msg = preg_replace ("/%%coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["coupon_code"]), $msg)) && ($msg = preg_replace ("/%%coupon_affiliate_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["affiliate_id"]), $msg)))
209
+
210
+ if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
211
+ if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
212
+ if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
213
+ if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
214
+ if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
215
+ if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
216
+ {
217
+ if (is_array ($fields) && !empty ($fields)) foreach /* Custom Registration/Profile Fields. */ ($fields as $var => $val)
218
+ {
219
+ $rec = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $rec);
220
+ $sbj = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $sbj);
221
+ $msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg);
222
+ }
223
+ if (($rec = trim (preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
224
+ {
225
+ if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
226
+ {
227
+ $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars());
228
+ $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars());
229
+ }
230
+ foreach /* Go through a possible list of recipients. */(c_ws_plugin__s2member_utils_strings::parse_emails ($rec) as $recipient)
231
+ c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($recipient, apply_filters ("ws_plugin__s2member_modification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_modification_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release ();
232
+
233
+ $paypal["s2member_log"][] = "Modification Confirmation Email sent to: " . $rec . ".";
234
+ }
235
+ }
236
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
237
  {
238
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_notification_urls"]) as $url)
includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php CHANGED
@@ -81,7 +81,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level"))
81
  add_existing_user_to_blog (array ("user_id" => $user_id, "role" => get_option ("default_role")));
82
  $user = new WP_User ($user_id);
83
  }
84
-
85
  if ($paypal["ccaps"] && preg_match ("/^-all/", str_replace ("+", "", $paypal["ccaps"])))
86
  foreach ($user->allcaps as $cap => $cap_enabled)
87
  if (preg_match ("/^access_s2member_ccap_/", $cap))
@@ -97,10 +96,77 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level"))
97
 
98
  $paypal["s2member_log"][] = "s2Member Custom Capabilities updated w/ advanced update routines.";
99
 
100
- c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($paypal["payer_email"], apply_filters ("ws_plugin__s2member_capabilities_email_sbj", _x ("Thank you! Your account has been updated.", "s2member-front", "s2member"), get_defined_vars ()), apply_filters ("ws_plugin__s2member_capabilities_email_msg", _x ("Thank you! You now have access to:", "s2member-front", "s2member") . "\n" . $paypal["item_name"] . "\n\n" . _x ("Please log back in now.", "s2member-front", "s2member") . "\n" . wp_login_url (), get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release ();
101
-
102
- $paypal["s2member_log"][] = "Capability Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
103
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  if ($processing && $_REQUEST["s2member_paypal_proxy"] && ($url = $_REQUEST["s2member_paypal_proxy_return_url"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"]))) // A Proxy is requesting a Return URL?
105
  {
106
  if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)) && ($url = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["subscr_id"])), $url)))
@@ -130,7 +196,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level"))
130
  }
131
  $paypal["s2member_log"][] = "Capability Return, a Proxy Return URL is ready.";
132
  }
133
-
134
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
135
  {
136
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
@@ -161,7 +226,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level"))
161
  }
162
  $paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
163
  }
164
-
165
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
166
  {
167
  $msg = $sbj = "(s2Member / API Notification Email) - Payment";
@@ -232,7 +296,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level"))
232
  }
233
  $paypal["s2member_log"][] = "Payment Notification Emails have been processed.";
234
  }
235
-
236
  if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
237
  {
238
  if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $code)))
81
  add_existing_user_to_blog (array ("user_id" => $user_id, "role" => get_option ("default_role")));
82
  $user = new WP_User ($user_id);
83
  }
 
84
  if ($paypal["ccaps"] && preg_match ("/^-all/", str_replace ("+", "", $paypal["ccaps"])))
85
  foreach ($user->allcaps as $cap => $cap_enabled)
86
  if (preg_match ("/^access_s2member_ccap_/", $cap))
96
 
97
  $paypal["s2member_log"][] = "s2Member Custom Capabilities updated w/ advanced update routines.";
98
 
99
+ $sbj = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_email_subject"]; // The same for standard and w/ Pro Forms.
100
+ $msg = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_email_message"]; // The same for standard and w/ Pro Forms.
101
+ $rec = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_email_recipients"]; // The same for standard and w/ Pro Forms.
102
+
103
+ if (($rec = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $rec)) && ($rec = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $rec)))
104
+ if (($rec = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $rec)) && ($rec = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $rec)))
105
+ if (($rec = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $rec)) && ($rec = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $rec)))
106
+ if (($rec = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"])), $rec)) && ($rec = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"])), $rec)))
107
+ if (($rec = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq (c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $rec))) // **NOTE** c_ws_plugin__s2member_utils_strings::esc_dq() is applied here. (ex. "N\"ame" <email>).
108
+ if (($rec = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $rec)))
109
+
110
+ if (($rec = preg_replace ("/%%full_coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["full_coupon_code"]), $rec)) && ($rec = preg_replace ("/%%coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["coupon_code"]), $rec)) && ($rec = preg_replace ("/%%coupon_affiliate_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["affiliate_id"]), $rec)))
111
+
112
+ if (($rec = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $rec)) && ($rec = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $rec)))
113
+ if (($rec = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $rec)))
114
+ if (($rec = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $rec)))
115
+ if (($rec = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $rec)))
116
+ if (($rec = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $rec)))
117
+ if (($rec = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $rec)))
118
+
119
+ if (($sbj = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $sbj)) && ($sbj = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $sbj)))
120
+ if (($sbj = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $sbj)) && ($sbj = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $sbj)))
121
+ if (($sbj = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $sbj)) && ($sbj = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $sbj)))
122
+ if (($sbj = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $sbj)) && ($sbj = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $sbj)))
123
+ if (($sbj = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)))
124
+ if (($sbj = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $sbj)))
125
+
126
+ if (($sbj = preg_replace ("/%%full_coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["full_coupon_code"]), $sbj)) && ($sbj = preg_replace ("/%%coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["coupon_code"]), $sbj)) && ($sbj = preg_replace ("/%%coupon_affiliate_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["affiliate_id"]), $sbj)))
127
+
128
+ if (($sbj = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $sbj)) && ($sbj = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $sbj)))
129
+ if (($sbj = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $sbj)))
130
+ if (($sbj = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $sbj)))
131
+ if (($sbj = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $sbj)))
132
+ if (($sbj = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $sbj)))
133
+ if (($sbj = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $sbj)))
134
+
135
+ if (($msg = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)) && ($msg = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $msg)))
136
+ if (($msg = preg_replace ("/%%amount%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["mc_gross"]), $msg)) && ($msg = preg_replace ("/%%txn_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["txn_id"]), $msg)))
137
+ if (($msg = preg_replace ("/%%item_number%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_number"]), $msg)) && ($msg = preg_replace ("/%%item_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["item_name"]), $msg)))
138
+ if (($msg = preg_replace ("/%%first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["first_name"]), $msg)) && ($msg = preg_replace ("/%%last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["last_name"]), $msg)))
139
+ if (($msg = preg_replace ("/%%full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($paypal["first_name"] . " " . $paypal["last_name"])), $msg)))
140
+ if (($msg = preg_replace ("/%%payer_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["payer_email"]), $msg)))
141
+
142
+ if (($msg = preg_replace ("/%%full_coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["full_coupon_code"]), $msg)) && ($msg = preg_replace ("/%%coupon_code%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["coupon_code"]), $msg)) && ($msg = preg_replace ("/%%coupon_affiliate_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($coupon["affiliate_id"]), $msg)))
143
+
144
+ if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->first_name), $msg)) && ($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->last_name), $msg)))
145
+ if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (trim ($user->first_name . " " . $user->last_name)), $msg)))
146
+ if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_email), $msg)))
147
+ if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user->user_login), $msg)))
148
+ if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_reg_ip), $msg)))
149
+ if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
150
+ {
151
+ if (is_array ($fields) && !empty ($fields)) foreach /* Custom Registration/Profile Fields. */ ($fields as $var => $val)
152
+ {
153
+ $rec = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $rec);
154
+ $sbj = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $sbj);
155
+ $msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg);
156
+ }
157
+ if (($rec = trim (preg_replace ("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim (preg_replace ("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
158
+ {
159
+ if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
160
+ {
161
+ $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars());
162
+ $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars());
163
+ }
164
+ foreach /* Go through a possible list of recipients. */(c_ws_plugin__s2member_utils_strings::parse_emails ($rec) as $recipient)
165
+ c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($recipient, apply_filters ("ws_plugin__s2member_capabilities_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_capabilities_email_msg", $msg, get_defined_vars ()), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release ();
166
+
167
+ $paypal["s2member_log"][] = "Capability Confirmation Email sent to: " . $rec . ".";
168
+ }
169
+ }
170
  if ($processing && $_REQUEST["s2member_paypal_proxy"] && ($url = $_REQUEST["s2member_paypal_proxy_return_url"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"]))) // A Proxy is requesting a Return URL?
171
  {
172
  if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)) && ($url = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($paypal["subscr_id"])), $url)))
196
  }
197
  $paypal["s2member_log"][] = "Capability Return, a Proxy Return URL is ready.";
198
  }
 
199
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
200
  {
201
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
226
  }
227
  $paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
228
  }
 
229
  if ($processing && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_recipients"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
230
  {
231
  $msg = $sbj = "(s2Member / API Notification Email) - Payment";
296
  }
297
  $paypal["s2member_log"][] = "Payment Notification Emails have been processed.";
298
  }
 
299
  if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_tracking_codes"]) && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
300
  {
301
  if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%subscr_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($paypal["subscr_id"]), $code)))
includes/classes/profile-in.inc.php CHANGED
@@ -76,7 +76,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
76
  echo '<td>' . "\n";
77
  echo '<label for="ws-plugin--s2member-profile-login">' . "\n";
78
  echo '<strong>' . _x ("Username", "s2member-front", "s2member") . ' *</strong> <small>' . _x ("(cannot be changed)", "s2member-front", "s2member") . '</small><br />' . "\n";
79
- echo '<input type="text" aria-required="true" maxlength="60" autocomplete="off" name="ws_plugin__s2member_profile_login" id="ws-plugin--s2member-profile-login" class="ws-plugin--s2member-profile-field" value="' . format_to_edit ($user->user_login) . '" disabled="disabled" />' . "\n";
80
  echo '</label>' . "\n";
81
  echo '</td>' . "\n";
82
  echo '</tr>' . "\n";
@@ -96,7 +96,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
96
  echo '<td>' . "\n";
97
  echo '<label for="ws-plugin--s2member-profile-email">' . "\n";
98
  echo '<strong>' . _x ("Email Address", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
99
- echo '<input type="text" aria-required="true" data-expected="email" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_email" id="ws-plugin--s2member-profile-email" class="ws-plugin--s2member-profile-field" value="' . format_to_edit ($user->user_email) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
100
  echo '</label>' . "\n";
101
  echo '</td>' . "\n";
102
  echo '</tr>' . "\n";
@@ -118,7 +118,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
118
  echo '<td>' . "\n";
119
  echo '<label for="ws-plugin--s2member-profile-first-name">' . "\n";
120
  echo '<strong>' . _x ("First Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
121
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_first_name" id="ws-plugin--s2member-profile-first-name" class="ws-plugin--s2member-profile-field" value="' . esc_attr ($user->first_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
122
  echo '</label>' . "\n";
123
  echo '</td>' . "\n";
124
  echo '</tr>' . "\n";
@@ -138,7 +138,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
138
  echo '<td>' . "\n";
139
  echo '<label for="ws-plugin--s2member-profile-last-name">' . "\n";
140
  echo '<strong>' . _x ("Last Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
141
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_last_name" id="ws-plugin--s2member-profile-last-name" class="ws-plugin--s2member-profile-field" value="' . esc_attr ($user->last_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
142
  echo '</label>' . "\n";
143
  echo '</td>' . "\n";
144
  echo '</tr>' . "\n";
@@ -158,7 +158,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
158
  echo '<td>' . "\n";
159
  echo '<label for="ws-plugin--s2member-profile-display-name">' . "\n";
160
  echo '<strong>' . _x ("Display Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
161
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_display_name" id="ws-plugin--s2member-profile-display-name" class="ws-plugin--s2member-profile-field" value="' . esc_attr ($user->display_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
162
  echo '</label>' . "\n";
163
  echo '</td>' . "\n";
164
  echo '</tr>' . "\n";
@@ -233,11 +233,11 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
233
  echo '<label for="ws-plugin--s2member-profile-password1" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
234
  echo '<strong>' . _x ("New Password?", "s2member-front", "s2member") . '</strong> <em>' . _x ("(please type it twice)", "s2member-front", "s2member") . '</em><br />' . "\n";
235
  echo '<em>' . _x ("Only if changing password, otherwise leave blank.", "s2member-front", "s2member") . '</em><br />' . "\n";
236
- echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password1" id="ws-plugin--s2member-profile-password1" class="ws-plugin--s2member-profile-field" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
237
  echo '</label>' . "\n";
238
 
239
  echo '<label for="ws-plugin--s2member-profile-password2" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
240
- echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password2" id="ws-plugin--s2member-profile-password2" class="ws-plugin--s2member-profile-field" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
241
  echo '</label>' . "\n";
242
 
243
  echo '<div id="ws-plugin--s2member-profile-password-strength" class="ws-plugin--s2member-password-strength"><em>' . _x ("password strength indicator", "s2member-front", "s2member") . '</em></div>' . "\n";
@@ -257,7 +257,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_in"))
257
  echo '<tr>' . "\n";
258
  echo '<td>' . "\n";
259
  echo '<input type="hidden" name="ws_plugin__s2member_profile_save" id="ws-plugin--s2member-profile-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-profile-save")) . '" />' . "\n";
260
- echo '<input type="submit" id="ws-plugin--s2member-profile-submit" value="' . esc_attr (_x ("Save All Changes", "s2member-front", "s2member")) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
261
  echo '</td>' . "\n";
262
  echo '</tr>' . "\n";
263
 
76
  echo '<td>' . "\n";
77
  echo '<label for="ws-plugin--s2member-profile-login">' . "\n";
78
  echo '<strong>' . _x ("Username", "s2member-front", "s2member") . ' *</strong> <small>' . _x ("(cannot be changed)", "s2member-front", "s2member") . '</small><br />' . "\n";
79
+ echo '<input type="text" aria-required="true" maxlength="60" autocomplete="off" name="ws_plugin__s2member_profile_login" id="ws-plugin--s2member-profile-login" class="ws-plugin--s2member-profile-field form-control" value="' . format_to_edit ($user->user_login) . '" disabled="disabled" />' . "\n";
80
  echo '</label>' . "\n";
81
  echo '</td>' . "\n";
82
  echo '</tr>' . "\n";
96
  echo '<td>' . "\n";
97
  echo '<label for="ws-plugin--s2member-profile-email">' . "\n";
98
  echo '<strong>' . _x ("Email Address", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
99
+ echo '<input type="email" aria-required="true" data-expected="email" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_email" id="ws-plugin--s2member-profile-email" class="ws-plugin--s2member-profile-field form-control" value="' . format_to_edit ($user->user_email) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
100
  echo '</label>' . "\n";
101
  echo '</td>' . "\n";
102
  echo '</tr>' . "\n";
118
  echo '<td>' . "\n";
119
  echo '<label for="ws-plugin--s2member-profile-first-name">' . "\n";
120
  echo '<strong>' . _x ("First Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
121
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_first_name" id="ws-plugin--s2member-profile-first-name" class="ws-plugin--s2member-profile-field form-control" value="' . esc_attr ($user->first_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
122
  echo '</label>' . "\n";
123
  echo '</td>' . "\n";
124
  echo '</tr>' . "\n";
138
  echo '<td>' . "\n";
139
  echo '<label for="ws-plugin--s2member-profile-last-name">' . "\n";
140
  echo '<strong>' . _x ("Last Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
141
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_last_name" id="ws-plugin--s2member-profile-last-name" class="ws-plugin--s2member-profile-field form-control" value="' . esc_attr ($user->last_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
142
  echo '</label>' . "\n";
143
  echo '</td>' . "\n";
144
  echo '</tr>' . "\n";
158
  echo '<td>' . "\n";
159
  echo '<label for="ws-plugin--s2member-profile-display-name">' . "\n";
160
  echo '<strong>' . _x ("Display Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
161
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_display_name" id="ws-plugin--s2member-profile-display-name" class="ws-plugin--s2member-profile-field form-control" value="' . esc_attr ($user->display_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
162
  echo '</label>' . "\n";
163
  echo '</td>' . "\n";
164
  echo '</tr>' . "\n";
233
  echo '<label for="ws-plugin--s2member-profile-password1" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
234
  echo '<strong>' . _x ("New Password?", "s2member-front", "s2member") . '</strong> <em>' . _x ("(please type it twice)", "s2member-front", "s2member") . '</em><br />' . "\n";
235
  echo '<em>' . _x ("Only if changing password, otherwise leave blank.", "s2member-front", "s2member") . '</em><br />' . "\n";
236
+ echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password1" id="ws-plugin--s2member-profile-password1" class="ws-plugin--s2member-profile-field form-control" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
237
  echo '</label>' . "\n";
238
 
239
  echo '<label for="ws-plugin--s2member-profile-password2" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
240
+ echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password2" id="ws-plugin--s2member-profile-password2" class="ws-plugin--s2member-profile-field form-control" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
241
  echo '</label>' . "\n";
242
 
243
  echo '<div id="ws-plugin--s2member-profile-password-strength" class="ws-plugin--s2member-password-strength"><em>' . _x ("password strength indicator", "s2member-front", "s2member") . '</em></div>' . "\n";
257
  echo '<tr>' . "\n";
258
  echo '<td>' . "\n";
259
  echo '<input type="hidden" name="ws_plugin__s2member_profile_save" id="ws-plugin--s2member-profile-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-profile-save")) . '" />' . "\n";
260
+ echo '<input type="submit" id="ws-plugin--s2member-profile-submit" class="btn btn-primary" value="' . esc_attr (_x ("Save All Changes", "s2member-front", "s2member")) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
261
  echo '</td>' . "\n";
262
  echo '</tr>' . "\n";
263
 
includes/classes/sc-paypal-button-in.inc.php CHANGED
@@ -59,6 +59,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
59
  $attr["rt"] = /* Term lengths absolutely must be provided in upper-case format. Only after running shortcode_atts(). */ strtoupper ($attr["rt"]);
60
  $attr["rr"] = /* Must be provided in upper-case format. Numerical, or BN value. Only after running shortcode_atts(). */ strtoupper ($attr["rr"]);
61
  $attr["ccaps"] = /* Custom Capabilities must be typed in lower-case format. Only after running shortcode_atts(). */ strtolower ($attr["ccaps"]);
 
62
  $attr["rr"] = /* Lifetime Subscriptions require Buy Now. Only after running shortcode_atts(). */ ($attr["rt"] === "L") ? "BN" : $attr["rr"];
63
  $attr["rr"] = /* Independent Ccaps require Buy Now. Only after running shortcode_atts(). */ ($attr["level"] === "*") ? "BN" : $attr["rr"];
64
  $attr["ns"] = /* No shipping directive must be 1 for digital items. After shortcode_atts(). */ ($attr["dg"] === "1") ? "1" : $attr["ns"];
59
  $attr["rt"] = /* Term lengths absolutely must be provided in upper-case format. Only after running shortcode_atts(). */ strtoupper ($attr["rt"]);
60
  $attr["rr"] = /* Must be provided in upper-case format. Numerical, or BN value. Only after running shortcode_atts(). */ strtoupper ($attr["rr"]);
61
  $attr["ccaps"] = /* Custom Capabilities must be typed in lower-case format. Only after running shortcode_atts(). */ strtolower ($attr["ccaps"]);
62
+ $attr["ccaps"] = /* Custom Capabilities should not have spaces. */ str_replace(" ", "", $attr["ccaps"]);
63
  $attr["rr"] = /* Lifetime Subscriptions require Buy Now. Only after running shortcode_atts(). */ ($attr["rt"] === "L") ? "BN" : $attr["rr"];
64
  $attr["rr"] = /* Independent Ccaps require Buy Now. Only after running shortcode_atts(). */ ($attr["level"] === "*") ? "BN" : $attr["rr"];
65
  $attr["ns"] = /* No shipping directive must be 1 for digital items. After shortcode_atts(). */ ($attr["dg"] === "1") ? "1" : $attr["ns"];
includes/classes/sc-profile-in.inc.php CHANGED
@@ -64,9 +64,9 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
64
 
65
  echo '<form method="post" name="ws_plugin__s2member_profile" id="ws-plugin--s2member-profile">' . "\n";
66
 
67
- if ($GLOBALS["ws_plugin__s2member_profile_saved"]) // Respond to successful updates.
68
  {
69
- echo '<div id="ws-plugin--s2member-profile-saved">' . "\n";
70
  echo _x ("Profile updated successfully.", "s2member-front", "s2member") . "\n";
71
  echo '</div>' . "\n";
72
  }
@@ -92,7 +92,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
92
  echo '<td>' . "\n";
93
  echo '<label for="ws-plugin--s2member-profile-login">' . "\n";
94
  echo '<strong>' . _x ("Username", "s2member-front", "s2member") . ' *</strong> <small>' . _x ("(cannot be changed)", "s2member-front", "s2member") . '</small><br />' . "\n";
95
- echo '<input type="text" aria-required="true" maxlength="60" autocomplete="off" name="ws_plugin__s2member_profile_login" id="ws-plugin--s2member-profile-login" class="ws-plugin--s2member-profile-field" value="' . format_to_edit ($user->user_login) . '" disabled="disabled" />' . "\n";
96
  echo '</label>' . "\n";
97
  echo '</td>' . "\n";
98
  echo '</tr>' . "\n";
@@ -112,7 +112,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
112
  echo '<td>' . "\n";
113
  echo '<label for="ws-plugin--s2member-profile-email">' . "\n";
114
  echo '<strong>' . _x ("Email Address", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
115
- echo '<input type="text" aria-required="true" data-expected="email" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_email" id="ws-plugin--s2member-profile-email" class="ws-plugin--s2member-profile-field" value="' . format_to_edit ($user->user_email) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
116
  echo '</label>' . "\n";
117
  echo '</td>' . "\n";
118
  echo '</tr>' . "\n";
@@ -134,7 +134,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
134
  echo '<td>' . "\n";
135
  echo '<label for="ws-plugin--s2member-profile-first-name">' . "\n";
136
  echo '<strong>' . _x ("First Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
137
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_first_name" id="ws-plugin--s2member-profile-first-name" class="ws-plugin--s2member-profile-field" value="' . esc_attr ($user->first_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
138
  echo '</label>' . "\n";
139
  echo '</td>' . "\n";
140
  echo '</tr>' . "\n";
@@ -154,7 +154,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
154
  echo '<td>' . "\n";
155
  echo '<label for="ws-plugin--s2member-profile-last-name">' . "\n";
156
  echo '<strong>' . _x ("Last Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
157
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_last_name" id="ws-plugin--s2member-profile-last-name" class="ws-plugin--s2member-profile-field" value="' . esc_attr ($user->last_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
158
  echo '</label>' . "\n";
159
  echo '</td>' . "\n";
160
  echo '</tr>' . "\n";
@@ -174,7 +174,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
174
  echo '<td>' . "\n";
175
  echo '<label for="ws-plugin--s2member-profile-display-name">' . "\n";
176
  echo '<strong>' . _x ("Display Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
177
- echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_display_name" id="ws-plugin--s2member-profile-display-name" class="ws-plugin--s2member-profile-field" value="' . esc_attr ($user->display_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
178
  echo '</label>' . "\n";
179
  echo '</td>' . "\n";
180
  echo '</tr>' . "\n";
@@ -249,11 +249,11 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
249
  echo '<label for="ws-plugin--s2member-profile-password1" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
250
  echo '<strong>' . _x ("New Password?", "s2member-front", "s2member") . '</strong> <em>' . _x ("(please type it twice)", "s2member-front", "s2member") . '</em><br />' . "\n";
251
  echo '<em>' . _x ("Only if changing password, otherwise leave blank.", "s2member-front", "s2member") . '</em><br />' . "\n";
252
- echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password1" id="ws-plugin--s2member-profile-password1" class="ws-plugin--s2member-profile-field" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
253
  echo '</label>' . "\n";
254
 
255
  echo '<label for="ws-plugin--s2member-profile-password2" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
256
- echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password2" id="ws-plugin--s2member-profile-password2" class="ws-plugin--s2member-profile-field" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
257
  echo '</label>' . "\n";
258
 
259
  echo '<div id="ws-plugin--s2member-profile-password-strength" class="ws-plugin--s2member-password-strength"><em>' . _x ("password strength indicator", "s2member-front", "s2member") . '</em></div>' . "\n";
@@ -274,7 +274,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_profile_in"))
274
  echo '<td>' . "\n";
275
  echo '<input type="hidden" name="ws_plugin__s2member_sc_profile_save" id="ws-plugin--s2member-sc-profile-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-sc-profile-save")) . '" />' . "\n";
276
  echo '<input type="hidden" name="ws_plugin__s2member_profile_save" id="ws-plugin--s2member-profile-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-profile-save")) . '" />' . "\n";
277
- echo '<input type="submit" id="ws-plugin--s2member-profile-submit" value="' . esc_attr (_x ("Save All Changes", "s2member-front", "s2member")) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
278
  echo '</td>' . "\n";
279
  echo '</tr>' . "\n";
280
 
64
 
65
  echo '<form method="post" name="ws_plugin__s2member_profile" id="ws-plugin--s2member-profile">' . "\n";
66
 
67
+ if (!empty($GLOBALS["ws_plugin__s2member_profile_saved"])) // Respond to successful updates.
68
  {
69
+ echo '<div id="ws-plugin--s2member-profile-saved" class="alert alert-success">' . "\n";
70
  echo _x ("Profile updated successfully.", "s2member-front", "s2member") . "\n";
71
  echo '</div>' . "\n";
72
  }
92
  echo '<td>' . "\n";
93
  echo '<label for="ws-plugin--s2member-profile-login">' . "\n";
94
  echo '<strong>' . _x ("Username", "s2member-front", "s2member") . ' *</strong> <small>' . _x ("(cannot be changed)", "s2member-front", "s2member") . '</small><br />' . "\n";
95
+ echo '<input type="text" aria-required="true" maxlength="60" autocomplete="off" name="ws_plugin__s2member_profile_login" id="ws-plugin--s2member-profile-login" class="ws-plugin--s2member-profile-field form-control" value="' . format_to_edit ($user->user_login) . '" disabled="disabled" />' . "\n";
96
  echo '</label>' . "\n";
97
  echo '</td>' . "\n";
98
  echo '</tr>' . "\n";
112
  echo '<td>' . "\n";
113
  echo '<label for="ws-plugin--s2member-profile-email">' . "\n";
114
  echo '<strong>' . _x ("Email Address", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
115
+ echo '<input type="email" aria-required="true" data-expected="email" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_email" id="ws-plugin--s2member-profile-email" class="ws-plugin--s2member-profile-field form-control" value="' . format_to_edit ($user->user_email) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
116
  echo '</label>' . "\n";
117
  echo '</td>' . "\n";
118
  echo '</tr>' . "\n";
134
  echo '<td>' . "\n";
135
  echo '<label for="ws-plugin--s2member-profile-first-name">' . "\n";
136
  echo '<strong>' . _x ("First Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
137
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_first_name" id="ws-plugin--s2member-profile-first-name" class="ws-plugin--s2member-profile-field form-control" value="' . esc_attr ($user->first_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
138
  echo '</label>' . "\n";
139
  echo '</td>' . "\n";
140
  echo '</tr>' . "\n";
154
  echo '<td>' . "\n";
155
  echo '<label for="ws-plugin--s2member-profile-last-name">' . "\n";
156
  echo '<strong>' . _x ("Last Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
157
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_last_name" id="ws-plugin--s2member-profile-last-name" class="ws-plugin--s2member-profile-field form-control" value="' . esc_attr ($user->last_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
158
  echo '</label>' . "\n";
159
  echo '</td>' . "\n";
160
  echo '</tr>' . "\n";
174
  echo '<td>' . "\n";
175
  echo '<label for="ws-plugin--s2member-profile-display-name">' . "\n";
176
  echo '<strong>' . _x ("Display Name", "s2member-front", "s2member") . ' *</strong><br />' . "\n";
177
+ echo '<input type="text" aria-required="true" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_display_name" id="ws-plugin--s2member-profile-display-name" class="ws-plugin--s2member-profile-field form-control" value="' . esc_attr ($user->display_name) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
178
  echo '</label>' . "\n";
179
  echo '</td>' . "\n";
180
  echo '</tr>' . "\n";
249
  echo '<label for="ws-plugin--s2member-profile-password1" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
250
  echo '<strong>' . _x ("New Password?", "s2member-front", "s2member") . '</strong> <em>' . _x ("(please type it twice)", "s2member-front", "s2member") . '</em><br />' . "\n";
251
  echo '<em>' . _x ("Only if changing password, otherwise leave blank.", "s2member-front", "s2member") . '</em><br />' . "\n";
252
+ echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password1" id="ws-plugin--s2member-profile-password1" class="ws-plugin--s2member-profile-field form-control" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
253
  echo '</label>' . "\n";
254
 
255
  echo '<label for="ws-plugin--s2member-profile-password2" title="' . esc_attr (_x ("Please type your Password twice to confirm.", "s2member-front", "s2member")) . '">' . "\n";
256
+ echo '<input type="password" maxlength="100" autocomplete="off" name="ws_plugin__s2member_profile_password2" id="ws-plugin--s2member-profile-password2" class="ws-plugin--s2member-profile-field form-control" value="" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '"' . (($user->user_login === "demo") ? ' disabled="disabled"' : '') . ' />' . "\n";
257
  echo '</label>' . "\n";
258
 
259
  echo '<div id="ws-plugin--s2member-profile-password-strength" class="ws-plugin--s2member-password-strength"><em>' . _x ("password strength indicator", "s2member-front", "s2member") . '</em></div>' . "\n";
274
  echo '<td>' . "\n";
275
  echo '<input type="hidden" name="ws_plugin__s2member_sc_profile_save" id="ws-plugin--s2member-sc-profile-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-sc-profile-save")) . '" />' . "\n";
276
  echo '<input type="hidden" name="ws_plugin__s2member_profile_save" id="ws-plugin--s2member-profile-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-profile-save")) . '" />' . "\n";
277
+ echo '<input type="submit" id="ws-plugin--s2member-profile-submit" class="btn btn-primary" value="' . esc_attr (_x ("Save All Changes", "s2member-front", "s2member")) . '" tabindex="' . esc_attr (($tabindex = $tabindex + 10)) . '" />' . "\n";
278
  echo '</td>' . "\n";
279
  echo '</tr>' . "\n";
280
 
includes/classes/sp-access.inc.php CHANGED
@@ -124,7 +124,7 @@ if (!class_exists ("c_ws_plugin__s2member_sp_access"))
124
  }
125
  }
126
  // Otherwise, authentication was NOT possible via link or session.
127
- if (!$read_only && /* A Specific Post/Page Link? */ !empty ($_g["s2member_sp_access"]))
128
  {
129
  status_header (503);
130
  header ("Content-Type: text/html; charset=UTF-8");
124
  }
125
  }
126
  // Otherwise, authentication was NOT possible via link or session.
127
+ if (!$read_only && /* A Specific Post/Page Access Link? */ !empty ($_g["s2member_sp_access"]))
128
  {
129
  status_header (503);
130
  header ("Content-Type: text/html; charset=UTF-8");
includes/classes/ssl-in.inc.php CHANGED
@@ -120,6 +120,8 @@ if(!class_exists("c_ws_plugin__s2member_ssl_in"))
120
  {
121
  function _ws_plugin__s2member_force_non_ssl_scheme($url = FALSE, $path = FALSE, $scheme = FALSE)
122
  {
 
 
123
  if(!in_array /* If NOT explicitly passed through. */($scheme, array("http", "https"), true))
124
  {
125
  if(($scheme === "login_post" || $scheme === "rpc") && (force_ssl_login() || force_ssl_admin()))
120
  {
121
  function _ws_plugin__s2member_force_non_ssl_scheme($url = FALSE, $path = FALSE, $scheme = FALSE)
122
  {
123
+ if($scheme === "relative") return $url; // Nothing to do in this case.
124
+
125
  if(!in_array /* If NOT explicitly passed through. */($scheme, array("http", "https"), true))
126
  {
127
  if(($scheme === "login_post" || $scheme === "rpc") && (force_ssl_login() || force_ssl_admin()))
includes/classes/user-new-in.inc.php CHANGED
@@ -95,7 +95,7 @@ if (!class_exists ("c_ws_plugin__s2member_user_new_in"))
95
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
96
 
97
  $unfs .= '<tr>' . "\n";
98
- $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank Receipt #, a Google TID/SID (with an s2 prefix), an AliPay Trade No. ). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
99
  $unfs .= '<td><select name="ws_plugin__s2member_user_new_s2member_subscr_gateway" id="ws-plugin--s2member-user-new-s2member-subscr-gateway" style="width:25em;"><option value=""></option>' . "\n";
100
  foreach (apply_filters ("ws_plugin__s2member_profile_s2member_subscr_gateways", array ("paypal" => "PayPal (code: paypal)"), get_defined_vars ()) as $gateway => $gateway_name)
101
  $unfs .= '<option value="' . esc_attr ($gateway) . '"' . (($gateway === $_p["ws_plugin__s2member_user_new_s2member_subscr_gateway"]) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
@@ -112,7 +112,7 @@ if (!class_exists ("c_ws_plugin__s2member_user_new_in"))
112
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
113
 
114
  $unfs .= '<tr>' . "\n";
115
- $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-id">Paid Subscr. ID:</label> <a href="#" onclick="alert(\'A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank Receipt #, a Google TID/SID (with an s2 prefix), an AliPay Trade No. ). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... if there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
116
  $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_subscr_id" id="ws-plugin--s2member-user-new-s2member-subscr-id" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_subscr_id"]) . '" class="regular-text" /></td>' . "\n";
117
  $unfs .= '</tr>' . "\n";
118
 
95
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
96
 
97
  $unfs .= '<tr>' . "\n";
98
+ $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as (a Recurring Profile ID, a ClickBank Receipt #, a Google Order ID, an AliPay Trade No.). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Wallet, use the Google Order ID. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
99
  $unfs .= '<td><select name="ws_plugin__s2member_user_new_s2member_subscr_gateway" id="ws-plugin--s2member-user-new-s2member-subscr-gateway" style="width:25em;"><option value=""></option>' . "\n";
100
  foreach (apply_filters ("ws_plugin__s2member_profile_s2member_subscr_gateways", array ("paypal" => "PayPal (code: paypal)"), get_defined_vars ()) as $gateway => $gateway_name)
101
  $unfs .= '<option value="' . esc_attr ($gateway) . '"' . (($gateway === $_p["ws_plugin__s2member_user_new_s2member_subscr_gateway"]) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
112
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
113
 
114
  $unfs .= '<tr>' . "\n";
115
+ $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-id">Paid Subscr. ID:</label> <a href="#" onclick="alert(\'A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as (a Recurring Profile ID, a ClickBank Receipt #, a Google Order ID, an AliPay Trade No.). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Wallet, use the Google Order ID. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... if there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
116
  $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_subscr_id" id="ws-plugin--s2member-user-new-s2member-subscr-id" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_subscr_id"]) . '" class="regular-text" /></td>' . "\n";
117
  $unfs .= '</tr>' . "\n";
118
 
includes/classes/users-list-in.inc.php CHANGED
@@ -88,7 +88,7 @@ if(!class_exists("c_ws_plugin__s2member_users_list_in"))
88
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
89
 
90
  echo '<tr>'."\n";
91
- echo '<th><label for="ws-plugin--s2member-profile-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank Receipt #, a Google TID/SID (with an s2 prefix), an AliPay Trade No. ). This will be filled automatically by s2Member.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>'."\n";
92
  echo '<td><select name="ws_plugin__s2member_profile_s2member_subscr_gateway" id="ws-plugin--s2member-profile-s2member-subscr-gateway" style="width:25em;"><option value=""></option>'."\n";
93
  foreach(apply_filters("ws_plugin__s2member_profile_s2member_subscr_gateways", array("paypal" => "PayPal (code: paypal)"), get_defined_vars()) as $gateway => $gateway_name)
94
  echo '<option value="'.esc_attr($gateway).'"'.(($gateway === get_user_option("s2member_subscr_gateway", $user_id)) ? ' selected="selected"' : '').'>'.esc_html($gateway_name).'</option>'."\n";
@@ -105,7 +105,7 @@ if(!class_exists("c_ws_plugin__s2member_users_list_in"))
105
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
106
 
107
  echo '<tr>'."\n";
108
- echo '<th><label for="ws-plugin--s2member-profile-s2member-subscr-id">Paid Subscr. ID:</label> <a href="#" onclick="alert(\'A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank Receipt #, a Google TID/SID (with an s2 prefix), an AliPay Trade No. ). This will be filled automatically by s2Member.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>'."\n";
109
  echo '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_profile_s2member_subscr_id" id="ws-plugin--s2member-profile-s2member-subscr-id" value="'.format_to_edit(get_user_option("s2member_subscr_id", $user_id)).'" class="regular-text" /></td>'."\n";
110
  echo '</tr>'."\n";
111
 
88
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
89
 
90
  echo '<tr>'."\n";
91
+ echo '<th><label for="ws-plugin--s2member-profile-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as (a Recurring Profile ID, a ClickBank Receipt #, a Google Order ID, an AliPay Trade No.). This will be filled automatically by s2Member.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Wallet, use the Google Order ID. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>'."\n";
92
  echo '<td><select name="ws_plugin__s2member_profile_s2member_subscr_gateway" id="ws-plugin--s2member-profile-s2member-subscr-gateway" style="width:25em;"><option value=""></option>'."\n";
93
  foreach(apply_filters("ws_plugin__s2member_profile_s2member_subscr_gateways", array("paypal" => "PayPal (code: paypal)"), get_defined_vars()) as $gateway => $gateway_name)
94
  echo '<option value="'.esc_attr($gateway).'"'.(($gateway === get_user_option("s2member_subscr_gateway", $user_id)) ? ' selected="selected"' : '').'>'.esc_html($gateway_name).'</option>'."\n";
105
  unset /* Unset defined __refs, __v. */ ($__refs, $__v);
106
 
107
  echo '<tr>'."\n";
108
+ echo '<th><label for="ws-plugin--s2member-profile-s2member-subscr-id">Paid Subscr. ID:</label> <a href="#" onclick="alert(\'A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as (a Recurring Profile ID, a ClickBank Receipt #, a Google Order ID, an AliPay Trade No.). This will be filled automatically by s2Member.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Wallet, use the Google Order ID. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>'."\n";
109
  echo '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_profile_s2member_subscr_id" id="ws-plugin--s2member-profile-s2member-subscr-id" value="'.format_to_edit(get_user_option("s2member_subscr_id", $user_id)).'" class="regular-text" /></td>'."\n";
110
  echo '</tr>'."\n";
111
 
includes/classes/utils-logs.inc.php CHANGED
@@ -52,7 +52,8 @@ if (!class_exists ("c_ws_plugin__s2member_utils_logs"))
52
  '/clickbank-ipn/' => array('short' => 'ClickBank IPN communication.', 'long' => 'This log file records the IPN data ClickBank sends to s2Member with details regarding new transactions, cancellations, expirations, etc. See also: paypal-ipn.log (s2Member\'s core processor).'),
53
  '/clickbank-rtn/' => array('short' => 'ClickBank Auto-Return communication.', 'long' => 'This log file records the Auto-Return data ClickBank sends to s2Member with details regarding new transactions (i.e. logs routines that help s2Member process Thank-You pages). See also: paypal-rtn.log (s2Member\'s core processor).'),
54
 
55
- '/google-ipn/' => array('short' => 'Google Callback/IPN communication.', 'long' => 'This log file records the Callback/IPN data Google sends to s2Member with details regarding new transactions, cancellations, expirations, etc. See also: paypal-ipn.log (s2Member\'s core processor).'),
 
56
 
57
  '/ccbill-ipn/' => array('short' => 'ccBill Bg Post/IPN communication.', 'long' => 'This log file records the Bg Post/IPN data ccBill sends to s2Member with details regarding new transactions. See also: paypal-ipn.log (s2Member\'s core processor).'),
58
  '/ccbill-rtn/' => array('short' => 'ccBill Auto-Return communication.', 'long' => 'This log file records the Auto-Return data ccBill sends to s2Member with details regarding new transactions (i.e. logs routines that help s2Member process Thank-You pages). See also: paypal-rtn.log (s2Member\'s core processor).'),
52
  '/clickbank-ipn/' => array('short' => 'ClickBank IPN communication.', 'long' => 'This log file records the IPN data ClickBank sends to s2Member with details regarding new transactions, cancellations, expirations, etc. See also: paypal-ipn.log (s2Member\'s core processor).'),
53
  '/clickbank-rtn/' => array('short' => 'ClickBank Auto-Return communication.', 'long' => 'This log file records the Auto-Return data ClickBank sends to s2Member with details regarding new transactions (i.e. logs routines that help s2Member process Thank-You pages). See also: paypal-rtn.log (s2Member\'s core processor).'),
54
 
55
+ '/google-rtn/' => array('short' => 'Google Auto-Return communication.', 'long' => 'This log file records the Auto-Return data Google sends to s2Member with details regarding new transactions (i.e. logs routines that help s2Member process Thank-You pages). See also: paypal-rtn.log (s2Member\'s core processor). NOTE (regarding Google Wallet)... this particular log file is currently implemented for a possible future use ONLY. At this time there is no need for an Auto-Return handler with Google Wallet, because Google Wallet return handling is done via email-only at this time.'),
56
+ '/google-ipn/' => array('short' => 'Google Postback/IPN communication.', 'long' => 'This log file records the Postback/IPN data Google sends to s2Member with details regarding new transactions, cancellations, expirations, etc. See also: paypal-ipn.log (s2Member\'s core processor).'),
57
 
58
  '/ccbill-ipn/' => array('short' => 'ccBill Bg Post/IPN communication.', 'long' => 'This log file records the Bg Post/IPN data ccBill sends to s2Member with details regarding new transactions. See also: paypal-ipn.log (s2Member\'s core processor).'),
59
  '/ccbill-rtn/' => array('short' => 'ccBill Auto-Return communication.', 'long' => 'This log file records the Auto-Return data ccBill sends to s2Member with details regarding new transactions (i.e. logs routines that help s2Member process Thank-You pages). See also: paypal-rtn.log (s2Member\'s core processor).'),
includes/dropins/bridges/index.php DELETED
File without changes
includes/dropins/index.php DELETED
File without changes
includes/dropins/mu-plugins/index.php DELETED
File without changes
includes/externals/index.php DELETED
File without changes
includes/externals/mailchimp/index.php DELETED
File without changes
includes/externals/markdown/index.php DELETED
File without changes
includes/functions/index.php DELETED
File without changes
includes/functions/separates/index.php DELETED
File without changes
includes/index.php DELETED
File without changes
includes/jquery/index.php DELETED
File without changes
includes/jquery/jquery.json-ps/index.php DELETED
File without changes
includes/jquery/jquery.sprintf/index.php DELETED
File without changes
includes/jquery/jquery.ui-effects/index.php DELETED
File without changes
includes/menu-pages/api-ops.inc.php CHANGED
@@ -403,7 +403,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
403
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
404
  echo '<ul>' . "\n";
405
  echo '<li><code>%%subscr_id%%</code> = The Paid Subscription ID, which remains constant throughout any &amp; 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. Payment Gateways do not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; 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";
406
- 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. Even if that amount is 0.\\n\\nIf a Customer signs up, under the terms of a 100% Free Trial Period, this will be 0. So be careful using %%initial%% when you offer a 100% Free Trial Period, because a $0.00 sale amount could cause havoc with affiliate programs.\\n\\nIf you\\\'re offering a 100% Free Trial Period, and you need to track sales through affiliate programs, you can either hard-code an amount; or use `Payment Notifications` instead.\'); return false;">?</a> ]</li>' . "\n";
407
  echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. If you offer something 100% free, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an Initial Period expires. 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";
408
  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%% &amp; %%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";
409
  echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
403
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
404
  echo '<ul>' . "\n";
405
  echo '<li><code>%%subscr_id%%</code> = The Paid Subscription ID, which remains constant throughout any &amp; 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. Payment Gateways do not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; 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";
406
+ echo '<li><code>%%initial%%</code> = The Initial Fee. 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 when they completed checkout, no matter what. Even if that amount is 0.\\n\\nIf a Customer upgrades/downgrades under the terms of a 100% Free Trial Period, this will be 0. So, please be careful using %%initial%% when you offer a 100% Free Trial Period, because a $0.00 sale amount could cause havoc with affiliate programs.\\n\\nIf you\\\'re offering a 100% Free Trial Period, and you need to track sales through affiliate programs, you can either hard-code an amount; or use `Payment Notifications` instead.\'); return false;">?</a> ]</li>' . "\n";
407
  echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. If you offer something 100% free, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an Initial Period expires. 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";
408
  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%% &amp; %%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";
409
  echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
includes/menu-pages/code-samples/index.php DELETED
File without changes
includes/menu-pages/gen-ops.inc.php CHANGED
@@ -139,7 +139,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
139
  echo '<div class="ws-menu-page-group" title="Localhost WAMP/MAMP Developers">' . "\n";
140
 
141
  echo '<div class="ws-menu-page-section ws-plugin--s2member-localhost-info-section">' . "\n";
142
- echo '<h3>Localhost WAMP/MAMP Installs ( are you a developer? )</h3>' . "\n";
143
  echo '<p>If you\'re developing your site in a <code>localhost</code> environment, running something like WAMP/MAMP, or <a href="http://www.easyphp.org/" target="_blank" rel="external">EasyPHP</a>, please add this line to your <code>/wp-config.php</code> file: <code><span style="color:#0000BB;">define</span><span style="color:#007700;">(</span><span style="color:#DD0000;">"LOCALHOST"</span>, <span style="color:#0000BB;">true</span><span style="color:#007700;">);</span></code>.</p>' . "\n";
144
  echo '<p>This lets s2Member know definitively that your site is in a <code>localhost</code> environment. s2Member will adjust itself accordingly, maximizing functionality during your developement. s2Member can usually auto-detect this, but in cases where your <code>localhost</code> installation runs on something other than <code>127.0.0.1/localhost</code>, you need to tell s2Member definitively, by adding that line to your <code>/wp-config.php</code> file. For instance, s2Member needs to know when your server IP is the same as all User IPs.</p>' . "\n";
145
  echo '<p><em>Once your site goes live, please remove the line. If you\'re already on a live server connected to the web, please ignore this section.</em></p>' . "\n";
@@ -151,6 +151,49 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
151
  do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_localhost_info", get_defined_vars ());
152
  }
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_s_badge_wp_footer_code", true, get_defined_vars ()))
155
  {
156
  do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_s_badge_wp_footer_code", get_defined_vars ());
139
  echo '<div class="ws-menu-page-group" title="Localhost WAMP/MAMP Developers">' . "\n";
140
 
141
  echo '<div class="ws-menu-page-section ws-plugin--s2member-localhost-info-section">' . "\n";
142
+ echo '<h3>Localhost WAMP/MAMP Installs (are you a developer?)</h3>' . "\n";
143
  echo '<p>If you\'re developing your site in a <code>localhost</code> environment, running something like WAMP/MAMP, or <a href="http://www.easyphp.org/" target="_blank" rel="external">EasyPHP</a>, please add this line to your <code>/wp-config.php</code> file: <code><span style="color:#0000BB;">define</span><span style="color:#007700;">(</span><span style="color:#DD0000;">"LOCALHOST"</span>, <span style="color:#0000BB;">true</span><span style="color:#007700;">);</span></code>.</p>' . "\n";
144
  echo '<p>This lets s2Member know definitively that your site is in a <code>localhost</code> environment. s2Member will adjust itself accordingly, maximizing functionality during your developement. s2Member can usually auto-detect this, but in cases where your <code>localhost</code> installation runs on something other than <code>127.0.0.1/localhost</code>, you need to tell s2Member definitively, by adding that line to your <code>/wp-config.php</code> file. For instance, s2Member needs to know when your server IP is the same as all User IPs.</p>' . "\n";
145
  echo '<p><em>Once your site goes live, please remove the line. If you\'re already on a live server connected to the web, please ignore this section.</em></p>' . "\n";
151
  do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_localhost_info", get_defined_vars ());
152
  }
153
 
154
+ if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_lazy_load", (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site () || is_super_admin ()), get_defined_vars ()))
155
+ {
156
+ do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_lazy_load", get_defined_vars ());
157
+
158
+ echo '<div class="ws-menu-page-group" title="CSS/JS Lazy Loading">' . "\n";
159
+
160
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-lazy-load-section">' . "\n";
161
+ echo '<h3>CSS/JS Lazy Loading (Client-Side Libraries)</h3>' . "\n";
162
+ echo '<p>By default, s2Member will lazy-load any CSS/JS files it needs. However, if you would prefer to have these available on every page of your site, you can turn lazy-loading off here.</p>' . "\n";
163
+ echo '<p><em><strong>Tip:</strong> Do you need s2Member\'s CSS/JS on every page? Another option is to leave lazy-loading on. If you need s2Member\'s CSS/JS on a given Post/Page, you can insert an HTML comment into the Post/Page content like this: <code>&lt;!--s2member--&gt;</code>. If a Post/Page contains the word <code>s2member</code> or an <code>[s2*</code> Shortcode, this will automatically trigger s2Member\'s lazy-load routine (no matter what you configure here). Thus, it\'s an easy way to force s2Member to load it\'s CSS/JS on specific Posts/Pages where you deem this necessary. There is also a WordPress filter available: <code>add_filter("ws_plugin__s2member_lazy_load_css_js", "__return_true");</code> for developers; this could be incorporated into more dynamic scenarios.</em></p>' . "\n";
164
+ do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_lazy_load", get_defined_vars ());
165
+
166
+ echo '<table class="form-table">' . "\n";
167
+ echo '<tbody>' . "\n";
168
+ echo '<tr>' . "\n";
169
+
170
+ echo '<th>' . "\n";
171
+ echo '<label for="ws-plugin--s2member-lazy-load-css-js">' . "\n";
172
+ echo 'Lazy-Load s2Member\'s CSS/JS Libraries?' . "\n";
173
+ echo '</label>' . "\n";
174
+ echo '</th>' . "\n";
175
+
176
+ echo '</tr>' . "\n";
177
+ echo '<tr>' . "\n";
178
+
179
+ echo '<td>' . "\n";
180
+ echo '<select name="ws_plugin__s2member_lazy_load_css_js" id="ws-plugin--s2member-lazy-load-css-js">' . "\n";
181
+ echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["lazy_load_css_js"]) ? ' selected="selected"' : '') . '>No (always load the CSS/JS libraries; e.g. on every page of the site)</option>' . "\n";
182
+ echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["lazy_load_css_js"]) ? ' selected="selected"' : '') . '>Yes (lazy-load CSS/JS libraries; e.g. load only when necessary)</option>' . "\n";
183
+ echo '</select><br />' . "\n";
184
+ echo 'Recommended setting: (<code>Yes, lazy-load CSS/JS libraries</code>)' . "\n";
185
+ echo '</td>' . "\n";
186
+
187
+ echo '</tr>' . "\n";
188
+ echo '</tbody>' . "\n";
189
+ echo '</table>' . "\n";
190
+ echo '</div>' . "\n";
191
+
192
+ echo '</div>' . "\n";
193
+
194
+ do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_lazy_load", get_defined_vars ());
195
+ }
196
+
197
  if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_s_badge_wp_footer_code", true, get_defined_vars ()))
198
  {
199
  do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_s_badge_wp_footer_code", get_defined_vars ());
includes/menu-pages/index.php DELETED
File without changes
includes/menu-pages/menu-pages.css CHANGED
@@ -355,7 +355,7 @@ div.ws-menu-page .monospace
355
  }
356
  div.ws-menu-page textarea.monospace
357
  {
358
- white-space : nowrap;
359
  }
360
  div.ws-menu-page .clearfix:before,
361
  div.ws-menu-page .clearfix:after
355
  }
356
  div.ws-menu-page textarea.monospace
357
  {
358
+ white-space : pre;
359
  }
360
  div.ws-menu-page .clearfix:before,
361
  div.ws-menu-page .clearfix:after
includes/menu-pages/paypal-buttons.inc.php CHANGED
@@ -56,7 +56,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_buttons"))
56
  echo '<div class="ws-menu-page-section ws-plugin--s2member-level' . $n . '-buttons-section">' . "\n";
57
  echo '<h3>Button Code Generator For Level #' . $n . ' Access</h3>' . "\n";
58
  echo '<p>Very simple. All you do is customize the form fields provided, for each Membership Level that you plan to offer. Then press (Generate Button Code). These special PayPal Buttons are customized to work with s2Member seamlessly. Member accounts will be activated instantly, in an automated fashion. When you, or a Member, cancels their Membership, or fails to make payments on time, s2Member will automatically terminate their Membership privileges. s2Member makes extensive use of the PayPal IPN service. s2Member receives updates from PayPal behind-the-scene.</p>' . "\n";
59
- echo '<p><em>* Buttons are NOT saved here. This is only a Button Generator. Once you\'ve generated your Button, copy/paste it into your Membership Options Page. If you lose your Button Code, you\'ll need to come back &amp; re-generate a new one. If you\'re in Sandbox Test-Mode, and you\'re NOT using the Shortcode Format, please remember to come back and re-generate your Buttons before you go live.</em></p>' . "\n";
60
 
61
  if (($ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_levelN_buttons = "ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_level" . $n . "_buttons"))
62
  do_action ($ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_levelN_buttons, get_defined_vars ());
@@ -245,7 +245,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_buttons"))
245
  echo '<p>Independent Custom Capabilities are added to a Customer\'s account immediately after checkout, and the Customer will have the Custom Capabilities for as long as their Membership lasts, based on their primary Subscription with your site, and/or forever, if they have a Lifetime account with you. In other words, Independent Custom Capabilities will exist on the Customer\'s account forever, or until an EOT <em>(End Of Term)</em> occurs on their primary Subscription with you; in which case s2Member would demote or delete the Customer\'s account <em>(based on your EOT configuration)</em>, and all Custom Capabilities are removed as well.</p>' . "\n";
246
  echo '<p>Very simple. All you do is customize the form fields provided, for each set of Custom Capabilities that you plan to sell. Then press (Generate Button Code). These special PayPal Buttons are customized to work with s2Member seamlessly. The Customer will be granted additional access to one or more Custom Capabilities that you specify; while the Customer\'s Membership Level Access and any existing paid Subscription they may already have with you, will remain completely unaffected.</p>' . "\n";
247
  echo '<p><em><strong>*Important Note*</strong> Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button. Otherwise, post-processing of their transaction will fail to recognize the Customer\'s existing account within WordPress. Please display this Button only to Users/Members that are already logged into their account (perhaps in your Login Welcome Page for s2Member), or in another location where you can be absolutely sure that a User/Member is logged in. s2Member\'s Simple Conditionals could also be used to ensure a User/Member is logged in, by wrapping your Shortcode within a Conditional test. For further details, please see: <code>s2Member -› API Scripting -› Simple Conditionals</code>.</em></p>' . "\n";
248
- echo '<p><em>* Buttons are NOT saved here. This is only a Button Generator. Once you\'ve generated your Button, copy/paste it into your WordPress Editor. If you lose your Button Code, you\'ll need to come back &amp; re-generate a new one. If you\'re in Sandbox Test-Mode, and you\'re NOT using the Shortcode Format, please remember to come back and re-generate your Buttons before you go live.</em></p>' . "\n";
249
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_ccap_buttons", get_defined_vars ());
250
 
251
  echo '<table class="form-table">' . "\n";
@@ -392,7 +392,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_buttons"))
392
 
393
  echo '<div class="ws-menu-page-section ws-plugin--s2member-reg-links-section">' . "\n";
394
  echo '<h3>Registration Access Link Generator (for Customer Service)</h3>' . "\n";
395
- echo '<p>s2Member automatically generates Registration Access Links for your Customers after checkout, and also sends them a link in a Confirmation Email. However, if you ever need to deal with a Customer Service issue that requires a new Registration Access Link to be created manually, you can use this tool for that. Alternatively, you can create their account yourself/manually by going to <code>s2Member -› Add A Member</code>. Either of these methods will work fine.</p>' . "\n";
396
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_reg_links", get_defined_vars ());
397
 
398
  echo '<table class="form-table">' . "\n";
@@ -435,7 +435,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_buttons"))
435
  echo '<p>In other words, Customers will NOT need to login, just to receive access to the Specific Post/Page they purchased access to. s2Member will immediately redirect the Customer to the Specific Post/Page after checkout is completed successfully. An email is also sent to the Customer with a link (see: <code>s2Member -› PayPal Options -› Specific Post/Page Email</code>). Authentication is handled automatically through self-expiring links, good for 72 hours by default.</p>' . "\n";
436
  echo '<p>Specific Post/Page Access, is sort of like selling a product. Only, instead of shipping anything to the Customer, you just give them access to a specific Post/Page on your site; one that you created in WordPress. A Specific Post/Page that is protected by s2Member, might contain a download link for your eBook, access to file &amp; music downloads, access to additional support services, and the list goes on and on. The possibilities with this are endless; as long as your digital product can be delivered through access to a WordPress Post/Page that you\'ve created. To protect Specific Posts/Pages, please see: <code>s2Member -› Restriction Options -› Specific Post/Page Access</code>. Once you\'ve configured your Specific Post/Page Restrictions, those Posts/Pages will be available in the menus below.</p>' . "\n";
437
  echo '<p>Very simple. All you do is customize the form fields provided, for each Post/Page that you plan to sell. Then press (Generate Button Code). These special PayPal Buttons are customized to work with s2Member seamlessly. You can even Package Additional Posts/Pages together into one transaction.</p>' . "\n";
438
- echo '<p><em>* Buttons are NOT saved here. This is only a Button Generator. Once you\'ve generated your Button, copy/paste it into your WordPress Editor. If you lose your Button Code, you\'ll need to come back &amp; re-generate a new one. If you\'re in Sandbox Test-Mode, and you\'re NOT using the Shortcode Format, please remember to come back and re-generate your Buttons before you go live.</em></p>' . "\n";
439
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_sp_buttons", get_defined_vars ());
440
 
441
  echo '<table class="form-table">' . "\n";
@@ -524,8 +524,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_paypal_buttons"))
524
  echo '<div class="ws-menu-page-group" title="PayPal Specific Post/Page Access Links">' . "\n";
525
 
526
  echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-links-section">' . "\n";
527
- echo '<h3>Specific Post/Page Link Generator (for Customer Service)</h3>' . "\n";
528
- echo '<p>s2Member automatically generates Specific Post/Page Links for your Customers after checkout, and also sends them a link in a Confirmation Email. However, if you ever need to deal with a Customer Service issue that requires a new Specific Post/Page Link to be created manually, you can use this tool for that.</p>' . "\n";
529
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_sp_links", get_defined_vars ());
530
 
531
  echo '<table class="form-table">' . "\n";
56
  echo '<div class="ws-menu-page-section ws-plugin--s2member-level' . $n . '-buttons-section">' . "\n";
57
  echo '<h3>Button Code Generator For Level #' . $n . ' Access</h3>' . "\n";
58
  echo '<p>Very simple. All you do is customize the form fields provided, for each Membership Level that you plan to offer. Then press (Generate Button Code). These special PayPal Buttons are customized to work with s2Member seamlessly. Member accounts will be activated instantly, in an automated fashion. When you, or a Member, cancels their Membership, or fails to make payments on time, s2Member will automatically terminate their Membership privileges. s2Member makes extensive use of the PayPal IPN service. s2Member receives updates from PayPal behind-the-scene.</p>' . "\n";
59
+ echo '<p><em><strong>Please note:</strong> buttons are NOT saved here. This is only a Button Generator. Once you\'ve generated your Button, copy/paste it into your Membership Options Page. If you lose your Button Code, you\'ll need to come back &amp; re-generate a new one. If you\'re in Sandbox Test-Mode, and you\'re NOT using the Shortcode Format, please remember to come back and re-generate your Buttons before you go live.</em></p>' . "\n";
60
 
61
  if (($ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_levelN_buttons = "ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_level" . $n . "_buttons"))
62
  do_action ($ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_levelN_buttons, get_defined_vars ());
245
  echo '<p>Independent Custom Capabilities are added to a Customer\'s account immediately after checkout, and the Customer will have the Custom Capabilities for as long as their Membership lasts, based on their primary Subscription with your site, and/or forever, if they have a Lifetime account with you. In other words, Independent Custom Capabilities will exist on the Customer\'s account forever, or until an EOT <em>(End Of Term)</em> occurs on their primary Subscription with you; in which case s2Member would demote or delete the Customer\'s account <em>(based on your EOT configuration)</em>, and all Custom Capabilities are removed as well.</p>' . "\n";
246
  echo '<p>Very simple. All you do is customize the form fields provided, for each set of Custom Capabilities that you plan to sell. Then press (Generate Button Code). These special PayPal Buttons are customized to work with s2Member seamlessly. The Customer will be granted additional access to one or more Custom Capabilities that you specify; while the Customer\'s Membership Level Access and any existing paid Subscription they may already have with you, will remain completely unaffected.</p>' . "\n";
247
  echo '<p><em><strong>*Important Note*</strong> Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button. Otherwise, post-processing of their transaction will fail to recognize the Customer\'s existing account within WordPress. Please display this Button only to Users/Members that are already logged into their account (perhaps in your Login Welcome Page for s2Member), or in another location where you can be absolutely sure that a User/Member is logged in. s2Member\'s Simple Conditionals could also be used to ensure a User/Member is logged in, by wrapping your Shortcode within a Conditional test. For further details, please see: <code>s2Member -› API Scripting -› Simple Conditionals</code>.</em></p>' . "\n";
248
+ echo '<p><em><strong>Please note:</strong> buttons are NOT saved here. This is only a Button Generator. Once you\'ve generated your Button, copy/paste it into your WordPress Editor. If you lose your Button Code, you\'ll need to come back &amp; re-generate a new one. If you\'re in Sandbox Test-Mode, and you\'re NOT using the Shortcode Format, please remember to come back and re-generate your Buttons before you go live.</em></p>' . "\n";
249
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_ccap_buttons", get_defined_vars ());
250
 
251
  echo '<table class="form-table">' . "\n";
392
 
393
  echo '<div class="ws-menu-page-section ws-plugin--s2member-reg-links-section">' . "\n";
394
  echo '<h3>Registration Access Link Generator (for Customer Service)</h3>' . "\n";
395
+ echo '<p>s2Member automatically generates Registration Access Links for your Customers after checkout, and also sends them a link in a Confirmation Email. However, if you ever need to deal with a Customer Service issue that requires a new Registration Access Link to be created manually, you can use this tool for that. Alternatively, you can create their account yourself/manually by going to <code>Users -› Add New</code>. Either of these methods will work fine.</p>' . "\n";
396
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_reg_links", get_defined_vars ());
397
 
398
  echo '<table class="form-table">' . "\n";
435
  echo '<p>In other words, Customers will NOT need to login, just to receive access to the Specific Post/Page they purchased access to. s2Member will immediately redirect the Customer to the Specific Post/Page after checkout is completed successfully. An email is also sent to the Customer with a link (see: <code>s2Member -› PayPal Options -› Specific Post/Page Email</code>). Authentication is handled automatically through self-expiring links, good for 72 hours by default.</p>' . "\n";
436
  echo '<p>Specific Post/Page Access, is sort of like selling a product. Only, instead of shipping anything to the Customer, you just give them access to a specific Post/Page on your site; one that you created in WordPress. A Specific Post/Page that is protected by s2Member, might contain a download link for your eBook, access to file &amp; music downloads, access to additional support services, and the list goes on and on. The possibilities with this are endless; as long as your digital product can be delivered through access to a WordPress Post/Page that you\'ve created. To protect Specific Posts/Pages, please see: <code>s2Member -› Restriction Options -› Specific Post/Page Access</code>. Once you\'ve configured your Specific Post/Page Restrictions, those Posts/Pages will be available in the menus below.</p>' . "\n";
437
  echo '<p>Very simple. All you do is customize the form fields provided, for each Post/Page that you plan to sell. Then press (Generate Button Code). These special PayPal Buttons are customized to work with s2Member seamlessly. You can even Package Additional Posts/Pages together into one transaction.</p>' . "\n";
438
+ echo '<p><em><strong>Please note:</strong> buttons are NOT saved here. This is only a Button Generator. Once you\'ve generated your Button, copy/paste it into your WordPress Editor. If you lose your Button Code, you\'ll need to come back &amp; re-generate a new one. If you\'re in Sandbox Test-Mode, and you\'re NOT using the Shortcode Format, please remember to come back and re-generate your Buttons before you go live.</em></p>' . "\n";
439
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_sp_buttons", get_defined_vars ());
440
 
441
  echo '<table class="form-table">' . "\n";
524
  echo '<div class="ws-menu-page-group" title="PayPal Specific Post/Page Access Links">' . "\n";
525
 
526
  echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-links-section">' . "\n";
527
+ echo '<h3>Specific Post/Page Access Link Generator (for Customer Service)</h3>' . "\n";
528
+ echo '<p>s2Member automatically generates Specific Post/Page Access Links for your Customers after checkout, and also sends them a link in a Confirmation Email. However, if you ever need to deal with a Customer Service issue that requires a new Specific Post/Page Access Link to be created manually, you can use this tool for that.</p>' . "\n";
529
  do_action ("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_sp_links", get_defined_vars ());
530
 
531
  echo '<table class="form-table">' . "\n";
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -412,7 +412,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
412
 
413
  echo '<div class="ws-menu-page-section ws-plugin--s2member-signup-confirmation-email-section">'."\n";
414
  echo '<h3>Signup Confirmation Email (required, but the default works fine)</h3>'."\n";
415
- 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";
416
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_signup_confirmation_email", get_defined_vars());
417
 
418
  echo '<table class="form-table">'."\n";
@@ -512,6 +512,241 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
512
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_signup_confirmation_email", get_defined_vars());
513
  }
514
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_sp_confirmation_email", true, get_defined_vars()))
516
  {
517
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_sp_confirmation_email", get_defined_vars());
@@ -520,7 +755,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
520
 
521
  echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-confirmation-email-section">'."\n";
522
  echo '<h3>Specific Post/Page Confirmation Email (required, but the default works fine)</h3>'."\n";
523
- 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";
524
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_sp_confirmation_email", get_defined_vars());
525
 
526
  echo '<table class="form-table">'."\n";
@@ -579,7 +814,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
579
  echo '<li><code>%%sp_access_url%%</code> = The full URL (generated by s2Member) where the Customer can gain access.</li>'."\n";
580
  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";
581
  echo '<li><code>%%txn_id%%</code> = The PayPal Transaction ID. PayPal assigns a unique identifier for every purchase.</li>'."\n";
582
- 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";
583
  echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>'."\n";
584
  echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>'."\n";
585
  echo '<li><code>%%full_name%%</code> = The Full Name (First &amp; Last) of the Customer who purchased Specific Post/Page Access.</li>'."\n";
412
 
413
  echo '<div class="ws-menu-page-section ws-plugin--s2member-signup-confirmation-email-section">'."\n";
414
  echo '<h3>Signup Confirmation Email (required, but the default works fine)</h3>'."\n";
415
+ 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";
416
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_signup_confirmation_email", get_defined_vars());
417
 
418
  echo '<table class="form-table">'."\n";
512
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_signup_confirmation_email", get_defined_vars());
513
  }
514
 
515
+ if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_modification_confirmation_email", c_ws_plugin__s2member_utils_conds::pro_is_installed(), get_defined_vars()))
516
+ {
517
+ do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_modification_confirmation_email", get_defined_vars());
518
+
519
+ echo '<div class="ws-menu-page-group" title="Modification Confirmation Email '.((c_ws_plugin__s2member_utils_conds::pro_is_installed()) ? '(Standard/Pro Form)' : '(Standard)').'">'."\n";
520
+
521
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-modification-confirmation-email-section">'."\n";
522
+ echo '<h3>Modification Confirmation Email (required, but the default works fine)</h3>'."\n";
523
+ echo '<p>This email is sent to existing Users after they complete an upgrade/downgrade (if and when you make this possible). For instance, if a Free Subscriber upgrades to a paid Membership Level, s2Member considers this a Modification (NOT a Signup; a Signup is associated only with someone completely new). The <strong>primary</strong> purpose of this email is to provide the Customer with a confirmation that their account was updated. You may also customize this further by providing details that are specifically geared to your site.</p>'."\n";
524
+ do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_modification_confirmation_email", get_defined_vars());
525
+
526
+ echo '<table class="form-table">'."\n";
527
+ echo '<tbody>'."\n";
528
+ echo '<tr>'."\n";
529
+
530
+ echo '<th>'."\n";
531
+ echo '<label for="ws-plugin--s2member-modification-email-recipients">'."\n";
532
+ echo 'Modification Confirmation Recipients:'."\n";
533
+ echo '</label>'."\n";
534
+ echo '</th>'."\n";
535
+
536
+ echo '</tr>'."\n";
537
+ echo '<tr>'."\n";
538
+
539
+ echo '<td>'."\n";
540
+ echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_modification_email_recipients" id="ws-plugin--s2member-modification-email-recipients" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_recipients"]).'" /><br />'."\n";
541
+ echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />'."\n";
542
+ echo '<code>"%%full_name%%" &lt;%%payer_email%%&gt;; admin@example.com; "Webmaster" &lt;webmaster@example.com&gt;</code>'."\n";
543
+ echo '</td>'."\n";
544
+
545
+ echo '</tr>'."\n";
546
+ echo '<tr>'."\n";
547
+
548
+ echo '<th>'."\n";
549
+ echo '<label for="ws-plugin--s2member-modification-email-subject">'."\n";
550
+ echo 'Modification Confirmation Email Subject:'."\n";
551
+ echo '</label>'."\n";
552
+ echo '</th>'."\n";
553
+
554
+ echo '</tr>'."\n";
555
+ echo '<tr>'."\n";
556
+
557
+ echo '<td>'."\n";
558
+ echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_modification_email_subject" id="ws-plugin--s2member-modification-email-subject" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_subject"]).'" /><br />'."\n";
559
+ echo 'Subject Line used in the email sent to a Customer after a successful modification has occurred through PayPal.'."\n";
560
+ echo '</td>'."\n";
561
+
562
+ echo '</tr>'."\n";
563
+ echo '<tr>'."\n";
564
+
565
+ echo '<th>'."\n";
566
+ echo '<label for="ws-plugin--s2member-modification-email-message">'."\n";
567
+ echo 'Modification Confirmation Email Message:'."\n";
568
+ echo '</label>'."\n";
569
+ echo '</th>'."\n";
570
+
571
+ echo '</tr>'."\n";
572
+ echo '<tr>'."\n";
573
+
574
+ echo '<td>'."\n";
575
+ echo '<textarea name="ws_plugin__s2member_modification_email_message" id="ws-plugin--s2member-modification-email-message" rows="10">'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["modification_email_message"]).'</textarea><br />'."\n";
576
+ echo 'Message Body used in the email sent to a Customer after a successful modification has occurred through PayPal.<br /><br />'."\n";
577
+ echo '<strong>You can also use these special Replacement Codes if you need them:</strong>'."\n";
578
+ echo '<ul>'."\n";
579
+ echo '<li><code>%%subscr_id%%</code> = The PayPal Subscription ID, which remains constant throughout any &amp; 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 &amp; 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";
580
+ echo '<li><code>%%initial%%</code> = The Initial Fee. 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 when they completed checkout, no matter what. Even if that amount is 0. If a Customer upgrades/downgrades under the terms of a 100% Free Trial Period, this will be 0.\'); return false;">?</a> ]</li>'."\n";
581
+ echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. If you offer something 100% free, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an Initial Period expires. 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";
582
+ 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%% &amp; %%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";
583
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>'."\n";
584
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>'."\n";
585
+ echo '<li><code>%%full_name%%</code> = The Full Name (First &amp; Last) of the Customer who purchased the Membership Subscription.</li>'."\n";
586
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>'."\n";
587
+ 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";
588
+ 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";
589
+ 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";
590
+ 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";
591
+ 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";
592
+ 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";
593
+ 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";
594
+ echo '<li><code>%%user_first_name%%</code> = The First Name listed on their User account. This might be different than what is on file with PayPal.</li>' . "\n";
595
+ echo '<li><code>%%user_last_name%%</code> = The Last Name listed on their User account. This might be different than what is on file with PayPal.</li>' . "\n";
596
+ echo '<li><code>%%user_full_name%%</code> = The Full Name listed on their User account. This might be different than what is on file with PayPal.</li>' . "\n";
597
+ echo '<li><code>%%user_email%%</code> = The Email Address associated with their User account. This might be different than what is on file with PayPal.</li>' . "\n";
598
+ echo '<li><code>%%user_login%%</code> = The Username associated with their account. The Customer created this during registration.</li>' . "\n";
599
+ echo '<li><code>%%user_ip%%</code> = The Customer\'s original IP Address, during checkout/registration via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>' . "\n";
600
+ echo '<li><code>%%user_id%%</code> = A unique WordPress User ID that references this account in the WordPress database.</li>' . "\n";
601
+ echo '</ul>'."\n";
602
+
603
+ echo '<strong>Custom Registration/Profile Fields are also supported in this email:</strong>' . "\n";
604
+ echo '<ul>' . "\n";
605
+ echo '<li><code>%%date_of_birth%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>date_of_birth</code>.</li>' . "\n";
606
+ echo '<li><code>%%street_address%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>street_address</code>.</li>' . "\n";
607
+ echo '<li><code>%%country%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>country</code>.</li>' . "\n";
608
+ echo '<li><em><code>%%etc, etc...%%</code> <strong>see:</strong> s2Member -› General Options -› Registration/Profile Fields</em>.</li>' . "\n";
609
+ echo '</ul>' . "\n";
610
+
611
+ echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>'."\n";
612
+ echo '<ul>'."\n";
613
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>'."\n";
614
+ 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";
615
+ echo '</ul>'."\n";
616
+ echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />'."\n";
617
+ echo '<em>(The campaign (i.e. christmas-promo) could be referenced using <code>%%cv1%%</code>)</em><br />'."\n";
618
+ echo '<code>custom="'.esc_html($_SERVER["HTTP_HOST"]).'|christmas-promo"</code>'."\n";
619
+
620
+ echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ?
621
+ '<div class="ws-menu-page-hr"></div>' . "\n".
622
+ '<p style="margin:0;"><strong>PHP Code:</strong> It is also possible to use PHP tags — optional (for developers). If you use PHP tags, please run a test email with <code>&lt;?php print_r(get_defined_vars()); ?&gt;</code>. This will give you a full list of all PHP variables available to you in this email. The <code>$paypal</code> variable is the most important one. It contains all of the <code>$_POST</code> variables received from PayPal\'s IPN service — or from an s2Member Pro Form integration (e.g. <code>$paypal["item_number"]</code>, <code>$paypal["item_name"]</code>, etc). Please note that all Replacement Codes will be parsed first, and then any PHP tags that you\'ve included. Also, please remember that emails are sent in plain text format.</p>'."\n"
623
+ : '';
624
+ echo '</td>'."\n";
625
+
626
+ echo '</tr>'."\n";
627
+ echo '</tbody>'."\n";
628
+ echo '</table>'."\n";
629
+ echo '</div>'."\n";
630
+
631
+ echo '</div>'."\n";
632
+
633
+ do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_modification_confirmation_email", get_defined_vars());
634
+ }
635
+
636
+ if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_ccap_confirmation_email", c_ws_plugin__s2member_utils_conds::pro_is_installed(), get_defined_vars()))
637
+ {
638
+ do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_ccap_confirmation_email", get_defined_vars());
639
+
640
+ echo '<div class="ws-menu-page-group" title="Capability Confirmation Email '.((c_ws_plugin__s2member_utils_conds::pro_is_installed()) ? '(Standard/Pro Form)' : '(Standard)').'">'."\n";
641
+
642
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-ccap-confirmation-email-section">'."\n";
643
+ echo '<h3>Capability Confirmation Email (required, but the default works fine)</h3>'."\n";
644
+ echo '<p>This email is sent to existing Users after they complete a Buy Now purchase for one or more Custom Capabilities (if and when you make this possible); see: <code>Dashboard -› s2Member -› PayPal Buttons/Forms -› Capability (Buy Now)</code>. The <strong>primary</strong> purpose of this email is to provide the Customer with a confirmation that their account was updated. You may also customize this further by providing details that are specifically geared to your site.</p>'."\n";
645
+ do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_ccap_confirmation_email", get_defined_vars());
646
+
647
+ echo '<table class="form-table">'."\n";
648
+ echo '<tbody>'."\n";
649
+ echo '<tr>'."\n";
650
+
651
+ echo '<th>'."\n";
652
+ echo '<label for="ws-plugin--s2member-ccap-email-recipients">'."\n";
653
+ echo 'Capability Confirmation Recipients:'."\n";
654
+ echo '</label>'."\n";
655
+ echo '</th>'."\n";
656
+
657
+ echo '</tr>'."\n";
658
+ echo '<tr>'."\n";
659
+
660
+ echo '<td>'."\n";
661
+ echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_ccap_email_recipients" id="ws-plugin--s2member-ccap-email-recipients" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_email_recipients"]).'" /><br />'."\n";
662
+ echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />'."\n";
663
+ echo '<code>"%%full_name%%" &lt;%%payer_email%%&gt;; admin@example.com; "Webmaster" &lt;webmaster@example.com&gt;</code>'."\n";
664
+ echo '</td>'."\n";
665
+
666
+ echo '</tr>'."\n";
667
+ echo '<tr>'."\n";
668
+
669
+ echo '<th>'."\n";
670
+ echo '<label for="ws-plugin--s2member-ccap-email-subject">'."\n";
671
+ echo 'Capability Confirmation Email Subject:'."\n";
672
+ echo '</label>'."\n";
673
+ echo '</th>'."\n";
674
+
675
+ echo '</tr>'."\n";
676
+ echo '<tr>'."\n";
677
+
678
+ echo '<td>'."\n";
679
+ echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_ccap_email_subject" id="ws-plugin--s2member-ccap-email-subject" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_email_subject"]).'" /><br />'."\n";
680
+ echo 'Subject Line used in the email sent to a Customer after a purchase is completed through PayPal.'."\n";
681
+ echo '</td>'."\n";
682
+
683
+ echo '</tr>'."\n";
684
+ echo '<tr>'."\n";
685
+
686
+ echo '<th>'."\n";
687
+ echo '<label for="ws-plugin--s2member-ccap-email-message">'."\n";
688
+ echo 'Capability Confirmation Email Message:'."\n";
689
+ echo '</label>'."\n";
690
+ echo '</th>'."\n";
691
+
692
+ echo '</tr>'."\n";
693
+ echo '<tr>'."\n";
694
+
695
+ echo '<td>'."\n";
696
+ echo '<textarea name="ws_plugin__s2member_ccap_email_message" id="ws-plugin--s2member-ccap-email-message" rows="10">'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["ccap_email_message"]).'</textarea><br />'."\n";
697
+ echo 'Message Body used in the email sent to a Customer after a purchase is completed through PayPal.<br /><br />'."\n";
698
+ echo '<strong>You can also use these special Replacement Codes if you need them:</strong>'."\n";
699
+ echo '<ul>'."\n";
700
+ echo '<li><code>%%txn_id%%</code> = The PayPal Transaction ID. PayPal assigns a unique identifier for every purchase.</li>'."\n";
701
+ echo '<li><code>%%amount%%</code> = The full Amount that you charged for Custom Capability access.</li>'."\n";
702
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who completed the purchase.</li>'."\n";
703
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who completed the purchase.</li>'."\n";
704
+ echo '<li><code>%%full_name%%</code> = The Full Name (First &amp; Last) of the Customer who completed the purchase.</li>'."\n";
705
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who completed the purchase.</li>'."\n";
706
+ echo '<li><code>%%item_number%%</code> = The Item Number (colon separated <code><em>*:custom_capabilities</em></code>); where <code>custom_capabilities</code> is a comma-delimited list of the Custom Capabilities they purchased.</li>'."\n";
707
+ 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";
708
+ echo '<li><code>%%user_first_name%%</code> = The First Name listed on their User account. This might be different than what is on file with PayPal.</li>' . "\n";
709
+ echo '<li><code>%%user_last_name%%</code> = The Last Name listed on their User account. This might be different than what is on file with PayPal.</li>' . "\n";
710
+ echo '<li><code>%%user_full_name%%</code> = The Full Name listed on their User account. This might be different than what is on file with PayPal.</li>' . "\n";
711
+ echo '<li><code>%%user_email%%</code> = The Email Address associated with their User account. This might be different than what is on file with PayPal.</li>' . "\n";
712
+ echo '<li><code>%%user_login%%</code> = The Username associated with their account. The Customer created this during registration.</li>' . "\n";
713
+ echo '<li><code>%%user_ip%%</code> = The Customer\'s original IP Address, during checkout/registration via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>' . "\n";
714
+ echo '<li><code>%%user_id%%</code> = A unique WordPress User ID that references this account in the WordPress database.</li>' . "\n";
715
+ echo '</ul>'."\n";
716
+
717
+ echo '<strong>Custom Registration/Profile Fields are also supported in this email:</strong>' . "\n";
718
+ echo '<ul>' . "\n";
719
+ echo '<li><code>%%date_of_birth%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>date_of_birth</code>.</li>' . "\n";
720
+ echo '<li><code>%%street_address%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>street_address</code>.</li>' . "\n";
721
+ echo '<li><code>%%country%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>country</code>.</li>' . "\n";
722
+ echo '<li><em><code>%%etc, etc...%%</code> <strong>see:</strong> s2Member -› General Options -› Registration/Profile Fields</em>.</li>' . "\n";
723
+ echo '</ul>' . "\n";
724
+
725
+ echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>'."\n";
726
+ echo '<ul>'."\n";
727
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>'."\n";
728
+ 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";
729
+ echo '</ul>'."\n";
730
+ echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />'."\n";
731
+ echo '<em>(The campaign (i.e. christmas-promo) could be referenced using <code>%%cv1%%</code>)</em><br />'."\n";
732
+ echo '<code>custom="'.esc_html($_SERVER["HTTP_HOST"]).'|christmas-promo"</code>'."\n";
733
+
734
+ echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ?
735
+ '<div class="ws-menu-page-hr"></div>' . "\n".
736
+ '<p style="margin:0;"><strong>PHP Code:</strong> It is also possible to use PHP tags — optional (for developers). If you use PHP tags, please run a test email with <code>&lt;?php print_r(get_defined_vars()); ?&gt;</code>. This will give you a full list of all PHP variables available to you in this email. The <code>$paypal</code> variable is the most important one. It contains all of the <code>$_POST</code> variables received from PayPal\'s IPN service — or from an s2Member Pro Form integration (e.g. <code>$paypal["item_number"]</code>, <code>$paypal["item_name"]</code>, etc). Please note that all Replacement Codes will be parsed first, and then any PHP tags that you\'ve included. Also, please remember that emails are sent in plain text format.</p>'."\n"
737
+ : '';
738
+ echo '</td>'."\n";
739
+
740
+ echo '</tr>'."\n";
741
+ echo '</tbody>'."\n";
742
+ echo '</table>'."\n";
743
+ echo '</div>'."\n";
744
+
745
+ echo '</div>'."\n";
746
+
747
+ do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_after_ccap_confirmation_email", get_defined_vars());
748
+ }
749
+
750
  if(apply_filters("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_display_sp_confirmation_email", true, get_defined_vars()))
751
  {
752
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_sp_confirmation_email", get_defined_vars());
755
 
756
  echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-confirmation-email-section">'."\n";
757
  echo '<h3>Specific Post/Page Confirmation Email (required, but the default works fine)</h3>'."\n";
758
+ 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";
759
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_sp_confirmation_email", get_defined_vars());
760
 
761
  echo '<table class="form-table">'."\n";
814
  echo '<li><code>%%sp_access_url%%</code> = The full URL (generated by s2Member) where the Customer can gain access.</li>'."\n";
815
  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";
816
  echo '<li><code>%%txn_id%%</code> = The PayPal Transaction ID. PayPal assigns a unique identifier for every purchase.</li>'."\n";
817
+ echo '<li><code>%%amount%%</code> = The full Amount that you charged for Specific Post/Page Access.</li>'."\n";
818
  echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>'."\n";
819
  echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>'."\n";
820
  echo '<li><code>%%full_name%%</code> = The Full Name (First &amp; Last) of the Customer who purchased Specific Post/Page Access.</li>'."\n";
includes/menu-pages/start.inc.php CHANGED
@@ -279,7 +279,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
279
  echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
280
  echo '<h3>s2Member Pro — Professional Membership Management (a recommended upgrade)</h3>' . "\n";
281
  echo '<p>Among other things, s2Member Pro comes pre-integrated with additional payment gateways. PayPal Pro integration is by far the most popular. It allows your site to accept Visa, MasterCard, Amex, Discover and even Maestro/Solo (from UK shoppers). Customers never leave your site! s2Member Pro Forms also support PayPal Express Checkout; for customers who actually prefer to pay with PayPal.</p>' . "\n";
282
- echo '<p>With s2Member Pro you\'ll enjoy the financial benefits of on-site credit card processing via s2Member\'s PayPal Pro Forms, PayPal Pro Form Generators, and even Authorize.Net AIM/ARB integrations (also w/ Pro Forms). It is also easy to integrate with Google Checkout, ClickBank and/or ccBill (which is primarily for adult payment processing). s2Member Pro comes with advanced User Import/Export tools, Pro Form Coupon Codes, Pro Login Widgets (plus Profile Summary) and other enhancements; such as support for <strong>UNLIMITED</strong> Membership Levels and custom Thank-You pages.</p>'."\n";
283
  echo '<p><strong>Learn more here:</strong> <a href="http://www.s2member.com/pro/" target="_blank" rel="external">s2Member Pro Features</a> (definitely worth the <strong>inexpensive</strong> upgrade).</p>'."\n";
284
  echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/pro-forms/" target="_blank" rel="external">s2Member Pro Forms</a>.</p>'."\n";
285
  do_action ("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
279
  echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
280
  echo '<h3>s2Member Pro — Professional Membership Management (a recommended upgrade)</h3>' . "\n";
281
  echo '<p>Among other things, s2Member Pro comes pre-integrated with additional payment gateways. PayPal Pro integration is by far the most popular. It allows your site to accept Visa, MasterCard, Amex, Discover and even Maestro/Solo (from UK shoppers). Customers never leave your site! s2Member Pro Forms also support PayPal Express Checkout; for customers who actually prefer to pay with PayPal.</p>' . "\n";
282
+ echo '<p>With s2Member Pro you\'ll enjoy the financial benefits of on-site credit card processing via s2Member\'s PayPal Pro Forms, PayPal Pro Form Generators, and even Authorize.Net AIM/ARB integrations (also w/ Pro Forms). It is also easy to integrate with Google Wallet, ClickBank and/or ccBill (which is primarily for adult payment processing). s2Member Pro comes with advanced User Import/Export tools, Pro Form Coupon Codes, Pro Login Widgets (plus Profile Summary) and other enhancements; such as support for <strong>UNLIMITED</strong> Membership Levels and custom Thank-You pages.</p>'."\n";
283
  echo '<p><strong>Learn more here:</strong> <a href="http://www.s2member.com/pro/" target="_blank" rel="external">s2Member Pro Features</a> (definitely worth the <strong>inexpensive</strong> upgrade).</p>'."\n";
284
  echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/pro-forms/" target="_blank" rel="external">s2Member Pro Forms</a>.</p>'."\n";
285
  do_action ("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
includes/s2member.css CHANGED
@@ -13,6 +13,7 @@
13
  * @package s2Member
14
  * @since 3.0
15
  */
 
16
  /*
17
  Structural styles for s2Member Security Badge.
18
 
@@ -20,10 +21,11 @@ These are basic CSS rules. You can override any of these
20
  through the `/style.css` file for your WordPress theme.
21
  */
22
  div.ws-plugin--s2member-s-badge
23
- {
24
- text-align: center;
25
- margin: 0 auto 0 auto;
26
- }
 
27
  /*
28
  Structural styles for Password strength indicators.
29
 
@@ -31,35 +33,34 @@ These are basic CSS rules. You can override any of these
31
  through the `/style.css` file for your WordPress theme.
32
  */
33
  div.ws-plugin--s2member-password-strength
34
- {
35
- padding: 3px;
36
- color: #000000;
37
- background-color: #EEEEEE;
38
- -moz-border-radius: 3px;
39
- -webkit-border-radius: 3px;
40
- border-radius: 3px;
41
- margin-top: 3px;
42
- }
43
  div.ws-plugin--s2member-password-strength-short
44
- {
45
- background-color: #FFA0A0;
46
- }
47
  div.ws-plugin--s2member-password-strength-bad
48
- {
49
- background-color: #FFB78C;
50
- }
51
  div.ws-plugin--s2member-password-strength-good
52
- {
53
- background-color: #FFEC8B;
54
- }
55
  div.ws-plugin--s2member-password-strength-strong
56
- {
57
- background-color: #C3FF88;
58
- }
59
  div.ws-plugin--s2member-password-strength-mismatch
60
- {
61
- background-color: #D6C1AB;
62
- }
 
63
  /*
64
  Structural styles for Multisite Integration Forms.
65
 
@@ -68,76 +69,67 @@ through the `/style.css` file for your WordPress theme.
68
  */
69
  div#content > div.mu_register,
70
  div#content > div.mu_register h2
71
- {
72
- margin: /* Get rid of margins. */ 0;
73
- padding: /* Get rid of padding. */ 0;
74
- width: /* Expand to 100%. */ 100%;
75
- }
76
  div#content > div.mu_register > form#setupform input[type="text"],
77
  div#content > div.mu_register > form#setupform input[type="email"],
78
  div#content > div.mu_register > form#setupform input[type="password"],
79
  div#content > div.mu_register > form#setupform input[type="submit"],
80
  div#content > div.mu_register > form#setupform textarea,
81
  div#content > div.mu_register > form#setupform select
82
- {
83
- width: /* 100% does not work across all browsers. */ 100%;
84
- width: /* 100% does not work in IE browsers < 8. */ 98% !ie<8;
85
- box-sizing: /* Make all fields behave the same. */ border-box;
86
- -ms-box-sizing: border-box;
87
- -moz-box-sizing: border-box;
88
- -webkit-box-sizing: border-box;
89
- margin: 5px 0 5px 0;
90
- font-size: 16px;
91
- }
92
  div#content > div.mu_register > form#setupform input[type="checkbox"],
93
  div#content > div.mu_register > form#setupform input[type="radio"]
94
- {
95
- margin: 0 3px 0 0;
96
- vertical-align: middle;
97
- }
98
- div#content > div.mu_register > form#setupform input[type="submit"]
99
- {
100
- width: /* This width required in IE < 8. */ 100% !ie<8;
101
- }
102
  div#content > div.mu_register > form#setupform p.submit
103
- {
104
- margin-bottom: /* Remove bottom margin. */ 0;
105
- }
106
- div#content > div.mu_register > form#setupform select
107
- {
108
- width: /* Required in IE < 8. */ 99.5% !ie<8;
109
- }
110
  div#content > div.mu_register > form#setupform label
111
- {
112
- cursor: pointer;
113
- margin: 15px 0 0 0;
114
- }
 
 
115
  div#content > div.mu_register > form#setupform label.ws-plugin--s2member-custom-reg-field-op-l
116
- {
117
- opacity: 0.7;
118
- font-size: 90%;
119
- vertical-align: middle;
120
- }
121
  div#content > div.mu_register > form#setupform div.ws-plugin--s2member-custom-reg-field-divider-section
122
- {
123
- height: 1px;
124
- border: 0 solid;
125
- line-height: 1px;
126
- margin: 15px 0 15px 0;
127
- border-width: 0 0 1px 0;
128
- }
129
  div#content > div.mu_register > form#setupform div.ws-plugin--s2member-custom-reg-field-divider-section-title
130
- {
131
- border: 0 solid;
132
- font-size: 110%;
133
- margin: 15px 0 15px 0;
134
- border-width: 0 0 1px 0;
135
- padding: 0 0 12px 0;
136
- }
137
  div#content > div.mu_register > div.mu_alert
138
- {
139
- display: none;
140
- }
 
141
  /*
142
  Structural styles for Return Pages.
143
 
@@ -145,103 +137,92 @@ These are basic CSS rules. You can override any of these
145
  through the `/style.css` file for your WordPress theme.
146
  */
147
  body.s2member-return-body
148
- {
149
- color: #000000;
150
- font-size: 14px;
151
- background: #CCCCCC;
152
- }
153
  body.s2member-return-body a
154
- {
155
- color: #333333;
156
- text-decoration: none;
157
- border-bottom: 1px dotted;
158
- }
159
  body.s2member-return-body a:hover
160
- {
161
- color: #000000;
162
- }
163
  body.s2member-return-body *
164
- {
165
- font-family: 'Trebuchet MS', 'Arial', 'Helvetica', sans-serif;
166
- }
167
  body.s2member-return-body pre,
168
  body.s2member-return-body pre *,
169
  body.s2member-return-body code,
170
  body.s2member-return-body code *
171
- {
172
- font-family: 'Consolas', 'Courier New', monospace;
173
- }
174
  div.s2member-return-section
175
- {
176
- margin: 20px auto 20px auto;
177
- }
178
  div.s2member-return-header-section
179
- {
180
- padding: 0;
181
- width: 800px;
182
- font-size: 120%;
183
- }
184
  div.s2member-return-response-section
185
- {
186
- width: 768px;
187
- padding: 15px;
188
- background: #FFFFFF;
189
- border: 1px solid #666666;
190
- -moz-border-radius: 3px;
191
- -webkit-border-radius: 3px;
192
- border-radius: 3px;
193
- -moz-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
194
- -webkit-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
195
- box-shadow: 1px 1px 0 #999999, -1px -1px 1px #999999;
196
- }
197
  div.s2member-return-response-section div.s2member-return-continue
198
- {
199
- margin: 20px auto 0 auto;
200
- }
201
  div.s2member-return-response-section div.s2member-return-continue a
202
- {
203
- border: 0;
204
- padding: 8px;
205
- display: block;
206
- font-size: 120%;
207
- text-align: center;
208
- background: #EEEEEE;
209
- border: 1px solid #999999;
210
- -moz-border-radius: 3px;
211
- -webkit-border-radius: 3px;
212
- border-radius: 3px;
213
- -moz-box-shadow: 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
214
- -webkit-box-shadow: 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
215
- box-shadow: 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
216
- }
217
  div.s2member-return-response-section div.s2member-return-continue a:hover,
218
  div.s2member-return-response-section div.s2member-return-continue a:active,
219
  div.s2member-return-response-section div.s2member-return-continue a:focus
220
- {
221
- color: #FFFFFF;
222
- background: #151515;
223
- border: 1px solid #FFFFFF;
224
- }
225
  div.s2member-return-support-section
226
- {
227
- padding: 0;
228
- width: 800px;
229
- text-align: center;
230
- }
231
  div.s2member-return-support-section div.cc-reminder
232
- {
233
- padding: 15px;
234
- text-align: center;
235
- background: #FFFFFF;
236
- margin: 20px auto 0 auto;
237
- border: 1px solid #666666;
238
- -moz-border-radius: 3px;
239
- -webkit-border-radius: 3px;
240
- border-radius: 3px;
241
- -moz-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
242
- -webkit-box-shadow: 1px 1px 1px #999999, -1px -1px 1px #999999;
243
- box-shadow: 1px 1px 0 #999999, -1px -1px 1px #999999;
244
- }
245
  /*
246
  Structural styles for Shortcode Profile Editing panel.
247
 
@@ -249,80 +230,72 @@ These are basic CSS rules. You can override any of these
249
  through the `/style.css` file for your WordPress theme.
250
  */
251
  div#ws-plugin--s2member-profile-saved
252
- {
253
- margin-bottom: 15px;
254
- font-weight: bold;
255
- font-size: 110%;
256
- }
257
  form#ws-plugin--s2member-profile table
258
- {
259
- border: 0;
260
- margin: 0;
261
- width: 100%;
262
- }
263
  form#ws-plugin--s2member-profile table td
264
- {
265
- padding: 7px 0 7px 0;
266
- border: /* Tweak 2010 theme. */ 0;
267
- }
268
  form#ws-plugin--s2member-profile input[type="text"],
 
269
  form#ws-plugin--s2member-profile input[type="password"],
270
  form#ws-plugin--s2member-profile input[type="submit"],
271
  form#ws-plugin--s2member-profile textarea,
272
  form#ws-plugin--s2member-profile select
273
- {
274
- margin: /* Tweak. Zeros out margins in 2010 theme. */ 0;
275
- width: /* 100% does not work across all browsers. */ 100%;
276
- width: /* 100% does not work in IE browsers < 8. */ 98% !ie<8;
277
- box-sizing: /* Make all fields behave the same. */ border-box;
278
- -ms-box-sizing: border-box;
279
- -moz-box-sizing: border-box;
280
- -webkit-box-sizing: border-box;
281
- }
282
  form#ws-plugin--s2member-profile input[type="checkbox"],
283
  form#ws-plugin--s2member-profile input[type="radio"]
284
- {
285
- margin: 0 3px 0 0;
286
- vertical-align: middle;
287
- }
288
- form#ws-plugin--s2member-profile input[type="submit"]
289
- {
290
- width: /* This width required in IE < 8. */ 100% !ie<8;
291
- }
292
- form#ws-plugin--s2member-profile select
293
- {
294
- width: /* Required in IE < 8. */ 99.5% !ie<8;
295
- }
296
  form#ws-plugin--s2member-profile label
297
- {
298
- cursor: pointer;
299
- }
 
 
300
  form#ws-plugin--s2member-profile label.ws-plugin--s2member-custom-reg-field-op-l
301
- {
302
- opacity: 0.7;
303
- font-size: 90%;
304
- vertical-align: middle;
305
- }
306
  form#ws-plugin--s2member-profile input#ws-plugin--s2member-profile-password2
307
- {
308
- margin-top: 5px;
309
- }
310
  form#ws-plugin--s2member-profile div.ws-plugin--s2member-profile-field-divider-section
311
- {
312
- margin: 0;
313
- height: 1px;
314
- border: 0 solid;
315
- line-height: 1px;
316
- border-width: 0 0 1px 0;
317
- }
318
  form#ws-plugin--s2member-profile div.ws-plugin--s2member-profile-field-divider-section-title
319
- {
320
- margin: 0;
321
- border: 0 solid;
322
- font-size: 110%;
323
- border-width: 0 0 1px 0;
324
- padding: 0 0 7px 0;
325
- }
 
326
  /*
327
  Structural styles for BuddyPress Profile Field items.
328
 
@@ -330,19 +303,20 @@ These are basic CSS rules. You can override any of these
330
  through the `/style.css` file for your WordPress theme.
331
  */
332
  body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section
333
- {
334
- margin: 0;
335
- height: 1px;
336
- border: 0 solid;
337
- line-height: 1px;
338
- border-width: 0 0 1px 0;
339
- }
340
  body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section-title
341
- {
342
- margin: 0;
343
- padding: 0;
344
- font-size: 120%;
345
- }
 
346
  /*
347
  Structural styles for BuddyPress Registration Fields.
348
 
@@ -350,60 +324,52 @@ These are basic CSS rules. You can override any of these
350
  through the `/style.css` file for your WordPress theme.
351
  */
352
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section
353
- {
354
- width: 48%;
355
- float: right;
356
- }
357
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-container
358
- {
359
- margin-right: 7.5%;
360
- }
361
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="text"],
 
362
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="password"],
363
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section textarea,
364
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section select
365
- {
366
- width: /* 100% does not work across all browsers. */ 100%;
367
- width: /* 100% does not work in IE browsers < 8. */ 98% !ie<8;
368
- box-sizing: /* Make all fields behave the same. */ border-box;
369
- -ms-box-sizing: border-box;
370
- -moz-box-sizing: border-box;
371
- -webkit-box-sizing: border-box;
372
- }
373
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="checkbox"],
374
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="radio"]
375
- {
376
- margin: 0 3px 0 0;
377
- vertical-align: middle;
378
- }
379
- body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section select
380
- {
381
- width: /* Required in IE < 8. */ 99.5% !ie<8;
382
- }
383
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section label.ws-plugin--s2member-custom-reg-field-op-l
384
- {
385
- opacity: 0.7;
386
- font-size: 90%;
387
- vertical-align: middle;
388
- }
389
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section div.ws-plugin--s2member-custom-reg-field-4bp-divider-section
390
- {
391
- margin: 0;
392
- height: 1px;
393
- border: 0 solid;
394
- line-height: 1px;
395
- margin: 10px 0 10px 0;
396
- border-width: 0 0 1px 0;
397
- }
398
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section div.ws-plugin--s2member-custom-reg-field-4bp-divider-section-title
399
- {
400
- margin: 0;
401
- border: 0 solid;
402
- font-size: 120%;
403
- margin: 10px 0 10px 0;
404
- border-width: 0 0 1px 0;
405
- padding: 0 0 7px 0;
406
- }
407
  /*
408
  Structural styles for BuddyPress Profile Field integrations.
409
 
@@ -416,45 +382,35 @@ body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field
416
  body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field-4bp[type="password"],
417
  body.logged-in.profile.profile-edit form textarea.ws-plugin--s2member-profile-field-4bp,
418
  body.logged-in.profile.profile-edit form select.ws-plugin--s2member-profile-field-4bp
419
- {
420
- width: /* 100% does not work across all browsers. */ 100%;
421
- width: /* 100% does not work in IE browsers < 8. */ 98% !ie<8;
422
- box-sizing: /* Make all fields behave the same. */ border-box;
423
- -ms-box-sizing: border-box;
424
- -moz-box-sizing: border-box;
425
- -webkit-box-sizing: border-box;
426
- }
427
  body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field-4bp[type="checkbox"],
428
  body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field-4bp[type="radio"]
429
- {
430
- margin: 0 3px 0 0;
431
- vertical-align: middle;
432
- }
433
- body.logged-in.profile.profile-edit form select.ws-plugin--s2member-profile-field-4bp
434
- {
435
- width: /* Required in IE < 8. */ 99.5% !ie<8;
436
- }
437
  body.logged-in.profile.profile-edit form label.ws-plugin--s2member-custom-reg-field-op-l
438
- {
439
- opacity: 0.7;
440
- font-size: 90%;
441
- vertical-align: middle;
442
- }
443
  body.logged-in.profile.profile-edit form div.ws-plugin--s2member-profile-field-4bp-divider-section
444
- {
445
- margin: 0;
446
- height: 1px;
447
- border: 0 solid;
448
- line-height: 1px;
449
- margin: 10px 0 10px 0;
450
- border-width: 0 0 1px 0;
451
- }
452
  body.logged-in.profile.profile-edit form div.ws-plugin--s2member-profile-field-4bp-divider-section-title
453
- {
454
- margin: 0;
455
- border: 0 solid;
456
- font-size: 120%;
457
- margin: 10px 0 10px 0;
458
- border-width: 0 0 1px 0;
459
- padding: 0 0 7px 0;
460
- }
13
  * @package s2Member
14
  * @since 3.0
15
  */
16
+
17
  /*
18
  Structural styles for s2Member Security Badge.
19
 
21
  through the `/style.css` file for your WordPress theme.
22
  */
23
  div.ws-plugin--s2member-s-badge
24
+ {
25
+ text-align : center;
26
+ margin : 0 auto 0 auto;
27
+ }
28
+
29
  /*
30
  Structural styles for Password strength indicators.
31
 
33
  through the `/style.css` file for your WordPress theme.
34
  */
35
  div.ws-plugin--s2member-password-strength
36
+ {
37
+ padding : 3px;
38
+ color : #000000;
39
+ background-color : #EEEEEE;
40
+ border-radius : 3px;
41
+ margin-top : 3px;
42
+ }
 
 
43
  div.ws-plugin--s2member-password-strength-short
44
+ {
45
+ background-color : #FFA0A0;
46
+ }
47
  div.ws-plugin--s2member-password-strength-bad
48
+ {
49
+ background-color : #FFB78C;
50
+ }
51
  div.ws-plugin--s2member-password-strength-good
52
+ {
53
+ background-color : #FFEC8B;
54
+ }
55
  div.ws-plugin--s2member-password-strength-strong
56
+ {
57
+ background-color : #C3FF88;
58
+ }
59
  div.ws-plugin--s2member-password-strength-mismatch
60
+ {
61
+ background-color : #D6C1AB;
62
+ }
63
+
64
  /*
65
  Structural styles for Multisite Integration Forms.
66
 
69
  */
70
  div#content > div.mu_register,
71
  div#content > div.mu_register h2
72
+ {
73
+ margin : 0;
74
+ padding : 0;
75
+ width : 100%;
76
+ }
77
  div#content > div.mu_register > form#setupform input[type="text"],
78
  div#content > div.mu_register > form#setupform input[type="email"],
79
  div#content > div.mu_register > form#setupform input[type="password"],
80
  div#content > div.mu_register > form#setupform input[type="submit"],
81
  div#content > div.mu_register > form#setupform textarea,
82
  div#content > div.mu_register > form#setupform select
83
+ {
84
+ width : 100%;
85
+ box-sizing : border-box;
86
+ margin : 5px 0 5px 0;
87
+ font-size : 16px;
88
+ }
 
 
 
 
89
  div#content > div.mu_register > form#setupform input[type="checkbox"],
90
  div#content > div.mu_register > form#setupform input[type="radio"]
91
+ {
92
+ margin : 0 3px 0 0;
93
+ vertical-align : middle;
94
+ }
 
 
 
 
95
  div#content > div.mu_register > form#setupform p.submit
96
+ {
97
+ margin-bottom : 0;
98
+ }
 
 
 
 
99
  div#content > div.mu_register > form#setupform label
100
+ {
101
+ display : inline;
102
+ cursor : pointer;
103
+ margin : 15px 0 0 0;
104
+ font-weight : normal;
105
+ }
106
  div#content > div.mu_register > form#setupform label.ws-plugin--s2member-custom-reg-field-op-l
107
+ {
108
+ opacity : 0.7;
109
+ font-size : 90%;
110
+ vertical-align : middle;
111
+ }
112
  div#content > div.mu_register > form#setupform div.ws-plugin--s2member-custom-reg-field-divider-section
113
+ {
114
+ height : 1px;
115
+ border : 0 solid;
116
+ line-height : 1px;
117
+ margin : 15px 0 15px 0;
118
+ border-width : 0 0 1px 0;
119
+ }
120
  div#content > div.mu_register > form#setupform div.ws-plugin--s2member-custom-reg-field-divider-section-title
121
+ {
122
+ border : 0 solid;
123
+ font-size : 110%;
124
+ margin : 15px 0 15px 0;
125
+ border-width : 0 0 1px 0;
126
+ padding : 0 0 12px 0;
127
+ }
128
  div#content > div.mu_register > div.mu_alert
129
+ {
130
+ display : none;
131
+ }
132
+
133
  /*
134
  Structural styles for Return Pages.
135
 
137
  through the `/style.css` file for your WordPress theme.
138
  */
139
  body.s2member-return-body
140
+ {
141
+ color : #000000;
142
+ font-size : 14px;
143
+ background : #CCCCCC;
144
+ }
145
  body.s2member-return-body a
146
+ {
147
+ color : #333333;
148
+ text-decoration : none;
149
+ border-bottom : 1px dotted;
150
+ }
151
  body.s2member-return-body a:hover
152
+ {
153
+ color : #000000;
154
+ }
155
  body.s2member-return-body *
156
+ {
157
+ font-family : 'Trebuchet MS', 'Arial', 'Helvetica', sans-serif;
158
+ }
159
  body.s2member-return-body pre,
160
  body.s2member-return-body pre *,
161
  body.s2member-return-body code,
162
  body.s2member-return-body code *
163
+ {
164
+ font-family : 'Monaco', 'Menlo', 'Consolas', 'Courier New', monospace;
165
+ }
166
  div.s2member-return-section
167
+ {
168
+ margin : 20px auto 20px auto;
169
+ }
170
  div.s2member-return-header-section
171
+ {
172
+ padding : 0;
173
+ width : 800px;
174
+ font-size : 120%;
175
+ }
176
  div.s2member-return-response-section
177
+ {
178
+ width : 768px;
179
+ padding : 15px;
180
+ background : #FFFFFF;
181
+ border : 1px solid #666666;
182
+ border-radius : 3px;
183
+ box-shadow : 1px 1px 0 #999999, -1px -1px 1px #999999;
184
+ }
 
 
 
 
185
  div.s2member-return-response-section div.s2member-return-continue
186
+ {
187
+ margin : 20px auto 0 auto;
188
+ }
189
  div.s2member-return-response-section div.s2member-return-continue a
190
+ {
191
+ border : 0;
192
+ padding : 8px;
193
+ display : block;
194
+ font-size : 120%;
195
+ text-align : center;
196
+ background : #EEEEEE;
197
+ border : 1px solid #999999;
198
+ border-radius : 3px;
199
+ box-shadow : 1px 1px 3px #CCCCCC, -1px -1px 3px #CCCCCC;
200
+ }
 
 
 
 
201
  div.s2member-return-response-section div.s2member-return-continue a:hover,
202
  div.s2member-return-response-section div.s2member-return-continue a:active,
203
  div.s2member-return-response-section div.s2member-return-continue a:focus
204
+ {
205
+ color : #FFFFFF;
206
+ background : #151515;
207
+ border : 1px solid #FFFFFF;
208
+ }
209
  div.s2member-return-support-section
210
+ {
211
+ padding : 0;
212
+ width : 800px;
213
+ text-align : center;
214
+ }
215
  div.s2member-return-support-section div.cc-reminder
216
+ {
217
+ padding : 15px;
218
+ text-align : center;
219
+ background : #FFFFFF;
220
+ margin : 20px auto 0 auto;
221
+ border : 1px solid #666666;
222
+ border-radius : 3px;
223
+ box-shadow : 1px 1px 0 #999999, -1px -1px 1px #999999;
224
+ }
225
+
 
 
 
226
  /*
227
  Structural styles for Shortcode Profile Editing panel.
228
 
230
  through the `/style.css` file for your WordPress theme.
231
  */
232
  div#ws-plugin--s2member-profile-saved
233
+ {
234
+ margin-bottom : 15px;
235
+ font-weight : bold;
236
+ font-size : 110%;
237
+ }
238
  form#ws-plugin--s2member-profile table
239
+ {
240
+ border : 0;
241
+ margin : 0;
242
+ width : 100%;
243
+ }
244
  form#ws-plugin--s2member-profile table td
245
+ {
246
+ padding : 7px 0 7px 0;
247
+ border : 0;
248
+ }
249
  form#ws-plugin--s2member-profile input[type="text"],
250
+ form#ws-plugin--s2member-profile input[type="email"],
251
  form#ws-plugin--s2member-profile input[type="password"],
252
  form#ws-plugin--s2member-profile input[type="submit"],
253
  form#ws-plugin--s2member-profile textarea,
254
  form#ws-plugin--s2member-profile select
255
+ {
256
+ margin : 0;
257
+ width : 100%;
258
+ box-sizing : border-box;
259
+ }
 
 
 
 
260
  form#ws-plugin--s2member-profile input[type="checkbox"],
261
  form#ws-plugin--s2member-profile input[type="radio"]
262
+ {
263
+ margin : 0 3px 0 0;
264
+ vertical-align : middle;
265
+ }
 
 
 
 
 
 
 
 
266
  form#ws-plugin--s2member-profile label
267
+ {
268
+ display : inline;
269
+ cursor : pointer;
270
+ font-weight : normal;
271
+ }
272
  form#ws-plugin--s2member-profile label.ws-plugin--s2member-custom-reg-field-op-l
273
+ {
274
+ opacity : 0.7;
275
+ font-size : 90%;
276
+ vertical-align : middle;
277
+ }
278
  form#ws-plugin--s2member-profile input#ws-plugin--s2member-profile-password2
279
+ {
280
+ margin-top : 5px;
281
+ }
282
  form#ws-plugin--s2member-profile div.ws-plugin--s2member-profile-field-divider-section
283
+ {
284
+ margin : 0;
285
+ height : 1px;
286
+ border : 0 solid;
287
+ line-height : 1px;
288
+ border-width : 0 0 1px 0;
289
+ }
290
  form#ws-plugin--s2member-profile div.ws-plugin--s2member-profile-field-divider-section-title
291
+ {
292
+ margin : 0;
293
+ border : 0 solid;
294
+ font-size : 110%;
295
+ border-width : 0 0 1px 0;
296
+ padding : 0 0 7px 0;
297
+ }
298
+
299
  /*
300
  Structural styles for BuddyPress Profile Field items.
301
 
303
  through the `/style.css` file for your WordPress theme.
304
  */
305
  body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section
306
+ {
307
+ margin : 0;
308
+ height : 1px;
309
+ border : 0 solid;
310
+ line-height : 1px;
311
+ border-width : 0 0 1px 0;
312
+ }
313
  body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section-title
314
+ {
315
+ margin : 0;
316
+ padding : 0;
317
+ font-size : 120%;
318
+ }
319
+
320
  /*
321
  Structural styles for BuddyPress Registration Fields.
322
 
324
  through the `/style.css` file for your WordPress theme.
325
  */
326
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section
327
+ {
328
+ width : 48%;
329
+ float : right;
330
+ }
331
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-container
332
+ {
333
+ margin-right : 7.5%;
334
+ }
335
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="text"],
336
+ body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="email"],
337
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="password"],
338
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section textarea,
339
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section select
340
+ {
341
+ width : 100%;
342
+ box-sizing : border-box;
343
+ }
 
 
 
 
344
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="checkbox"],
345
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section input[type="radio"]
346
+ {
347
+ margin : 0 3px 0 0;
348
+ vertical-align : middle;
349
+ }
 
 
 
 
350
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section label.ws-plugin--s2member-custom-reg-field-op-l
351
+ {
352
+ opacity : 0.7;
353
+ font-size : 90%;
354
+ vertical-align : middle;
355
+ }
356
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section div.ws-plugin--s2member-custom-reg-field-4bp-divider-section
357
+ {
358
+ height : 1px;
359
+ border : 0 solid;
360
+ line-height : 1px;
361
+ margin : 10px 0 10px 0;
362
+ border-width : 0 0 1px 0;
363
+ }
 
364
  body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section div.ws-plugin--s2member-custom-reg-field-4bp-divider-section-title
365
+ {
366
+ border : 0 solid;
367
+ font-size : 120%;
368
+ margin : 10px 0 10px 0;
369
+ border-width : 0 0 1px 0;
370
+ padding : 0 0 7px 0;
371
+ }
372
+
373
  /*
374
  Structural styles for BuddyPress Profile Field integrations.
375
 
382
  body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field-4bp[type="password"],
383
  body.logged-in.profile.profile-edit form textarea.ws-plugin--s2member-profile-field-4bp,
384
  body.logged-in.profile.profile-edit form select.ws-plugin--s2member-profile-field-4bp
385
+ {
386
+ width : 100%;
387
+ box-sizing : border-box;
388
+ }
 
 
 
 
389
  body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field-4bp[type="checkbox"],
390
  body.logged-in.profile.profile-edit form input.ws-plugin--s2member-profile-field-4bp[type="radio"]
391
+ {
392
+ margin : 0 3px 0 0;
393
+ vertical-align : middle;
394
+ }
 
 
 
 
395
  body.logged-in.profile.profile-edit form label.ws-plugin--s2member-custom-reg-field-op-l
396
+ {
397
+ opacity : 0.7;
398
+ font-size : 90%;
399
+ vertical-align : middle;
400
+ }
401
  body.logged-in.profile.profile-edit form div.ws-plugin--s2member-profile-field-4bp-divider-section
402
+ {
403
+ height : 1px;
404
+ border : 0 solid;
405
+ line-height : 1px;
406
+ margin : 10px 0 10px 0;
407
+ border-width : 0 0 1px 0;
408
+ }
 
409
  body.logged-in.profile.profile-edit form div.ws-plugin--s2member-profile-field-4bp-divider-section-title
410
+ {
411
+ border : 0 solid;
412
+ font-size : 120%;
413
+ margin : 10px 0 10px 0;
414
+ border-width : 0 0 1px 0;
415
+ padding : 0 0 7px 0;
416
+ }
 
includes/syscon.inc.php CHANGED
@@ -129,6 +129,8 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
129
  $default_options["gateway_debug_logs"] = "0";
130
  $default_options["gateway_debug_logs_extensive"] = "0";
131
 
 
 
132
  $default_options["sec_encryption_key"] = "";
133
  $default_options["sec_encryption_key_history"] = array();
134
  $default_options["s_badge_status_enabled"] = "0";
@@ -230,9 +232,17 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
230
  $default_options["signup_email_subject"] = _x("Congratulations! (your membership has been approved)", "s2member-front", "s2member");
231
  $default_options["signup_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%! Your membership has been approved.\n\nIf you haven't already done so, the next step is to Register a Username.\n\nComplete your registration here:\n%%%%registration_url%%%%\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
232
 
 
 
 
 
 
 
 
 
233
  $default_options["sp_email_recipients"] = '"%%full_name%%" <%%payer_email%%>';
234
  $default_options["sp_email_subject"] = _x("Thank You! (instructions for access)", "s2member-front", "s2member");
235
- $default_options["sp_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%!\n\n%%%%item_name%%%%\n\nYour order can be retrieved here:\n%%%%sp_access_url%%%%\n( link expires in %%%%sp_access_exp%%%% )\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
236
 
237
  $default_options["mailchimp_api_key"] = "";
238
 
@@ -317,24 +327,6 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
317
  Here they are merged. User options will overwrite some or all default values.
318
  */
319
  $GLOBALS["WS_PLUGIN__"]["s2member"]["o"] = array_merge($default_options, (($options !== false) ? (array)$options : (array)get_option("ws_plugin__s2member_options")));
320
-
321
- // Back compatibility for `filter_wp_query`. Changed in v110912 to array.
322
- if(is_string($_ov = &$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["filter_wp_query"]))
323
- $_ov = (!$_ov || $_ov === "none") ? $default_options["filter_wp_query"] : array_unique(preg_split("/[;,\r\n\t\s ]+/", $_ov));
324
-
325
- // Backward compatibility for old logo image width of 500 pixels. Changed in v110604.
326
- if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src"] === $default_options["login_reg_logo_src"])
327
- $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src_width"] = $default_options["login_reg_logo_src_width"];
328
-
329
- // Backward compatibility for PayPal API Credentials. Starting with v3.5+, this info is stored by the free version of s2Member.
330
- if(empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_username"]))
331
- $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_username"];
332
-
333
- if(empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_password"]))
334
- $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_password"];
335
-
336
- if(empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_signature"]))
337
- $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_signature"];
338
  /*
339
  This builds an MD5 checksum for the full array of options. This also includes the config checksum and the current set of default options.
340
  */
@@ -358,6 +350,9 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
358
  else if(preg_match("/^gateway_debug_logs|gateway_debug_logs_extensive/", $key) && (!is_string($value) || !is_numeric($value)))
359
  $value = $default_options[$key];
360
 
 
 
 
361
  else if($key === "sec_encryption_key" && (!is_string($value) || !strlen($value)))
362
  $value = $default_options[$key];
363
 
@@ -484,10 +479,10 @@ if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
484
  else if(preg_match("/^(?:signup|modification|ccap|sp)_tracking_codes$/", $key) && (!is_string($value) || !strlen($value)))
485
  $value = $default_options[$key];
486
 
487
- else if(preg_match("/^(?:signup|sp)_email_recipients$/", $key) && !is_string($value) /* Can be empty. */)
488
  $value = $default_options[$key];
489
 
490
- else if(preg_match("/^(?:signup|sp)_email_(?:subject|message)$/", $key) && (!is_string($value) || !strlen($value)))
491
  $value = $default_options[$key];
492
 
493
  else if($key === "mailchimp_api_key" && (!is_string($value) || !strlen($value)))
129
  $default_options["gateway_debug_logs"] = "0";
130
  $default_options["gateway_debug_logs_extensive"] = "0";
131
 
132
+ $default_options["lazy_load_css_js"] = "1";
133
+
134
  $default_options["sec_encryption_key"] = "";
135
  $default_options["sec_encryption_key_history"] = array();
136
  $default_options["s_badge_status_enabled"] = "0";
232
  $default_options["signup_email_subject"] = _x("Congratulations! (your membership has been approved)", "s2member-front", "s2member");
233
  $default_options["signup_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%! Your membership has been approved.\n\nIf you haven't already done so, the next step is to Register a Username.\n\nComplete your registration here:\n%%%%registration_url%%%%\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
234
 
235
+ $default_options["modification_email_recipients"] = '"%%full_name%%" <%%payer_email%%>';
236
+ $default_options["modification_email_subject"] = _x("Thank you! Your account has been updated.", "s2member-front", "s2member");
237
+ $default_options["modification_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
238
+
239
+ $default_options["ccap_email_recipients"] = '"%%full_name%%" <%%payer_email%%>';
240
+ $default_options["ccap_email_subject"] = _x("Thank you! Your account has been updated.", "s2member-front", "s2member");
241
+ $default_options["ccap_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
242
+
243
  $default_options["sp_email_recipients"] = '"%%full_name%%" <%%payer_email%%>';
244
  $default_options["sp_email_subject"] = _x("Thank You! (instructions for access)", "s2member-front", "s2member");
245
+ $default_options["sp_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%!\n\n%%%%item_name%%%%\n\nYour order can be retrieved here:\n%%%%sp_access_url%%%%\n(link expires in %%%%sp_access_exp%%%%)\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
246
 
247
  $default_options["mailchimp_api_key"] = "";
248
 
327
  Here they are merged. User options will overwrite some or all default values.
328
  */
329
  $GLOBALS["WS_PLUGIN__"]["s2member"]["o"] = array_merge($default_options, (($options !== false) ? (array)$options : (array)get_option("ws_plugin__s2member_options")));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  /*
331
  This builds an MD5 checksum for the full array of options. This also includes the config checksum and the current set of default options.
332
  */
350
  else if(preg_match("/^gateway_debug_logs|gateway_debug_logs_extensive/", $key) && (!is_string($value) || !is_numeric($value)))
351
  $value = $default_options[$key];
352
 
353
+ else if($key === "lazy_load_css_js" && (!is_string($value) || !is_numeric($value)))
354
+ $value = $default_options[$key];
355
+
356
  else if($key === "sec_encryption_key" && (!is_string($value) || !strlen($value)))
357
  $value = $default_options[$key];
358
 
479
  else if(preg_match("/^(?:signup|modification|ccap|sp)_tracking_codes$/", $key) && (!is_string($value) || !strlen($value)))
480
  $value = $default_options[$key];
481
 
482
+ else if(preg_match("/^(?:signup|modification|ccap|sp)_email_recipients$/", $key) && !is_string($value) /* Can be empty. */)
483
  $value = $default_options[$key];
484
 
485
+ else if(preg_match("/^(?:signup|modification|ccap|sp)_email_(?:subject|message)$/", $key) && (!is_string($value) || !strlen($value)))
486
  $value = $default_options[$key];
487
 
488
  else if($key === "mailchimp_api_key" && (!is_string($value) || !strlen($value)))
includes/templates/badges/index.php DELETED
File without changes
includes/templates/buttons/index.php DELETED
File without changes
includes/templates/cfg-files/index.php DELETED
File without changes
includes/templates/errors/index.php DELETED
File without changes
includes/templates/index.php DELETED
File without changes
includes/templates/options/index.php DELETED
File without changes
includes/templates/options/paypal-sp-hours.php CHANGED
@@ -48,4 +48,5 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
48
  <option value="26280"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 3 years)", "s2member-admin", "s2member")); ?></option>
49
  <option value="35040"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 4 years)", "s2member-admin", "s2member")); ?></option>
50
  <option value="43800"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 5 years)", "s2member-admin", "s2member")); ?></option>
 
51
  </optgroup>
48
  <option value="26280"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 3 years)", "s2member-admin", "s2member")); ?></option>
49
  <option value="35040"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 4 years)", "s2member-admin", "s2member")); ?></option>
50
  <option value="43800"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 5 years)", "s2member-admin", "s2member")); ?></option>
51
+ <option value="438291"><?php echo esc_html (_x ("Buy Now (Specific Post/Page, link valid for 50 years)", "s2member-admin", "s2member")); ?></option>
52
  </optgroup>
includes/templates/players/index.php DELETED
File without changes
includes/templates/returns/index.php DELETED
File without changes
includes/templates/shortcodes/index.php DELETED
File without changes
includes/translations/index.php DELETED
File without changes
includes/translations/s2member.pot CHANGED
@@ -1,10 +1,10 @@
1
- # Copyright (C) 2010 s2Member® Framework
2
- # This file is distributed under the same license as the s2Member® Framework package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: s2Member® Framework 130816\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2013-11-09 09:23:22+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -17,8 +17,8 @@ msgctxt "s2member-front"
17
  msgid "Max failed logins. Please wait %s and try again."
18
  msgstr ""
19
 
20
- #: s2member/includes/classes/custom-reg-fields.inc.php:328
21
- #: s2member/includes/classes/custom-reg-fields.inc.php:464
22
  #: s2member/includes/classes/profile-in.inc.php:120
23
  #: s2member/includes/classes/sc-profile-in.inc.php:136
24
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:66
@@ -31,8 +31,8 @@ msgctxt "s2member-front"
31
  msgid "First Name"
32
  msgstr ""
33
 
34
- #: s2member/includes/classes/custom-reg-fields.inc.php:340
35
- #: s2member/includes/classes/custom-reg-fields.inc.php:479
36
  #: s2member/includes/classes/profile-in.inc.php:140
37
  #: s2member/includes/classes/sc-profile-in.inc.php:156
38
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:72
@@ -45,8 +45,8 @@ msgctxt "s2member-front"
45
  msgid "Last Name"
46
  msgstr ""
47
 
48
- #: s2member/includes/classes/custom-reg-fields.inc.php:437
49
- #: s2member/includes/classes/custom-reg-fields.inc.php:442
50
  #: s2member/includes/classes/profile-in.inc.php:233
51
  #: s2member/includes/classes/profile-in.inc.php:239
52
  #: s2member/includes/classes/sc-profile-in.inc.php:249
@@ -55,12 +55,12 @@ msgctxt "s2member-front"
55
  msgid "Please type your Password twice to confirm."
56
  msgstr ""
57
 
58
- #: s2member/includes/classes/custom-reg-fields.inc.php:438
59
  msgctxt "s2member-front"
60
  msgid "Password (please type it twice)"
61
  msgstr ""
62
 
63
- #: s2member/includes/classes/custom-reg-fields.inc.php:446
64
  #: s2member/includes/classes/profile-in.inc.php:243
65
  #: s2member/includes/classes/sc-profile-in.inc.php:259
66
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:94
@@ -504,34 +504,6 @@ msgctxt "s2member-front"
504
  msgid "<strong>ERROR</strong>: Max simultaneous logins for username: %1$s. Please wait %2$s and try again."
505
  msgstr ""
506
 
507
- #: s2member/includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php:132
508
- #: s2member/includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php:156
509
- #: s2member/includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php:100
510
- msgctxt "s2member-front"
511
- msgid "Thank you! Your account has been updated."
512
- msgstr ""
513
-
514
- #: s2member/includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php:132
515
- #: s2member/includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php:156
516
- #: s2member/includes/classes/paypal-return-in-subscr-modify-w-level.inc.php:187
517
- #: s2member/includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php:234
518
- msgctxt "s2member-front"
519
- msgid "Thank you! You've been updated to:"
520
- msgstr ""
521
-
522
- #: s2member/includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php:132
523
- #: s2member/includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php:156
524
- #: s2member/includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php:100
525
- msgctxt "s2member-front"
526
- msgid "Please log back in now."
527
- msgstr ""
528
-
529
- #: s2member/includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php:100
530
- #: s2member/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:144
531
- msgctxt "s2member-front"
532
- msgid "Thank you! You now have access to:"
533
- msgstr ""
534
-
535
  #: s2member/includes/classes/paypal-return-in-no-tx-data.inc.php:66
536
  #: s2member/includes/classes/paypal-return-in-proxy-ty-email.inc.php:64
537
  msgctxt "s2member-front"
@@ -576,6 +548,12 @@ msgctxt "s2member-front"
576
  msgid "Continue (Click Here)"
577
  msgstr ""
578
 
 
 
 
 
 
 
579
  #: s2member/includes/classes/paypal-return-in-subscr-modify-w-level.inc.php:188
580
  #: s2member/includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php:235
581
  #: s2member/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:145
@@ -615,6 +593,11 @@ msgctxt "s2member-front"
615
  msgid "Please Register Now (Click Here)"
616
  msgstr ""
617
 
 
 
 
 
 
618
  #: s2member/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:155
619
  msgctxt "s2member-front"
620
  msgid "<strong>ERROR:</strong> Unable to add new Capabilities.<br />Please contact Support for assistance.<br /><br />The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing."
@@ -728,6 +711,8 @@ msgstr ""
728
 
729
  #: s2member/includes/classes/profile-in.inc.php:98
730
  #: s2member/includes/classes/sc-profile-in.inc.php:114
 
 
731
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:78
732
  #: s2member-pro/includes/templates/forms/authnet-registration-form.php:46
733
  #: s2member-pro/includes/templates/forms/authnet-sp-checkout-form.php:78
@@ -808,10 +793,10 @@ msgid "If you need assistance, please <a href=\"%s\" target=\"_blank\">contact s
808
  msgstr ""
809
 
810
  #: s2member/includes/classes/sc-paypal-button-e.inc.php:77
811
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:72
812
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:95
813
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:149
814
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:204
815
  #: s2member/includes/templates/buttons/paypal-cancellation-button.php:7
816
  #: s2member/includes/templates/buttons/paypal-ccaps-checkout-button.php:34
817
  #: s2member/includes/templates/buttons/paypal-checkout-button.php:46
@@ -1450,17 +1435,17 @@ msgctxt "s2member-front recaptcha-lang-code"
1450
  msgid "en"
1451
  msgstr ""
1452
 
1453
- #: s2member/includes/syscon.inc.php:150
1454
  msgctxt "s2member-front"
1455
  msgid "Yes, I want to receive updates via email."
1456
  msgstr ""
1457
 
1458
- #: s2member/includes/syscon.inc.php:204
1459
  msgctxt "s2member-front"
1460
  msgid "[%s] Username/Password"
1461
  msgstr ""
1462
 
1463
- #: s2member/includes/syscon.inc.php:205
1464
  msgctxt "s2member-front"
1465
  msgid ""
1466
  "Your Username/Password for:\n"
@@ -1471,12 +1456,12 @@ msgid ""
1471
  "%%%%wp_login_url%%%%"
1472
  msgstr ""
1473
 
1474
- #: s2member/includes/syscon.inc.php:208
1475
  msgctxt "s2member-front"
1476
  msgid "[%s] New User Registration"
1477
  msgstr ""
1478
 
1479
- #: s2member/includes/syscon.inc.php:209
1480
  msgctxt "s2member-front"
1481
  msgid ""
1482
  "New User Registration on your site:\n"
@@ -1488,12 +1473,12 @@ msgid ""
1488
  "IP Address: %%%%user_ip%%%%"
1489
  msgstr ""
1490
 
1491
- #: s2member/includes/syscon.inc.php:230 s2member-pro/includes/syscon.inc.php:94
1492
  msgctxt "s2member-front"
1493
  msgid "Congratulations! (your membership has been approved)"
1494
  msgstr ""
1495
 
1496
- #: s2member/includes/syscon.inc.php:231
1497
  msgctxt "s2member-front"
1498
  msgid ""
1499
  "Thanks %%%%first_name%%%%! Your membership has been approved.\n"
@@ -1509,12 +1494,28 @@ msgid ""
1509
  "%s"
1510
  msgstr ""
1511
 
1512
- #: s2member/includes/syscon.inc.php:234 s2member-pro/includes/syscon.inc.php:98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1513
  msgctxt "s2member-front"
1514
  msgid "Thank You! (instructions for access)"
1515
  msgstr ""
1516
 
1517
- #: s2member/includes/syscon.inc.php:235
1518
  msgctxt "s2member-front"
1519
  msgid ""
1520
  "Thanks %%%%first_name%%%%!\n"
@@ -1523,7 +1524,7 @@ msgid ""
1523
  "\n"
1524
  "Your order can be retrieved here:\n"
1525
  "%%%%sp_access_url%%%%\n"
1526
- "( link expires in %%%%sp_access_exp%%%% )\n"
1527
  "\n"
1528
  "If you have any trouble, please feel free to contact us.\n"
1529
  "\n"
@@ -1531,32 +1532,32 @@ msgid ""
1531
  "%s"
1532
  msgstr ""
1533
 
1534
- #: s2member/includes/syscon.inc.php:263
1535
  msgctxt "s2member-front"
1536
  msgid "Free Subscriber"
1537
  msgstr ""
1538
 
1539
- #: s2member/includes/syscon.inc.php:263
1540
  msgctxt "s2member-front"
1541
  msgid "Bronze Member"
1542
  msgstr ""
1543
 
1544
- #: s2member/includes/syscon.inc.php:263
1545
  msgctxt "s2member-front"
1546
  msgid "Silver Member"
1547
  msgstr ""
1548
 
1549
- #: s2member/includes/syscon.inc.php:263
1550
  msgctxt "s2member-front"
1551
  msgid "Gold Member"
1552
  msgstr ""
1553
 
1554
- #: s2member/includes/syscon.inc.php:263
1555
  msgctxt "s2member-front"
1556
  msgid "Platinum Member"
1557
  msgstr ""
1558
 
1559
- #: s2member/includes/syscon.inc.php:263
1560
  msgctxt "s2member-front"
1561
  msgid "Level %s Member"
1562
  msgstr ""
@@ -1689,7 +1690,6 @@ msgid "PayPal® (Subscriptions)"
1689
  msgstr ""
1690
 
1691
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:7
1692
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:7
1693
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:7
1694
  msgctxt "s2member-admin"
1695
  msgid "Daily (recurring charge, for ongoing access)"
@@ -1697,7 +1697,6 @@ msgstr ""
1697
 
1698
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:8
1699
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:7
1700
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:8
1701
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:7
1702
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:8
1703
  msgctxt "s2member-admin"
@@ -1706,7 +1705,6 @@ msgstr ""
1706
 
1707
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:9
1708
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:8
1709
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:9
1710
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:8
1711
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:9
1712
  msgctxt "s2member-admin"
@@ -1716,7 +1714,7 @@ msgstr ""
1716
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:10
1717
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:9
1718
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:7
1719
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:10
1720
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:9
1721
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:10
1722
  msgctxt "s2member-admin"
@@ -1726,7 +1724,6 @@ msgstr ""
1726
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:11
1727
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:10
1728
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:8
1729
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:11
1730
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:11
1731
  msgctxt "s2member-admin"
1732
  msgid "Bi-Monthly (recurring charge, for ongoing access)"
@@ -1735,7 +1732,6 @@ msgstr ""
1735
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:12
1736
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:11
1737
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:9
1738
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:12
1739
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:10
1740
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:12
1741
  msgctxt "s2member-admin"
@@ -1752,7 +1748,6 @@ msgstr ""
1752
 
1753
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:14
1754
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:13
1755
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:13
1756
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:12
1757
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:14
1758
  msgctxt "s2member-admin"
@@ -1760,7 +1755,6 @@ msgid "Yearly (recurring charge, for ongoing access)"
1760
  msgstr ""
1761
 
1762
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:20
1763
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:19
1764
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:18
1765
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:20
1766
  msgctxt "s2member-admin"
@@ -1768,7 +1762,6 @@ msgid "One Time (for 1 day access, non-recurring)"
1768
  msgstr ""
1769
 
1770
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:21
1771
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:20
1772
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:19
1773
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:21
1774
  msgctxt "s2member-admin"
@@ -1776,7 +1769,6 @@ msgid "One Time (for 2 day access, non-recurring)"
1776
  msgstr ""
1777
 
1778
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:22
1779
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:21
1780
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:20
1781
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:22
1782
  msgctxt "s2member-admin"
@@ -1784,7 +1776,6 @@ msgid "One Time (for 3 day access, non-recurring)"
1784
  msgstr ""
1785
 
1786
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:23
1787
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:22
1788
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:21
1789
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:23
1790
  msgctxt "s2member-admin"
@@ -1792,7 +1783,6 @@ msgid "One Time (for 4 day access, non-recurring)"
1792
  msgstr ""
1793
 
1794
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:24
1795
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:23
1796
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:22
1797
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:24
1798
  msgctxt "s2member-admin"
@@ -1800,7 +1790,6 @@ msgid "One Time (for 5 day access, non-recurring)"
1800
  msgstr ""
1801
 
1802
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:25
1803
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:24
1804
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:23
1805
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:25
1806
  msgctxt "s2member-admin"
@@ -1809,7 +1798,6 @@ msgstr ""
1809
 
1810
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:27
1811
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:19
1812
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:26
1813
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:25
1814
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:27
1815
  msgctxt "s2member-admin"
@@ -1818,7 +1806,6 @@ msgstr ""
1818
 
1819
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:28
1820
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:20
1821
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:27
1822
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:26
1823
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:28
1824
  msgctxt "s2member-admin"
@@ -1827,7 +1814,6 @@ msgstr ""
1827
 
1828
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:29
1829
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:21
1830
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:28
1831
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:27
1832
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:29
1833
  msgctxt "s2member-admin"
@@ -1836,7 +1822,7 @@ msgstr ""
1836
 
1837
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:31
1838
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:23
1839
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:30
1840
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:29
1841
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:31
1842
  msgctxt "s2member-admin"
@@ -1845,7 +1831,6 @@ msgstr ""
1845
 
1846
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:32
1847
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:24
1848
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:31
1849
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:30
1850
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:32
1851
  msgctxt "s2member-admin"
@@ -1854,7 +1839,6 @@ msgstr ""
1854
 
1855
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:33
1856
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:25
1857
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:32
1858
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:31
1859
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:33
1860
  msgctxt "s2member-admin"
@@ -1863,7 +1847,6 @@ msgstr ""
1863
 
1864
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:34
1865
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:26
1866
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:33
1867
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:32
1868
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:34
1869
  msgctxt "s2member-admin"
@@ -1872,7 +1855,6 @@ msgstr ""
1872
 
1873
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:35
1874
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:27
1875
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:34
1876
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:33
1877
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:35
1878
  msgctxt "s2member-admin"
@@ -1881,7 +1863,6 @@ msgstr ""
1881
 
1882
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:36
1883
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:28
1884
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:35
1885
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:34
1886
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:36
1887
  msgctxt "s2member-admin"
@@ -1890,7 +1871,6 @@ msgstr ""
1890
 
1891
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:38
1892
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:30
1893
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:37
1894
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:36
1895
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:38
1896
  msgctxt "s2member-admin"
@@ -1899,7 +1879,7 @@ msgstr ""
1899
 
1900
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:44
1901
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:36
1902
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:43
1903
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:42
1904
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:44
1905
  msgctxt "s2member-admin"
@@ -1909,7 +1889,7 @@ msgstr ""
1909
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:45
1910
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:37
1911
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:15
1912
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:44
1913
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:43
1914
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:45
1915
  msgctxt "s2member-admin"
@@ -1919,7 +1899,7 @@ msgstr ""
1919
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:46
1920
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:38
1921
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:16
1922
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:45
1923
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:44
1924
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:46
1925
  msgctxt "s2member-admin"
@@ -1929,7 +1909,7 @@ msgstr ""
1929
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:47
1930
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:39
1931
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:17
1932
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:46
1933
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:45
1934
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:47
1935
  msgctxt "s2member-admin"
@@ -1939,7 +1919,7 @@ msgstr ""
1939
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:48
1940
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:40
1941
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:18
1942
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:47
1943
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:46
1944
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:48
1945
  msgctxt "s2member-admin"
@@ -1949,7 +1929,7 @@ msgstr ""
1949
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:49
1950
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:41
1951
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:19
1952
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:48
1953
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:47
1954
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:49
1955
  msgctxt "s2member-admin"
@@ -1959,7 +1939,7 @@ msgstr ""
1959
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:51
1960
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:43
1961
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:21
1962
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:50
1963
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:49
1964
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:51
1965
  msgctxt "s2member-admin"
@@ -1969,7 +1949,7 @@ msgstr ""
1969
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:52
1970
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:44
1971
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:22
1972
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:51
1973
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:50
1974
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:52
1975
  msgctxt "s2member-admin"
@@ -1979,7 +1959,7 @@ msgstr ""
1979
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:53
1980
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:45
1981
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:23
1982
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:52
1983
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:51
1984
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:53
1985
  msgctxt "s2member-admin"
@@ -1989,7 +1969,7 @@ msgstr ""
1989
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:55
1990
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:47
1991
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:25
1992
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:54
1993
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:53
1994
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:55
1995
  msgctxt "s2member-admin"
@@ -1999,7 +1979,7 @@ msgstr ""
1999
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:56
2000
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:48
2001
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:26
2002
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:55
2003
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:54
2004
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:56
2005
  msgctxt "s2member-admin"
@@ -2009,7 +1989,7 @@ msgstr ""
2009
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:57
2010
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:49
2011
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:27
2012
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:56
2013
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:55
2014
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:57
2015
  msgctxt "s2member-admin"
@@ -2019,7 +1999,7 @@ msgstr ""
2019
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:58
2020
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:50
2021
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:28
2022
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:57
2023
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:56
2024
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:58
2025
  msgctxt "s2member-admin"
@@ -2029,7 +2009,7 @@ msgstr ""
2029
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:59
2030
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:51
2031
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:29
2032
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:58
2033
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:57
2034
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:59
2035
  msgctxt "s2member-admin"
@@ -2039,7 +2019,7 @@ msgstr ""
2039
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:60
2040
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:52
2041
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:30
2042
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:59
2043
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:58
2044
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:60
2045
  msgctxt "s2member-admin"
@@ -2049,7 +2029,7 @@ msgstr ""
2049
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:62
2050
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:54
2051
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:32
2052
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:61
2053
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:60
2054
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:62
2055
  msgctxt "s2member-admin"
@@ -2058,7 +2038,7 @@ msgstr ""
2058
 
2059
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:63
2060
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:55
2061
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:62
2062
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:61
2063
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:63
2064
  msgctxt "s2member-admin"
@@ -2067,7 +2047,7 @@ msgstr ""
2067
 
2068
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:64
2069
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:56
2070
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:63
2071
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:62
2072
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:64
2073
  msgctxt "s2member-admin"
@@ -2076,7 +2056,7 @@ msgstr ""
2076
 
2077
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:65
2078
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:57
2079
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:64
2080
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:63
2081
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:65
2082
  msgctxt "s2member-admin"
@@ -2085,7 +2065,7 @@ msgstr ""
2085
 
2086
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:66
2087
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:58
2088
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:65
2089
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:64
2090
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:66
2091
  msgctxt "s2member-admin"
@@ -2094,7 +2074,7 @@ msgstr ""
2094
 
2095
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:68
2096
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:60
2097
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:67
2098
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:66
2099
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:68
2100
  msgctxt "s2member-admin"
@@ -2404,6 +2384,7 @@ msgstr ""
2404
  #: s2member/includes/templates/options/paypal-sp-hours.php:47
2405
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:47
2406
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:47
 
2407
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:47
2408
  #: s2member-pro/includes/templates/options/google-sp-hours.php:47
2409
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:47
@@ -2414,6 +2395,7 @@ msgstr ""
2414
  #: s2member/includes/templates/options/paypal-sp-hours.php:48
2415
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:48
2416
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:48
 
2417
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:48
2418
  #: s2member-pro/includes/templates/options/google-sp-hours.php:48
2419
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:48
@@ -2424,6 +2406,7 @@ msgstr ""
2424
  #: s2member/includes/templates/options/paypal-sp-hours.php:49
2425
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:49
2426
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:49
 
2427
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:49
2428
  #: s2member-pro/includes/templates/options/google-sp-hours.php:49
2429
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:49
@@ -2434,6 +2417,7 @@ msgstr ""
2434
  #: s2member/includes/templates/options/paypal-sp-hours.php:50
2435
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:50
2436
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:50
 
2437
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:50
2438
  #: s2member-pro/includes/templates/options/google-sp-hours.php:50
2439
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:50
@@ -2441,6 +2425,17 @@ msgctxt "s2member-admin"
2441
  msgid "Buy Now (Specific Post/Page, link valid for 5 years)"
2442
  msgstr ""
2443
 
 
 
 
 
 
 
 
 
 
 
 
2444
  #: s2member-pro/includes/classes/gateways/alipay/alipay-return-in.inc.php:117
2445
  msgctxt "s2member-front"
2446
  msgid ""
@@ -2556,184 +2551,184 @@ msgctxt "s2member-front"
2556
  msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
2557
  msgstr ""
2558
 
2559
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:161
2560
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:270
2561
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:416
2562
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:554
2563
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:763
2564
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:166
2565
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:275
2566
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:422
2567
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:560
2568
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:771
2569
  msgctxt "s2member-front"
2570
  msgid "Security Code"
2571
  msgstr ""
2572
 
2573
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:237
2574
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:730
2575
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:243
2576
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:739
2577
  msgctxt "s2member-front"
2578
  msgid "Additional Info"
2579
  msgstr ""
2580
 
2581
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:371
2582
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:509
2583
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:682
2584
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:377
2585
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
2586
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
2587
  msgctxt "s2member-front"
2588
  msgid "Visa"
2589
  msgstr ""
2590
 
2591
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:371
2592
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:509
2593
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:682
2594
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:377
2595
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
2596
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
2597
  msgctxt "s2member-front"
2598
  msgid "MasterCard"
2599
  msgstr ""
2600
 
2601
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:371
2602
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:509
2603
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:682
2604
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:377
2605
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
2606
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
2607
  msgctxt "s2member-front"
2608
  msgid "Discover"
2609
  msgstr ""
2610
 
2611
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:371
2612
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:509
2613
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:682
2614
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:377
2615
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
2616
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
2617
  msgctxt "s2member-front"
2618
  msgid "American Express"
2619
  msgstr ""
2620
 
2621
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2622
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2623
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2624
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2625
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2626
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2627
  msgctxt "s2member-front"
2628
  msgid "01 January"
2629
  msgstr ""
2630
 
2631
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2632
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2633
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2634
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2635
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2636
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2637
  msgctxt "s2member-front"
2638
  msgid "02 February"
2639
  msgstr ""
2640
 
2641
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2642
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2643
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2644
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2645
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2646
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2647
  msgctxt "s2member-front"
2648
  msgid "03 March"
2649
  msgstr ""
2650
 
2651
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2652
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2653
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2654
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2655
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2656
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2657
  msgctxt "s2member-front"
2658
  msgid "04 April"
2659
  msgstr ""
2660
 
2661
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2662
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2663
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2664
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2665
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2666
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2667
  msgctxt "s2member-front"
2668
  msgid "05 May"
2669
  msgstr ""
2670
 
2671
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2672
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2673
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2674
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2675
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2676
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2677
  msgctxt "s2member-front"
2678
  msgid "06 June"
2679
  msgstr ""
2680
 
2681
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2682
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2683
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2684
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2685
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2686
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2687
  msgctxt "s2member-front"
2688
  msgid "07 July"
2689
  msgstr ""
2690
 
2691
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2692
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2693
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2694
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2695
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2696
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2697
  msgctxt "s2member-front"
2698
  msgid "08 August"
2699
  msgstr ""
2700
 
2701
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2702
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2703
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2704
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2705
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2706
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2707
  msgctxt "s2member-front"
2708
  msgid "09 September"
2709
  msgstr ""
2710
 
2711
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2712
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2713
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2714
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2715
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2716
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2717
  msgctxt "s2member-front"
2718
  msgid "10 October"
2719
  msgstr ""
2720
 
2721
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2722
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2723
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2724
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2725
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2726
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2727
  msgctxt "s2member-front"
2728
  msgid "11 November"
2729
  msgstr ""
2730
 
2731
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:381
2732
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:519
2733
- #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:692
2734
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:387
2735
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:525
2736
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:701
2737
  msgctxt "s2member-front"
2738
  msgid "12 December"
2739
  msgstr ""
@@ -3639,85 +3634,6 @@ msgctxt "s2member-front"
3639
  msgid "<strong>Reminder:</strong> Purchases at this site will appear on your credit card or bank statement as: <code>ClickBank</code> or <code>CLKBANK*COM</code>."
3640
  msgstr ""
3641
 
3642
- #: s2member-pro/includes/classes/gateways/google/google-button-in.inc.php:93
3643
- #: s2member-pro/includes/classes/gateways/google/google-button-in.inc.php:115
3644
- #: s2member-pro/includes/classes/gateways/google/google-button-in.inc.php:137
3645
- #: s2member-pro/includes/templates/buttons/google-ccaps-checkout-button.php:7
3646
- #: s2member-pro/includes/templates/buttons/google-checkout-button.php:7
3647
- #: s2member-pro/includes/templates/buttons/google-sp-checkout-button.php:7
3648
- msgctxt "s2member-front google-button-lang-code"
3649
- msgid "en_US"
3650
- msgstr ""
3651
-
3652
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:96
3653
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:152
3654
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:212
3655
- msgctxt "s2member-front"
3656
- msgid "Grants you immediate access."
3657
- msgstr ""
3658
-
3659
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:165
3660
- msgctxt "s2member-front"
3661
- msgid "You now have access to:<br />%s<br />(<a href=\"%s\">please log back in now</a>)"
3662
- msgstr ""
3663
-
3664
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:228
3665
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:334
3666
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:455
3667
- msgctxt "s2member-front"
3668
- msgid "You've been updated to:<br />%s<br />(<a href=\"%s\">please log back in now</a>)"
3669
- msgstr ""
3670
-
3671
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:233
3672
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:339
3673
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:460
3674
- msgctxt "s2member-front"
3675
- msgid "%s<br />(the next step is to Register a Username)"
3676
- msgstr ""
3677
-
3678
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:289
3679
- msgctxt "s2member-front"
3680
- msgid "100% free trial. NO charge today."
3681
- msgstr ""
3682
-
3683
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:290
3684
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:411
3685
- msgctxt "s2member-front"
3686
- msgid "First payment for immediate access."
3687
- msgstr ""
3688
-
3689
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:306
3690
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:427
3691
- msgctxt "s2member-front"
3692
- msgid "You'll receive an email confirmation within 15 minutes."
3693
- msgstr ""
3694
-
3695
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:315
3696
- msgctxt "s2member-front"
3697
- msgid "Cancel at any time to avoid %s."
3698
- msgstr ""
3699
-
3700
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:315
3701
- msgctxt "s2member-front"
3702
- msgid "this charge"
3703
- msgstr ""
3704
-
3705
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:315
3706
- msgctxt "s2member-front"
3707
- msgid "charges"
3708
- msgstr ""
3709
-
3710
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:357
3711
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:478
3712
- msgctxt "s2member-front"
3713
- msgid "Covers ongoing access."
3714
- msgstr ""
3715
-
3716
- #: s2member-pro/includes/classes/gateways/google/google-co-in.inc.php:436
3717
- msgctxt "s2member-front"
3718
- msgid "Cancel at any time to avoid charges."
3719
- msgstr ""
3720
-
3721
  #: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:123
3722
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:247
3723
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:263
@@ -3740,28 +3656,28 @@ msgctxt "s2member-front"
3740
  msgid "<strong>Sorry.</strong> Your account is pending other changes. Please try again in 15 minutes."
3741
  msgstr ""
3742
 
3743
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:377
3744
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
3745
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
3746
  msgctxt "s2member-front"
3747
  msgid "Maestro"
3748
  msgstr ""
3749
 
3750
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:377
3751
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
3752
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
3753
  msgctxt "s2member-front"
3754
  msgid "Solo"
3755
  msgstr ""
3756
 
3757
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:515
3758
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:691
3759
  msgctxt "s2member-front"
3760
  msgid "PayPal"
3761
  msgstr ""
3762
 
3763
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:606
3764
- #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:818
3765
  msgctxt "s2member-front"
3766
  msgid "We Accept PayPal"
3767
  msgstr ""
@@ -4018,6 +3934,12 @@ msgctxt "s2member-front"
4018
  msgid "Your Profile"
4019
  msgstr ""
4020
 
 
 
 
 
 
 
4021
  #: s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
4022
  #: s2member-pro/includes/separates/gateways/paypal/paypal.js:269
4023
  #: s2member-pro/includes/separates/gateways/paypal/paypal.js:270
@@ -4625,13 +4547,13 @@ msgid "31 Days"
4625
  msgstr ""
4626
 
4627
  #: s2member-pro/includes/templates/options/google-membership-ccap-terms.php:6
4628
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:42
4629
  msgctxt "s2member-admin"
4630
  msgid "Google (Buy Now)"
4631
  msgstr ""
4632
 
4633
  #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:6
4634
- #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:18
4635
  msgctxt "s2member-admin"
4636
  msgid "Google (Subscriptions)"
4637
  msgstr ""
1
+ # Copyright (C) 2010
2
+ # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
+ "POT-Creation-Date: 2013-11-26 12:09:36+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
17
  msgid "Max failed logins. Please wait %s and try again."
18
  msgstr ""
19
 
20
+ #: s2member/includes/classes/custom-reg-fields.inc.php:331
21
+ #: s2member/includes/classes/custom-reg-fields.inc.php:467
22
  #: s2member/includes/classes/profile-in.inc.php:120
23
  #: s2member/includes/classes/sc-profile-in.inc.php:136
24
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:66
31
  msgid "First Name"
32
  msgstr ""
33
 
34
+ #: s2member/includes/classes/custom-reg-fields.inc.php:343
35
+ #: s2member/includes/classes/custom-reg-fields.inc.php:482
36
  #: s2member/includes/classes/profile-in.inc.php:140
37
  #: s2member/includes/classes/sc-profile-in.inc.php:156
38
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:72
45
  msgid "Last Name"
46
  msgstr ""
47
 
48
+ #: s2member/includes/classes/custom-reg-fields.inc.php:440
49
+ #: s2member/includes/classes/custom-reg-fields.inc.php:445
50
  #: s2member/includes/classes/profile-in.inc.php:233
51
  #: s2member/includes/classes/profile-in.inc.php:239
52
  #: s2member/includes/classes/sc-profile-in.inc.php:249
55
  msgid "Please type your Password twice to confirm."
56
  msgstr ""
57
 
58
+ #: s2member/includes/classes/custom-reg-fields.inc.php:441
59
  msgctxt "s2member-front"
60
  msgid "Password (please type it twice)"
61
  msgstr ""
62
 
63
+ #: s2member/includes/classes/custom-reg-fields.inc.php:449
64
  #: s2member/includes/classes/profile-in.inc.php:243
65
  #: s2member/includes/classes/sc-profile-in.inc.php:259
66
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:94
504
  msgid "<strong>ERROR</strong>: Max simultaneous logins for username: %1$s. Please wait %2$s and try again."
505
  msgstr ""
506
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
507
  #: s2member/includes/classes/paypal-return-in-no-tx-data.inc.php:66
508
  #: s2member/includes/classes/paypal-return-in-proxy-ty-email.inc.php:64
509
  msgctxt "s2member-front"
548
  msgid "Continue (Click Here)"
549
  msgstr ""
550
 
551
+ #: s2member/includes/classes/paypal-return-in-subscr-modify-w-level.inc.php:187
552
+ #: s2member/includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php:234
553
+ msgctxt "s2member-front"
554
+ msgid "Thank you! You've been updated to:"
555
+ msgstr ""
556
+
557
  #: s2member/includes/classes/paypal-return-in-subscr-modify-w-level.inc.php:188
558
  #: s2member/includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php:235
559
  #: s2member/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:145
593
  msgid "Please Register Now (Click Here)"
594
  msgstr ""
595
 
596
+ #: s2member/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:144
597
+ msgctxt "s2member-front"
598
+ msgid "Thank you! You now have access to:"
599
+ msgstr ""
600
+
601
  #: s2member/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:155
602
  msgctxt "s2member-front"
603
  msgid "<strong>ERROR:</strong> Unable to add new Capabilities.<br />Please contact Support for assistance.<br /><br />The existing User ID is associated with an Administrator. Stopping here. Otherwise, an Administrator could lose access. Please make sure that you are NOT logged in as an Administrator while testing."
711
 
712
  #: s2member/includes/classes/profile-in.inc.php:98
713
  #: s2member/includes/classes/sc-profile-in.inc.php:114
714
+ #: s2member-pro/includes/separates/gateways/google/google-min.js:1
715
+ #: s2member-pro/includes/separates/gateways/google/google.js:39
716
  #: s2member-pro/includes/templates/forms/authnet-checkout-form.php:78
717
  #: s2member-pro/includes/templates/forms/authnet-registration-form.php:46
718
  #: s2member-pro/includes/templates/forms/authnet-sp-checkout-form.php:78
793
  msgstr ""
794
 
795
  #: s2member/includes/classes/sc-paypal-button-e.inc.php:77
796
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:73
797
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:96
798
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:150
799
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:205
800
  #: s2member/includes/templates/buttons/paypal-cancellation-button.php:7
801
  #: s2member/includes/templates/buttons/paypal-ccaps-checkout-button.php:34
802
  #: s2member/includes/templates/buttons/paypal-checkout-button.php:46
1435
  msgid "en"
1436
  msgstr ""
1437
 
1438
+ #: s2member/includes/syscon.inc.php:152
1439
  msgctxt "s2member-front"
1440
  msgid "Yes, I want to receive updates via email."
1441
  msgstr ""
1442
 
1443
+ #: s2member/includes/syscon.inc.php:206
1444
  msgctxt "s2member-front"
1445
  msgid "[%s] Username/Password"
1446
  msgstr ""
1447
 
1448
+ #: s2member/includes/syscon.inc.php:207
1449
  msgctxt "s2member-front"
1450
  msgid ""
1451
  "Your Username/Password for:\n"
1456
  "%%%%wp_login_url%%%%"
1457
  msgstr ""
1458
 
1459
+ #: s2member/includes/syscon.inc.php:210
1460
  msgctxt "s2member-front"
1461
  msgid "[%s] New User Registration"
1462
  msgstr ""
1463
 
1464
+ #: s2member/includes/syscon.inc.php:211
1465
  msgctxt "s2member-front"
1466
  msgid ""
1467
  "New User Registration on your site:\n"
1473
  "IP Address: %%%%user_ip%%%%"
1474
  msgstr ""
1475
 
1476
+ #: s2member/includes/syscon.inc.php:232 s2member-pro/includes/syscon.inc.php:94
1477
  msgctxt "s2member-front"
1478
  msgid "Congratulations! (your membership has been approved)"
1479
  msgstr ""
1480
 
1481
+ #: s2member/includes/syscon.inc.php:233
1482
  msgctxt "s2member-front"
1483
  msgid ""
1484
  "Thanks %%%%first_name%%%%! Your membership has been approved.\n"
1494
  "%s"
1495
  msgstr ""
1496
 
1497
+ #: s2member/includes/syscon.inc.php:236 s2member/includes/syscon.inc.php:240
1498
+ msgctxt "s2member-front"
1499
+ msgid "Thank you! Your account has been updated."
1500
+ msgstr ""
1501
+
1502
+ #: s2member/includes/syscon.inc.php:237 s2member/includes/syscon.inc.php:241
1503
+ msgctxt "s2member-front"
1504
+ msgid ""
1505
+ "Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n"
1506
+ "\n"
1507
+ "If you have any trouble, please feel free to contact us.\n"
1508
+ "\n"
1509
+ "Best Regards,\n"
1510
+ "%s"
1511
+ msgstr ""
1512
+
1513
+ #: s2member/includes/syscon.inc.php:244 s2member-pro/includes/syscon.inc.php:98
1514
  msgctxt "s2member-front"
1515
  msgid "Thank You! (instructions for access)"
1516
  msgstr ""
1517
 
1518
+ #: s2member/includes/syscon.inc.php:245
1519
  msgctxt "s2member-front"
1520
  msgid ""
1521
  "Thanks %%%%first_name%%%%!\n"
1524
  "\n"
1525
  "Your order can be retrieved here:\n"
1526
  "%%%%sp_access_url%%%%\n"
1527
+ "(link expires in %%%%sp_access_exp%%%%)\n"
1528
  "\n"
1529
  "If you have any trouble, please feel free to contact us.\n"
1530
  "\n"
1532
  "%s"
1533
  msgstr ""
1534
 
1535
+ #: s2member/includes/syscon.inc.php:273
1536
  msgctxt "s2member-front"
1537
  msgid "Free Subscriber"
1538
  msgstr ""
1539
 
1540
+ #: s2member/includes/syscon.inc.php:273
1541
  msgctxt "s2member-front"
1542
  msgid "Bronze Member"
1543
  msgstr ""
1544
 
1545
+ #: s2member/includes/syscon.inc.php:273
1546
  msgctxt "s2member-front"
1547
  msgid "Silver Member"
1548
  msgstr ""
1549
 
1550
+ #: s2member/includes/syscon.inc.php:273
1551
  msgctxt "s2member-front"
1552
  msgid "Gold Member"
1553
  msgstr ""
1554
 
1555
+ #: s2member/includes/syscon.inc.php:273
1556
  msgctxt "s2member-front"
1557
  msgid "Platinum Member"
1558
  msgstr ""
1559
 
1560
+ #: s2member/includes/syscon.inc.php:273
1561
  msgctxt "s2member-front"
1562
  msgid "Level %s Member"
1563
  msgstr ""
1690
  msgstr ""
1691
 
1692
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:7
 
1693
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:7
1694
  msgctxt "s2member-admin"
1695
  msgid "Daily (recurring charge, for ongoing access)"
1697
 
1698
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:8
1699
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:7
 
1700
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:7
1701
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:8
1702
  msgctxt "s2member-admin"
1705
 
1706
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:9
1707
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:8
 
1708
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:8
1709
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:9
1710
  msgctxt "s2member-admin"
1714
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:10
1715
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:9
1716
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:7
1717
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:7
1718
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:9
1719
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:10
1720
  msgctxt "s2member-admin"
1724
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:11
1725
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:10
1726
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:8
 
1727
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:11
1728
  msgctxt "s2member-admin"
1729
  msgid "Bi-Monthly (recurring charge, for ongoing access)"
1732
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:12
1733
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:11
1734
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:9
 
1735
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:10
1736
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:12
1737
  msgctxt "s2member-admin"
1748
 
1749
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:14
1750
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:13
 
1751
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:12
1752
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:14
1753
  msgctxt "s2member-admin"
1755
  msgstr ""
1756
 
1757
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:20
 
1758
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:18
1759
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:20
1760
  msgctxt "s2member-admin"
1762
  msgstr ""
1763
 
1764
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:21
 
1765
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:19
1766
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:21
1767
  msgctxt "s2member-admin"
1769
  msgstr ""
1770
 
1771
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:22
 
1772
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:20
1773
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:22
1774
  msgctxt "s2member-admin"
1776
  msgstr ""
1777
 
1778
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:23
 
1779
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:21
1780
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:23
1781
  msgctxt "s2member-admin"
1783
  msgstr ""
1784
 
1785
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:24
 
1786
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:22
1787
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:24
1788
  msgctxt "s2member-admin"
1790
  msgstr ""
1791
 
1792
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:25
 
1793
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:23
1794
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:25
1795
  msgctxt "s2member-admin"
1798
 
1799
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:27
1800
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:19
 
1801
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:25
1802
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:27
1803
  msgctxt "s2member-admin"
1806
 
1807
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:28
1808
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:20
 
1809
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:26
1810
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:28
1811
  msgctxt "s2member-admin"
1814
 
1815
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:29
1816
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:21
 
1817
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:27
1818
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:29
1819
  msgctxt "s2member-admin"
1822
 
1823
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:31
1824
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:23
1825
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:13
1826
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:29
1827
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:31
1828
  msgctxt "s2member-admin"
1831
 
1832
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:32
1833
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:24
 
1834
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:30
1835
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:32
1836
  msgctxt "s2member-admin"
1839
 
1840
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:33
1841
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:25
 
1842
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:31
1843
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:33
1844
  msgctxt "s2member-admin"
1847
 
1848
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:34
1849
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:26
 
1850
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:32
1851
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:34
1852
  msgctxt "s2member-admin"
1855
 
1856
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:35
1857
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:27
 
1858
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:33
1859
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:35
1860
  msgctxt "s2member-admin"
1863
 
1864
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:36
1865
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:28
 
1866
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:34
1867
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:36
1868
  msgctxt "s2member-admin"
1871
 
1872
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:38
1873
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:30
 
1874
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:36
1875
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:38
1876
  msgctxt "s2member-admin"
1879
 
1880
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:44
1881
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:36
1882
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:19
1883
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:42
1884
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:44
1885
  msgctxt "s2member-admin"
1889
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:45
1890
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:37
1891
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:15
1892
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:20
1893
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:43
1894
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:45
1895
  msgctxt "s2member-admin"
1899
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:46
1900
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:38
1901
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:16
1902
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:21
1903
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:44
1904
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:46
1905
  msgctxt "s2member-admin"
1909
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:47
1910
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:39
1911
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:17
1912
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:22
1913
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:45
1914
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:47
1915
  msgctxt "s2member-admin"
1919
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:48
1920
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:40
1921
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:18
1922
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:23
1923
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:46
1924
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:48
1925
  msgctxt "s2member-admin"
1929
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:49
1930
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:41
1931
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:19
1932
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:24
1933
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:47
1934
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:49
1935
  msgctxt "s2member-admin"
1939
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:51
1940
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:43
1941
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:21
1942
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:26
1943
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:49
1944
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:51
1945
  msgctxt "s2member-admin"
1949
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:52
1950
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:44
1951
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:22
1952
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:27
1953
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:50
1954
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:52
1955
  msgctxt "s2member-admin"
1959
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:53
1960
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:45
1961
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:23
1962
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:28
1963
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:51
1964
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:53
1965
  msgctxt "s2member-admin"
1969
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:55
1970
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:47
1971
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:25
1972
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:30
1973
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:53
1974
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:55
1975
  msgctxt "s2member-admin"
1979
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:56
1980
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:48
1981
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:26
1982
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:31
1983
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:54
1984
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:56
1985
  msgctxt "s2member-admin"
1989
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:57
1990
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:49
1991
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:27
1992
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:32
1993
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:55
1994
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:57
1995
  msgctxt "s2member-admin"
1999
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:58
2000
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:50
2001
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:28
2002
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:33
2003
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:56
2004
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:58
2005
  msgctxt "s2member-admin"
2009
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:59
2010
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:51
2011
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:29
2012
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:34
2013
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:57
2014
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:59
2015
  msgctxt "s2member-admin"
2019
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:60
2020
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:52
2021
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:30
2022
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:35
2023
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:58
2024
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:60
2025
  msgctxt "s2member-admin"
2029
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:62
2030
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:54
2031
  #: s2member-pro/includes/templates/options/ccbill-membership-regular-terms.php:32
2032
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:37
2033
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:60
2034
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:62
2035
  msgctxt "s2member-admin"
2038
 
2039
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:63
2040
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:55
2041
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:38
2042
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:61
2043
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:63
2044
  msgctxt "s2member-admin"
2047
 
2048
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:64
2049
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:56
2050
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:39
2051
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:62
2052
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:64
2053
  msgctxt "s2member-admin"
2056
 
2057
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:65
2058
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:57
2059
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:40
2060
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:63
2061
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:65
2062
  msgctxt "s2member-admin"
2065
 
2066
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:66
2067
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:58
2068
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:41
2069
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:64
2070
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:66
2071
  msgctxt "s2member-admin"
2074
 
2075
  #: s2member/includes/templates/options/paypal-membership-regular-terms.php:68
2076
  #: s2member-pro/includes/templates/options/authnet-membership-regular-terms.php:60
2077
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:43
2078
  #: s2member-pro/includes/templates/options/payflow-membership-regular-terms.php:66
2079
  #: s2member-pro/includes/templates/options/paypal-membership-regular-terms.php:68
2080
  msgctxt "s2member-admin"
2384
  #: s2member/includes/templates/options/paypal-sp-hours.php:47
2385
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:47
2386
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:47
2387
+ #: s2member-pro/includes/templates/options/ccbill-sp-hours.php:35
2388
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:47
2389
  #: s2member-pro/includes/templates/options/google-sp-hours.php:47
2390
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:47
2395
  #: s2member/includes/templates/options/paypal-sp-hours.php:48
2396
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:48
2397
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:48
2398
+ #: s2member-pro/includes/templates/options/ccbill-sp-hours.php:36
2399
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:48
2400
  #: s2member-pro/includes/templates/options/google-sp-hours.php:48
2401
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:48
2406
  #: s2member/includes/templates/options/paypal-sp-hours.php:49
2407
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:49
2408
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:49
2409
+ #: s2member-pro/includes/templates/options/ccbill-sp-hours.php:37
2410
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:49
2411
  #: s2member-pro/includes/templates/options/google-sp-hours.php:49
2412
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:49
2417
  #: s2member/includes/templates/options/paypal-sp-hours.php:50
2418
  #: s2member-pro/includes/templates/options/alipay-sp-hours.php:50
2419
  #: s2member-pro/includes/templates/options/authnet-sp-hours.php:50
2420
+ #: s2member-pro/includes/templates/options/ccbill-sp-hours.php:38
2421
  #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:50
2422
  #: s2member-pro/includes/templates/options/google-sp-hours.php:50
2423
  #: s2member-pro/includes/templates/options/paypal-sp-hours.php:50
2425
  msgid "Buy Now (Specific Post/Page, link valid for 5 years)"
2426
  msgstr ""
2427
 
2428
+ #: s2member/includes/templates/options/paypal-sp-hours.php:51
2429
+ #: s2member-pro/includes/templates/options/alipay-sp-hours.php:51
2430
+ #: s2member-pro/includes/templates/options/authnet-sp-hours.php:51
2431
+ #: s2member-pro/includes/templates/options/ccbill-sp-hours.php:39
2432
+ #: s2member-pro/includes/templates/options/clickbank-sp-hours.php:51
2433
+ #: s2member-pro/includes/templates/options/google-sp-hours.php:51
2434
+ #: s2member-pro/includes/templates/options/paypal-sp-hours.php:51
2435
+ msgctxt "s2member-admin"
2436
+ msgid "Buy Now (Specific Post/Page, link valid for 50 years)"
2437
+ msgstr ""
2438
+
2439
  #: s2member-pro/includes/classes/gateways/alipay/alipay-return-in.inc.php:117
2440
  msgctxt "s2member-front"
2441
  msgid ""
2551
  msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
2552
  msgstr ""
2553
 
2554
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:162
2555
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:271
2556
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:417
2557
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:555
2558
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:764
2559
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:167
2560
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:276
2561
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:423
2562
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:561
2563
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:772
2564
  msgctxt "s2member-front"
2565
  msgid "Security Code"
2566
  msgstr ""
2567
 
2568
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:238
2569
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:731
2570
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:244
2571
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:740
2572
  msgctxt "s2member-front"
2573
  msgid "Additional Info"
2574
  msgstr ""
2575
 
2576
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:372
2577
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:510
2578
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:683
2579
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:378
2580
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
2581
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
2582
  msgctxt "s2member-front"
2583
  msgid "Visa"
2584
  msgstr ""
2585
 
2586
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:372
2587
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:510
2588
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:683
2589
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:378
2590
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
2591
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
2592
  msgctxt "s2member-front"
2593
  msgid "MasterCard"
2594
  msgstr ""
2595
 
2596
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:372
2597
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:510
2598
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:683
2599
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:378
2600
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
2601
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
2602
  msgctxt "s2member-front"
2603
  msgid "Discover"
2604
  msgstr ""
2605
 
2606
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:372
2607
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:510
2608
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:683
2609
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:378
2610
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
2611
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
2612
  msgctxt "s2member-front"
2613
  msgid "American Express"
2614
  msgstr ""
2615
 
2616
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2617
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2618
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2619
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2620
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2621
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2622
  msgctxt "s2member-front"
2623
  msgid "01 January"
2624
  msgstr ""
2625
 
2626
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2627
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2628
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2629
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2630
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2631
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2632
  msgctxt "s2member-front"
2633
  msgid "02 February"
2634
  msgstr ""
2635
 
2636
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2637
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2638
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2639
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2640
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2641
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2642
  msgctxt "s2member-front"
2643
  msgid "03 March"
2644
  msgstr ""
2645
 
2646
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2647
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2648
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2649
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2650
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2651
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2652
  msgctxt "s2member-front"
2653
  msgid "04 April"
2654
  msgstr ""
2655
 
2656
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2657
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2658
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2659
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2660
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2661
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2662
  msgctxt "s2member-front"
2663
  msgid "05 May"
2664
  msgstr ""
2665
 
2666
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2667
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2668
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2669
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2670
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2671
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2672
  msgctxt "s2member-front"
2673
  msgid "06 June"
2674
  msgstr ""
2675
 
2676
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2677
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2678
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2679
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2680
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2681
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2682
  msgctxt "s2member-front"
2683
  msgid "07 July"
2684
  msgstr ""
2685
 
2686
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2687
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2688
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2689
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2690
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2691
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2692
  msgctxt "s2member-front"
2693
  msgid "08 August"
2694
  msgstr ""
2695
 
2696
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2697
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2698
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2699
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2700
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2701
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2702
  msgctxt "s2member-front"
2703
  msgid "09 September"
2704
  msgstr ""
2705
 
2706
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2707
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2708
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2709
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2710
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2711
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2712
  msgctxt "s2member-front"
2713
  msgid "10 October"
2714
  msgstr ""
2715
 
2716
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2717
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2718
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2719
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2720
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2721
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2722
  msgctxt "s2member-front"
2723
  msgid "11 November"
2724
  msgstr ""
2725
 
2726
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:382
2727
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:520
2728
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:693
2729
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:388
2730
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:526
2731
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:702
2732
  msgctxt "s2member-front"
2733
  msgid "12 December"
2734
  msgstr ""
3634
  msgid "<strong>Reminder:</strong> Purchases at this site will appear on your credit card or bank statement as: <code>ClickBank</code> or <code>CLKBANK*COM</code>."
3635
  msgstr ""
3636
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3637
  #: s2member-pro/includes/classes/gateways/paypal/paypal-cancellation-in.inc.php:123
3638
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:247
3639
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:263
3656
  msgid "<strong>Sorry.</strong> Your account is pending other changes. Please try again in 15 minutes."
3657
  msgstr ""
3658
 
3659
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:378
3660
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
3661
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
3662
  msgctxt "s2member-front"
3663
  msgid "Maestro"
3664
  msgstr ""
3665
 
3666
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:378
3667
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
3668
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
3669
  msgctxt "s2member-front"
3670
  msgid "Solo"
3671
  msgstr ""
3672
 
3673
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:516
3674
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:692
3675
  msgctxt "s2member-front"
3676
  msgid "PayPal"
3677
  msgstr ""
3678
 
3679
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:607
3680
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:819
3681
  msgctxt "s2member-front"
3682
  msgid "We Accept PayPal"
3683
  msgstr ""
3934
  msgid "Your Profile"
3935
  msgstr ""
3936
 
3937
+ #: s2member-pro/includes/separates/gateways/google/google-min.js:1
3938
+ #: s2member-pro/includes/separates/gateways/google/google.js:49
3939
+ msgctxt "s2member-front"
3940
+ msgid "Thank you! Please check your email for further details."
3941
+ msgstr ""
3942
+
3943
  #: s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
3944
  #: s2member-pro/includes/separates/gateways/paypal/paypal.js:269
3945
  #: s2member-pro/includes/separates/gateways/paypal/paypal.js:270
4547
  msgstr ""
4548
 
4549
  #: s2member-pro/includes/templates/options/google-membership-ccap-terms.php:6
4550
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:18
4551
  msgctxt "s2member-admin"
4552
  msgid "Google (Buy Now)"
4553
  msgstr ""
4554
 
4555
  #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:6
4556
+ #: s2member-pro/includes/templates/options/google-membership-regular-terms.php:12
4557
  msgctxt "s2member-admin"
4558
  msgid "Google (Subscriptions)"
4559
  msgstr ""
index.php DELETED
File without changes
licensing/index.php DELETED
File without changes
licensing/license.txt CHANGED
@@ -1,46 +1,36 @@
1
- Copyright: © 2009 WebSharks, Inc. (coded in the USA)
2
- <mailto:support@websharks-inc.com> <http://www.websharks-inc.com/>
3
 
4
- Released under the terms of the GNU General Public License.
5
- <http://www.gnu.org/licenses/> - attached as [gpl.txt].
6
 
7
- Credits / Additional Acknowledgments:
8
 
9
  * Software designed for WordPress®.
10
  - GPL License <http://codex.wordpress.org/GPL>
11
  - WordPress® <http://wordpress.org>
12
-
13
  * JavaScript extensions require jQuery.
14
  - GPL License <http://jquery.org/license>
15
  - jQuery <http://jquery.com/>
16
-
17
  * Readme parsing routines, powered (in part) by PHP Markdown.
18
  - BSD / GPL Compatible License <http://michelf.com/projects/php-markdown/license/>
19
  - PHP Markdown <http://michelf.com/projects/php-markdown/>
20
-
21
  * Administration panel (tools icon) was provided by Everaldo.com.
22
  - LGPL License <http://www.everaldo.com/crystal/?action=license>
23
  - Everaldo <http://www.everaldo.com/crystal/?action=downloads>
24
-
25
  * Administration panel (videos icon) was provided by David Vignoni.
26
  - LGPL License <http://www.iconfinder.com/search/?q=iconset%3Anuvola2>
27
  - David Vignoni <http://www.icon-king.com/>
28
-
29
  * PayPal® and its associated API, buttons & services have been integrated into this software via external hyperlinks.
30
  The files/services provided by PayPal® are not distributed with this software. They have their own terms & conditions.
31
  - PayPal®, a 3rd party service, is powered by eBay, Inc. <http://www.paypal.com/>
32
  - PayPal® is a trademark of eBay, Inc. <http://www.ebay.com/>
33
-
34
  * The W3C® and its associated validator & services have been integrated into this software via external hyperlinks.
35
  The files/services provided by the W3C® are not distributed with this software. They have their own terms & conditions.
36
  - The W3C®, a 3rd party service, is powered by the World Wide Web Consortium <http://validator.w3.org/>
37
  - W3C® is a trademark of the World Wide Web Consortium. <http://www.w3.org/>
38
-
39
  * The MailChimp® services have been integrated into this software through a GPL compatible API & hyperlinks.
40
  The services provided by MailChimp® are not distributed with this software. They have their own terms & conditions.
41
  - MailChimp®, a 3rd party service, is powered by The Rocket Science Group, LLC <http://www.mailchimp.com/>
42
  - MailChimp® is a trademark of The Rocket Science Group, LLC. <http://www.mailchimp.com/terms-policies/terms-of-use/>
43
-
44
  * The AWeber® services have been integrated into this software through hyperlinks & email commands.
45
  The services provided by AWeber® are not distributed with this software. They have their own terms & conditions.
46
  - AWeber®, a 3rd party service, is powered by AWeber Communications <http://www.aweber.com/about.htm>
1
+ Copyright: © 2013 [WebSharks, Inc.](http://www.websharks-inc.com/bizdev/) (coded in the USA)
 
2
 
3
+ Released under the terms of the [GNU General Public License](http://www.gnu.org/licenses/gpl-2.0.html).
 
4
 
5
+ = Credits / Additional Acknowledgments =
6
 
7
  * Software designed for WordPress®.
8
  - GPL License <http://codex.wordpress.org/GPL>
9
  - WordPress® <http://wordpress.org>
 
10
  * JavaScript extensions require jQuery.
11
  - GPL License <http://jquery.org/license>
12
  - jQuery <http://jquery.com/>
 
13
  * Readme parsing routines, powered (in part) by PHP Markdown.
14
  - BSD / GPL Compatible License <http://michelf.com/projects/php-markdown/license/>
15
  - PHP Markdown <http://michelf.com/projects/php-markdown/>
 
16
  * Administration panel (tools icon) was provided by Everaldo.com.
17
  - LGPL License <http://www.everaldo.com/crystal/?action=license>
18
  - Everaldo <http://www.everaldo.com/crystal/?action=downloads>
 
19
  * Administration panel (videos icon) was provided by David Vignoni.
20
  - LGPL License <http://www.iconfinder.com/search/?q=iconset%3Anuvola2>
21
  - David Vignoni <http://www.icon-king.com/>
 
22
  * PayPal® and its associated API, buttons & services have been integrated into this software via external hyperlinks.
23
  The files/services provided by PayPal® are not distributed with this software. They have their own terms & conditions.
24
  - PayPal®, a 3rd party service, is powered by eBay, Inc. <http://www.paypal.com/>
25
  - PayPal® is a trademark of eBay, Inc. <http://www.ebay.com/>
 
26
  * The W3C® and its associated validator & services have been integrated into this software via external hyperlinks.
27
  The files/services provided by the W3C® are not distributed with this software. They have their own terms & conditions.
28
  - The W3C®, a 3rd party service, is powered by the World Wide Web Consortium <http://validator.w3.org/>
29
  - W3C® is a trademark of the World Wide Web Consortium. <http://www.w3.org/>
 
30
  * The MailChimp® services have been integrated into this software through a GPL compatible API & hyperlinks.
31
  The services provided by MailChimp® are not distributed with this software. They have their own terms & conditions.
32
  - MailChimp®, a 3rd party service, is powered by The Rocket Science Group, LLC <http://www.mailchimp.com/>
33
  - MailChimp® is a trademark of The Rocket Science Group, LLC. <http://www.mailchimp.com/terms-policies/terms-of-use/>
 
34
  * The AWeber® services have been integrated into this software through hyperlinks & email commands.
35
  The services provided by AWeber® are not distributed with this software. They have their own terms & conditions.
36
  - AWeber®, a 3rd party service, is powered by AWeber Communications <http://www.aweber.com/about.htm>
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
- Version: 131109
4
- Stable tag: 131109
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
@@ -44,23 +44,10 @@ PayPal Pro Integration: http://www.s2member.com/videos/ED70D90C6749DA3D/
44
  Professional Installation URI: http://www.s2member.com/professional-installation/
45
 
46
  Description: s2Member® — a powerful (free) membership plugin for WordPress®. Protect members only content with roles/capabilities.
47
- Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, paypal pro, pay pal, authorize, authorize.net, google checkout, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
48
 
49
  s2Member® — a powerful (free) membership plugin for WordPress®. Protect members only content with roles/capabilities.
50
 
51
- == Installation ==
52
-
53
- = s2Member® is very easy to install (instructions) =
54
- 1. Upload the `/s2member` folder to your `/wp-content/plugins/` directory.
55
- 2. Activate the plugin through the `Plugins` menu in WordPress®.
56
- 3. Navigate to the `s2Member® Options` panel for configuration details.
57
-
58
- = See Also (s2Member.com) =
59
- [Detailed installation/upgrade instructions](http://www.s2member.com/framework/#!s2_tab_jump=s2-framework-install-update).
60
-
61
- = Is s2Member compatible with Multisite Networking? =
62
- Yes. s2Member and s2Member Pro, are also both compatible with Multisite Networking. After you enable Multisite Networking, install the s2Member plugin. Then navigate to `s2Member -› Multisite (Config)` in the Dashboard on your Main Site.
63
-
64
  == Description ==
65
 
66
  [youtube http://www.youtube.com/watch?v=2C3Lan7vxw0 /]
@@ -73,6 +60,22 @@ s2Member allows you to protect Pages, Posts, Tags, Categories, URIs, URI word fr
73
 
74
  You can learn more about s2Member® at [s2Member.com](http://www.s2member.com/).
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  == Screenshots ==
77
 
78
  1. s2Member Screenshot #1
@@ -85,24 +88,88 @@ You can learn more about s2Member® at [s2Member.com](http://www.s2member.com/).
85
 
86
  == Frequently Asked Questions ==
87
 
88
- = Please check the following s2Member® resources: =
89
- * s2Member® FAQs: http://www.s2member.com/faqs/
90
- * Knowledge Base: http://www.s2member.com/kb/
91
- * Video Tutorials: http://www.s2member.com/videos/
92
- * Community: http://www.s2member.com/forums/
93
- * Codex: http://www.s2member.com/codex/
 
94
 
95
  = Translating s2Member® =
 
96
  Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  == Upgrade Notice ==
99
 
100
- = v131109 =
 
101
  (Maintenance Release) Upgrade immediately.
102
 
103
  == Changelog ==
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  = v131109 =
 
106
  * (s2Member/s2Member Pro) **UI Makeover** This release of s2Member upgrades all administrative UI panels.
107
  * (s2Member/s2Member Pro) **Compatibility** Updating s2Member for compatibility with the coming release of both Quick Cache LITE and Quick Cache Pro for WordPress. These are not available publicly yet, but they are expected for release very soon. This release of s2Member is compatible with both the current and future releases of Quick Cache for WordPress.
108
  * (s2Member/s2Member Pro) **Improvement (Speed)** Lazy load s2Member's JS file at all times. Done, this release will speed your site up for first-time visitors.
@@ -114,10 +181,12 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
114
  * (s2Member Pro) **Checkout Options** Improving support for multiple Checkout Options. When a customer changes to a new Checkout Option by selecting an option from the drop-down menu in a Pro Form; this action will now result in a hash jump back to the location of the Pro Form on any given page; instead of to the top of the page, which could potentially result in a confusing experience on some sites (depending on the implementation). Aside: for developers, it's helpful to know that all s2Member Pro Forms now have a hashable ID `#s2p-form` that is cleaner than the longer (product-specific) IDs associated with Pro Forms; e.g. `s2member-pro-paypal-form...`, etc. If you need to hash a Pro Form, please use the more general `#s2p-form` on the end of a URL. This will take a customer directly to that Pro Form in the context of any given page.
115
 
116
  = v131026 =
 
117
  * (s2Member) **WordPress v3.7 Compatibility** s2Member further updated to support subtle changes in the WordPress v3.7 `wp-login.php` file. This release corrects a minor issue w/ patches applied by s2Member when running in a Multisite Network environment. If you are running s2Member on a Multisite Network, please be sure to run the automatic patcher provided in your Dashboard against WordPress v3.7 after updating to this release of s2Member.
118
  * (s2Member Pro) **PayPal Central IPN** Updating the example file: `s2m-pro-extras/paypal-central-ipn.php` to use one of the latest PayPal IP addresses listed [here](https://ppmts.custhelp.com/app/answers/detail/a_id/92).
119
 
120
  = v131025 =
 
121
  * (s2Member) **WordPress v3.7 Compatibility** s2Member updated to support WordPress v3.7. s2Member remains compatible with WP v3.3 (or higher).
122
  * (s2Member Pro) **New Feature: Simultaneous Login Monitoring** Available only w/ s2Member Pro. s2Member Pro has been updated to support configurations that limit the number of simultaneous logins a single username can receive. For further details, please see: `Dashboard -› s2Member -› Restriction Options -› Simultaneous Login Restrictions` (when s2Member Pro is installed).
123
  * (s2Member) **Post Restrictions (#3)** Adding support for `all-[post type]` in addition to the existing `all-[post type]s` (plural) currently supported by s2Member's Restriction Options for Posts. This makes it possible for a site owner to type only the Post Type after the keyword prefix `all-`; and excluding the plural `s` in cases when this is necessary.
@@ -136,6 +205,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
136
  * (s2Member) **See also: s2Member Repo** https://github.com/WebSharks/s2Member/commits/000000-dev
137
 
138
  = v130816 =
 
139
  * (s2Member Pro) **Compatibility, ClickBank (#467)** Improving support for ClickBank PitchPlus Upsell Flows. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-buttons-not-working/#post-55725) for further details.
140
  * (s2Member/s2Member Pro) **User Search on Multisite Networks (#468)** User search functionality was partially broken for Child Blogs in a Multisite Network after some improvements were implemented in s2Member® v130731. The issue has now been corrected in this release for Multisite Networks. For further details, please see [this thread](http://www.s2member.com/forums/topic/user-search-no-longer-working/#post-55778).
141
  * (s2Member/s2Member Pro) **Z-Index in Menu Pages (#461)** Stacking order against a WordPress® installation running a Dashboard with a collapsed sidebar menu (left side) was causing some UI problems. Fixed in this release.
@@ -144,13 +214,16 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
144
  * (s2Member/s2Member Pro) **Videos (#467)** Updating internal documentation found in `Dashboard -› s2Member® -› Quick-Start`. Specifically, the video player here was integrated with an older version of the YouTube® API and was not working properly. Fixed in this release.
145
 
146
  = v130802 =
 
147
  * (s2Member Pro) **Compatibility, WordPress® v3.6** Updating s2Member® Pro Form templates and their underlying CSS. This update improves their appearance against the Twenty Thirteen theme that comes with WordPress® v3.6. Specifically, some of the Pro Form buttons were a little out of place in this new default theme. Fixed in this release.
148
  * (s2Member Pro) **Compatibility, Checkout Options (#443)** Revision 3. Updating this feature to support a wider variety of WordPress® configurations and content filters. This update also resolves an empty `desc=""` attribute error reported by some site owners. Feature description... It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
149
 
150
  = v130801 =
 
151
  * (s2Member Pro) **New Feature; Checkout Options (#403)** Revision 2. Updating documentation on this new feature to prevent conufusion for site owners. s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
152
 
153
  = v130731 =
 
154
  * (s2Member Pro) **New Feature; Checkout Options (#403)** s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
155
  * (s2Member Pro) **Free Checkout (#403)** It is now possible to offer a 100% free checkout experience using any of s2Member's Pro Form Shortcodes. In previous releases of s2Member® it was not possible to set the `ra=""` Attribute to a zero dollar amount. Now it is! This works for PayPal® Pro Forms, and also for Authorize.Net Pro Forms.
156
  * (s2Member Pro) **100% Off Coupons (#403)** It is now possible to offer a 100% off coupon. This works for PayPal® Pro Forms, and also for Authorize.Net Pro Forms. See: `s2Member® -› Pro Coupon Codes` for details and examples.
@@ -164,6 +237,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
164
  * (s2Member/s2Member Pro) **Bug Fix (#418)** Fixed incorrect result totals under some rare scenarios in user search results.
165
 
166
  = v130617 =
 
167
  * (s2Member/s2Member Pro) **IP Restrictions (#148)** It is now possible to introduce a custom template file that controls the error message displayed when/if a user breaches security by exceeding your maximum unique IP addresses; as configured under `s2Member -› Restriction Options -› Unique IP Restrictions`. If you would like to use a custom template for this message, please copy the default template file from `/s2member/includes/templates/errors/ip-restrictions.php` and place this file into your active WordPress® theme directory (or into the `/wp-content/` directory if you prefer). s2Member will automatically find your custom template in one of these locations; and s2Member will use your custom template instead of the built-in default.
168
  * (s2Member Pro) **Bug Fix (#302)** Updating Authorize.Net Pro Form Generator to support max days of `365` instead of `7`.
169
  * (s2Member Pro) **Amazon S3 Secret Access Keys (#321)** Updating UI configuration panel to better explain what a Secret Access Key is; and adding a note about Secret Access Keys for Amazon S3 integration. Amazon® is deprecating Secret Access Keys, but they ARE still required for digitally signed URLs. This update changes nothing in s2Member's functionality. It simply adds some additional detail to a configuration field that will assist site owners integrating s2Member w/ Amazon S3 for the first time.
@@ -173,6 +247,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
173
  * (s2Member Pro) **PayPal Pro Forms (#312)** Preventing the use of multiple Pro Forms in the same Post/Page. This has never been possible, it is known to break the functionality of s2Member Pro Forms. Please limit Pro Form Shortcodes to ONE for each Post/Page; and do NOT attempt to use more than one Pro Form Shortcode on the same Post/Page (at the same time). In this release we have added a friendly JavaScript alert/warning for site owners that attempt this, so that problems and confusion can be avoided in this unlikely scenario.
174
 
175
  = v130513 =
 
176
  * (s2Member/s2Member Pro) **s2Stream Shortcode Bug Fix (#256)** Fixing a bug first introduced in the previous release where we added support for `player_aspectratio`. This quick update corrects the PHP parse error at line #154 of `sc-files-in.inc.php`. It also corrects the behavior of the `player_height=""` and `player_aspectratio=""` Shortcode Attributes for the `s2Stream` Shortcode. Many thanks to everyone that reported this bug.
177
  * (s2Member Pro) **Codestyling Localization** Removing symlink creator for Codestyleing Localization compatibility. There have been some reports of problems during WordPress® automatic upgrades (when/if the symlink exists). Until we can find a way to avoid this, we're disabling the automatic symlink generator. If you're running the Codestyling Localization plugin together with s2Member Pro, you will need to create the symlink yourself if you want to make s2Member fully compatible. Please create a symlink here: `/wp-content/plugins/s2member/s2member-pro` that points to the s2Member Pro directory: `/wp-content/plugins/s2member-pro`. See notes in previous changelog for further details on this.
178
 
@@ -185,8 +260,8 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
185
 
186
  2. Now, please follow the [instructions here](http://www.s2member.com/pro/#!s2_tab_jump=s2-pro-install-update) to upgrade s2Member® Pro manually.
187
 
188
-
189
  = v130510 =
 
190
  * (s2Member Pro) **Authorize.Net UK (and Other Currencies) (#104)** Adding support for Authorize.Net UK and other currencies too. s2Member Pro now officially supports Authorize.Net UK Edition. It is now possible to change your Authorize.Net Pro Form Shortcode Attribute `cc="USD"` to one of these values: `cc="USD"`, or `cc="CAD"` or `cc="EUR"` or `cc="GBP"`. For further details, please see: `Dashboard -› Authorize.Net Pro Forms -› Shortcode Attributes (Explained)`.
191
  * (s2Member Pro) **ClickBank Skins (#227)** Adding support for the `cbskin=""` Shortcode Attribute. For further details, please see: `Dashboard -› ClickBank Buttons -› Shortcode Attributes (Explained)`.
192
  * (s2Member Pro) **ClickBank PitchPlus Upsell Flows (#227)** Adding support for ClickBank PitchPlus Upsell Flows via new Shortcode Attributes: `cbfid=""`, `cbur=""`, `cbf="auto"`. s2Member Pro now officially supports ClickBank PitchPlus Upsell Flows. We support PitchPlus Basic and PitchPlus Advanced too. For further details, please see: `Dashboard -› ClickBank Buttons -› Shortcode Attributes (Explained)`.
@@ -216,12 +291,14 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
216
  * (s2Member Pro) **Username Validation (#246)** Now forcing user input (during Pro Form registration) to lowercase on Multisite Networks to prevent unnecessary validation errors during checkout (saving a customer time). Also, s2Member now validates a customer's Username before it is passed through `sanitize_user()` (a core WordPress® function). This prevents confusion for a customer where certain characters were stripped out automatically, causing them problems when attempting to log in for the first time (e.g. the customer thinks their Username is `john~doe`; when it is actually `johndoe` because WordPress (when running a Multisite Network) removes anything that is NOT `a-z0-9 _.-@` (and s2Member removes whitespace as well).
217
 
218
  = v130406 =
 
219
  * (s2Member/s2Member Pro) **Multisite Networks (#145)** Bug fix on Multisite Networks related to User deletions and subsequent logins on child blogs. For further details, please see [this thread](http://www.s2member.com/forums/topic/deleted-users-can-log-in/#post-46738).
220
  * (s2Member Pro) **New Feature (#59)** It is now possible to Edit a User in the Dashboard and check a box to have the User's password reset, and an email message sent automatically to the User/Member with a copy of the Username/Password. This requires s2Member® Pro.
221
  * (s2Member Pro) **API Functions (#158)** New PayPal® Pro API Functions (`s2member_pro_paypal_rbp_for_user`, `s2member_pro_paypal_rbp_times_for_user`). These are for developers. For further details, please see [this article](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) in the s2Member® Codex.
222
  * (s2Member Pro) **API Functions (#158)** New PayPal® Pro (PayFlow® Edition) API Functions (`s2member_pro_payflow_rbp_for_user`, `s2member_pro_payflow_rbp_times_for_user`). These are for developers. For further details, please see [this article](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) in the s2Member® Codex.
223
 
224
  = v130404 =
 
225
  * (s2Member Pro) **Compatibility (#108)** Updating s2Member® Pro's integration with Authorize.Net to allow charges up to `$99,999.00` (formerly `$10,000.00`).
226
  * (s2Member/s2Member Pro) **User Searches (#91)** Updating `pre_user_query` filter to include `first_name/last_name` (instead of only the `display_name`).
227
  * (s2Member/s2Member Pro) **bbPress Integration (#88)** Updating bbPress Role/Cap filter to exclude itself during bbPress deactivation. This was causing a loss of the `read` Capability inadvertently.
@@ -233,10 +310,12 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
233
  * (s2Member/s2Member Pro) **JW Player (#121)** Adding support for percentage-based width/height values in `player_width="" player_height=""` attributes of an s2Stream shortcode that generates a JW Player. Example: `player_width="100%"`.
234
 
235
  = v130221 =
 
236
  * (s2Member/s2Member Pro) **Bug Fix (#41)** Custom Registration/Profile Fields with an ID that ended with `-[0-9]+` or `_[0-9]+` was failing JavaScript validation due to a parsing issue. Fixed in this release.
237
  * (s2Member/s2Member Pro) **Bug Fix (#43)** A bug first introduced in the last release of s2Member® v130220 was preventing Administrative New User Notifications from being sent by s2Member®. Fixed in this release.
238
 
239
  = v130220 =
 
240
  * (s2Member Pro) **Feature Enhancement/User Exportation (#33)** Adding support for UTF-8 BOM in CSV User export files. Now a configurable option during User/Member Exportation.
241
  * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#21)** Adding additional Replacement Codes for New User Email Notifications (for both the User/Member Notification and also for the Administrator Notification). The following Replacement Codes are now possible: `%%role%%`, `%%label%%`, `%%level%%`, `%%ccaps%%`. Also adding four new Filters for developers. These include: `ws_plugin__s2member_welcome_email_sbj`, `ws_plugin__s2member_welcome_email_msg`, `ws_plugin__s2member_admin_new_user_email_sbj`, `ws_plugin__s2member_admin_new_user_email_msg`. See `Dashboard -› General Options -› Email Configuration` for further details.
242
  * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#30)** Adding support for PHP tags in the following emails: New User Notification, Administrative New User Notification, Signup Confirmation Email, Specific Post/Page Confirmation Email. See the relevant sections in your Dashboard for further details. Such as: `s2Member® -› General Options -› Email Configuration` and `s2Member® -› PayPal® Options -› Signup Confirmation Email`.
@@ -248,6 +327,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
248
  * (s2Member/s2Member Pro) **Feature Enhancement/s2Stream Shortcode (#32)** Adding additional support for JW Player™ Captions, Titles, Descriptions, and Media IDs (i.e. `player_title=""`, `player_description=""`, `player_mediaid=""`, `player_captions=""`). Please check the Shortcode Attributes tab in [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes) for further details.
249
 
250
  = v130214 =
 
251
  * **(Maintenance Release) Upgrade immediately.**
252
  * (s2Member/s2Member Pro) **Log Viewer (#16)** Additional log file descriptions have been added to the Dashboard, along with some other UI enhancements in this section.
253
  * (s2Member/s2Member Pro) **Bug Fix (#18)** Usernames consisting of all numeric values were not always being redirected to the Login Welcome Page upon logging in, even when s2Member® was configured to do so. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/subscribers-not-taken-to-welcome-page/page/2/#post-41663).
@@ -258,6 +338,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
258
  * (s2Member/s2Member Pro) **Compatibility** Bumping minimum WordPress® requirement from v3.2 up to v3.3. Starting with this release, s2Member® is no longer compatible with the much older WordPress® v3.2.
259
 
260
  = v130213 =
 
261
  * **(Maintenance Release) Upgrade immediately.**
262
  * (s2Member Pro) **Compatibility (#13)** PayPal® Payments Pro, PayPal® Payments Pro (Payflow Edition), and Authorize.Net. s2Member® Pro now supports a recurring interval of Semi-Yearly (e.g. charges occur every six months). This has always been possible by manipulating Shortcode Attribues, but it's now officially supported by Pro Form Generators in your Dashboard — which come with s2Member® Pro.
263
  * (s2Member Pro) **Compatibility (#13)** ClickBank® Recurring Products. ClickBank® has started allowing a Weekly recurring interval and stopped allowing Yearly. s2Member® has been updated in this release to support a Weekly recurring interval with ClickBank®; and to remove the Yearly option in the ClickBank® Button Generator.
@@ -294,6 +375,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
294
  * (s2Member/s2Member Pro) **Compatibility** Updated all of s2Member's IPN handlers to accept `$_REQUEST` data for Proxy-related variables like `s2member_paypal_proxy_return_url`. This allows s2Member® itself to use `$_POST` variables for Proxy-related variables; and it further reduces the likelihood of 403 Forbidden errors caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/). One issue this should help to correct, is a mysterious case where a `success=""` Shortcode Attribute is not working as you might expect. This can be caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/) at places like HostGator®, because a URL is passing through a query string. This release will help to prevent this from becoming a problem, because `success=""` URLs will be passed through `$_POST` variables now in all Pro Form integrations.
295
 
296
  = v130207 =
 
297
  * **(Maintenance Release) Upgrade immediately.**
298
  * (s2Member Pro) **Bug Fix (#2)** Modification Tracking Codes not working properly under s2Member's Authorize.Net integration. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/shareasale-integration-not-working/#post-40954).
299
  * (s2Member) **Compatibility (#4)** PayPal® integrated into a site charging in the JPY currency was incorrectly limited to an amount of 10000.00. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/default-currency-can-i-change-it-to-yen/#post-40590).
@@ -302,6 +384,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
302
  * (s2Member/s2Member Pro) **Compatibility (#6)** s2Member® File Downloads (audio/video files) with spaces in a file name were not always being handled properly. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/jwplayer-filename-bug/#post-40799).
303
 
304
  = v130203 =
 
305
  * **(New Release) Please read this changelog for important details.**
306
  * (s2Member Pro) **Remote Ops API (`create_user`)** s2Member® Pro's Remote Operations API, for the `create_user` Operation has been updated to support a new specification: `modify_if_login_exists`. For further details, please check your s2Member® Pro Dashboard here: `s2Member® -› API / Scripting -› Remote Operations API`.
307
  * (s2Member Pro) **Remote Ops API (`modify_user`,`delete_user`)** s2Member® Pro's Remote Operations API has been updated to support two additional Operations: `update_user` and `delete_user`. For further details on these new Operations, please check your s2Member® Pro Dashboard here: `s2Member® -› API / Scripting -› Remote Operations API`.
@@ -312,6 +395,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
312
  * (s2Member Pro) **User Importation (#89)** s2Member® Pro's User/Member Import format changed in this release (with respect to Custom Registration/Profile Fields only). If you are importing Custom Registration/Profile Fields, please review [this KB article](http://www.s2member.com/kb/importing-updating-users/#custom-registration-profile-fields) before you import new Users/Members or mass update any existing Users/Members. ALSO NOTE: User/Member CSV Export Files generated by previous versions of s2Member® Pro (if they contained any Custom Registration/Profile Fields) will NOT be compatible with this latest release (e.g. you should NOT attempt to re-import those old files in an effort to mass update existing Users/Members). Please generate a new User/Member CSV Export File in the latest release of s2Member® Pro before attempting to edit and/or mass update existing Users/Members with applications like MS Excel or OpenOffice.
313
 
314
  = v130123 =
 
315
  * **(Maintenance Release) Upgrade immediately.**
316
  * (s2Member/s2Member Pro) **s2Stream Shortcode (#78)** s2Member® now supports JW Player® license keys using Shortcode Attribute `player_key=""`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
317
  * (s2Member/s2Member Pro) **s2Stream Shortcode (#79)** s2Member® now supports JW Player® [Advanced Option Blocks](http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player) using Shortcode Attribute `player_option_blocks=""`. Example: `player_option_blocks="sharing:{}"`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
@@ -320,6 +404,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
320
  * (s2Member/s2Member Pro) **KB Articles** Inline documentation updated in some areas, with a few links pointing to helpful/related KB articles.
321
 
322
  = v130121 =
 
323
  * **(Maintenance Release) Upgrade immediately.**
324
  * **New Feature** s2Member® now comes with a new Shortcode `[s2Stream file_download="video.mp4" player="jwplayer-v6" ... /]`, making it MUCH easier for site owners to implemement RTMP streams of audio/video content. For further details, please check your Dashboard under: `s2Member® -› Download Options -› JW Player® v6 and RTMP Protocol Examples`. See also: `s2Member® -› Download Options -› Shortcode Attributes (Explained)`.
325
  * **Compatibility (#75)** Updated s2Member's local file storage engine (for File Downloads via s2Member®), to support special characters in file names. Discussed in [this thread](http://www.s2member.com/forums/topic/problem-with-quotes-in-filename-downloads/#post-38395).
@@ -327,6 +412,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
327
  * **Compatibility** Updated s2Member's integration with Amazon® S3 to extend the default 30 second connection timeout (which was too conservative for many integrations) up to 24 hours by default, making it match the same as s2Member's Amazon® CloudFront connection timeout. For further details, please check your Dashboard under: `s2Member® -› Download Options -› Amazon® S3/CDN Storage -› Dev Note w/Technical Details`. It is possible to modify this connection timeout through a Filter discussed there.
328
 
329
  = v130116 =
 
330
  * **(Maintenance Release) Upgrade immediately.**
331
  * **Compatibility (#39)** Updated codes samples for JW Player®, to include the `mp4:` prefix when implementing RTMP streams against MP4 video files. Discussed in [this thread](http://www.s2member.com/forums/topic/cloudfront-subfolder-streaming-error/#post-35750).
332
  * **Compatibility (#51)** Updated Payflow® API to support recurring billing every six months. Discussed in [this thread](http://www.s2member.com/forums/topic/payflow-error-6-month-recurring-membership/#post-36053).
@@ -334,6 +420,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
334
  * **Feature Improvement (#71)** s2Member® has been updated to support byte-range requests with it's default local file storage engine, served from the `/s2member-files/` directory. s2Member® has always supported byte-range requests when integrated with Amazon® CloudFront. Now it supports byte-range requests in it's default local storage engine too. This will improve compatibility with mobile devices, iTunes™ and other devices that use byte-range requests. Discussed in [this thread](http://www.s2member.com/forums/topic/any-way-to-set-accept-ranges-for-downloads/#post-15871).
335
 
336
  = v121213 =
 
337
  * **(Maintenance Release) Upgrade immediately.**
338
  * **Updated for compatibility with WordPress® v3.5. Backward compatibility remains for previous versions of WordPress®, as far back as WordPress® v3.2.**
339
  * (s2Member Pro) **Bug Fix**. An issue first introduced in s2Member® Pro v120517 where we fixed problems with the `maxlength` attribute in Authorize.Net Pro Forms, left a remaining problem. The State/Province field in the Billing Address section of a Pro Form, since s2Member® Pro v120517, has only accepted 2 characters when it should have been capable of accepting up to 40 characters. Fixed in this release.
@@ -343,11 +430,13 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
343
  * (s2Member Pro) **Bug Fix**. Free Registration Pro Forms submitted without having payment gateway API credentials configured within s2Member® resulted in an on-site error message when there should NOT be one (because a site owner is dealing with Free Registration only in this scenario). Fixed in this release.
344
 
345
  = v121204 =
 
346
  * **(Maintenance Release) Upgrade immediately.**
347
  * (s2Member / s2Member Pro) **Bug Fix**. An issue with long billing agreement descriptions under PayPal® Pro (Payflow® Edition) accounts, when coupon codes were being used by customers, was addressed in this release. Symptoms of this bug were errors in s2Member® log files from the Payflow® API, with error code: `11581-Profile description is invalid`. Caused by undocumented length requirements for the billing agreement description under the Payflow® API. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/error-generic-processor-error-11581/page/2/#post-33477).
348
  * (s2Member / s2Member Pro) **Compatibility**. Updated JW Player code samples for compatibility with JW Player v6. Discussed in [this thread](http://www.s2member.com/forums/topic/jw-player-rtmp-streaming-mp4-amazon-s3/page/2/#post-32074).
349
 
350
  = v121201 =
 
351
  * **(Maintenance Release) Upgrade immediately.**
352
  * (s2Member / s2Member Pro) **Bug Fix**. Support Rep Cristián Lávaque found a bug in the behavior of s2Member’s Alternative View Restrictions, associated with Category listings in custom menu widgets. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/welcome-page-title-shows-but-no-content/page/2/#post-29802).
353
  * (s2Member Pro) **Feature Enhancement**. s2Member Pro Forms integrated ONLY with PayPal Express Checkout (`accept="paypal" accept_via_paypal="paypal"`), will no longer display a Billing Method section on the Pro Form, as it's not necessary (there's only one possible option in this case, and it's already depicted by the PayPal button at the bottom of the Pro Form). Many site owners had implemented CSS hacks to hide this section of a Pro Form configured this way, based on [this FAQ article](http://www.s2member.com/faqs/#s2-faqs-paypal-pro-not-required). This hack is no longer necessary - starting with this release.
@@ -357,6 +446,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
357
  * (s2Member Pro) **Authorize.Net**. True montly billing instead of every 30 days. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/1-month-recurring-billing-instead-of-30-days/#post-30420).
358
 
359
  = v121023 =
 
360
  * **(Maintenance Release) Upgrade immediately.**
361
  * (s2Member / s2Member Pro) **Bug Fix**. A bug related to s2Member's `is_site_root()` method, when fancy permalinks are NOT in use; has been corrected for compatibility with the latest version of WordPress. Please see [this thread](http://www.s2member.com/forums/topic/new-custom-field-default-not-on-old-users/#post-28792) for futher details.
362
  * (s2Member Pro) **Import/Export Bug Fix**. An issue related to RFC guidelines for escape sequences in CSV files has been addressed in this release. Please see [this thread](http://www.s2member.com/forums/topic/new-custom-field-default-not-on-old-users/#post-28792) for futher details.
@@ -368,11 +458,13 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
368
  * (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was modified to prevent dates in the future from being requested from the DataLink API. ccBill® was responding to some DataLink requests with a failed authentication, which were caused by dates/times in the future; according to MST on the ccBill® side of things.
369
 
370
  = v120703 =
 
371
  * **(Maintenance Release) Upgrade immediately.**
372
  * (s2Member/s2Member Pro) **Payflow® Express Checkout**. An issue related to Express Checkout (when using the Payflow® API), has been corrected in this release. A bug in previous releases, was causing error messages under certain circumstances that read `Field format error: Invalid PayerID`.
373
  * (s2Member/s2Member Pro) **WordPress® v3.4**. Standards compliance. Routine maintenance. Re-confirmed compatibility with WordPress® v3.4.
374
 
375
  = v120622 =
 
376
  * **(Maintenance Release) Upgrade immediately.**
377
  * (s2Member/s2Member Pro) **WordPress® v3.4**. Confirmed compatibility with WordPress® v3.4.
378
  * (s2Member/s2Member Pro) **Currency Conversion**. This release updates s2Member's currency conversion API, which is powered by Google®. Please see [this thread](http://www.s2member.com/forums/topic/paypal-agreecontinue-sends-to-memb-options/#post-16972) for further details.
@@ -380,6 +472,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
380
  * (s2Member/s2Member Pro) **Character Encoding**. This release fixes a big in s2Member's character encoding conversion, for IPN responses received from PayPal®. This releases also fixes an issue specifically with the pound sterling symbol `£`, which was causing some transient IPN data to become corrupted, under the right scenario.
381
 
382
  = v120608 =
 
383
  * **(Maintenance Release) Upgrade immediately.**
384
  * (s2Member/s2Member Pro) **WordPress® v3.4**. Updated for compatibility with the coming release of [WordPress® v3.4](http://wordpress.org/news/2012/06/wordpress-3-4-release-candidate-2/). Additional details available [here](http://wordpress.org/news/2012/06/wordpress-3-4-release-candidate-2/).
385
  * (s2Member/s2Member Pro) **Payflow® Bug Fix**. This release addresses two bugs that existed in s2Member's Payflow® integration. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/transactions-not-going-through/#post-15896) for further details.
@@ -387,6 +480,7 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
387
  * (s2Member) **Documentation**. Code samples for Content Dripping have been updated in the Dashboard, in order to correct a date comparison snippet, which was WRONG. Please check your Dashboard under: `s2Member® -› API Scripting -› Content Dripping -› Example #2`, for the updated code sample.
388
 
389
  = v120601 =
 
390
  * **(Maintenance Release) Upgrade immediately.**
391
  * (s2Member Pro) **ClickBank® Button Shortcodes**. This release works around a bug that has been discovered on the ClickBank® side of things, when a `+` character appears in the `desc=""` attribute of your ClickBank® Button Shortcode. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-output-url/#post-15166) for further details.
392
  * (s2Member Pro) **Payflow® Daily Recurrence (Limitation)**. PayPal® Pro accounts with the Payflow® Edition API, are NOT capable of charging on a `daily` recurring basis. Previous releases of s2Member® Pro mistakenly documented this as being possible. Resolved in this release. PayPal® Pro accounts operating with the Payflow® Edition (and integrated with s2Member®), are only capable of charging recurring fees on the following schedules: `weekly, bi-weekly, monthly, quarterly, or yearly`. This is in large part, a limitation in the Payflow® API, which we hope will be resolved by PayPal® in a future version. Please feel free to contact PayPal® if you'd like to vote for this feature! This limitation does NOT affect existing PayPal® Pro accounts operating exclusively under the PayPal® Pro API (e.g. without Payflow®).
@@ -394,12 +488,14 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
394
  * (s2Member/s2Member Pro) **Bug Fix**. A bug related to inaccurate role assignment, under certain scenarios (for administrative accounts). Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/inaccurate-role-assignment-in-s2member-pro/#post-14122) for further details.
395
 
396
  = v120517 =
 
397
  * **(Maintenance Release) Upgrade immediately.**
398
  * (s2Member Pro) **PayPal® Pro Forms**. This release removes all limitations on the maximum length of an initial trial/period. It is now possible to offer any number of days/weeks/months/years for free, or at a different initial rate.
399
  * (s2Member Pro) **Authorize.Net® Bug Fix**. Max length (i.e. `maxlength=""`) adjusted in Pro Forms integrating with Authorize.Net. 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.
400
  * (s2Member/s2Member Pro) **JW Player® Code Samples**. Updated code samples for JW Player®, to reduce the possibility of a namespace conflict in configuration variables. For further details, please check [this thread](http://www.s2member.com/forums/topic/jw-player-new-code-conflict/#post-13819).
401
 
402
  = v120514 =
 
403
  * **(Maintenance Release) Upgrade immediately.**
404
  * (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`.
405
  * (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)`.
@@ -409,14 +505,17 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
409
  * (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`.
410
 
411
  = v120309 =
 
412
  * (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`.
413
  * (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.
414
 
415
  = v120308 =
 
416
  * (s2Member/s2Member Pro) **Custom Registration/Profile Fields**. Now possible to create a Custom Field that's always hidden, during both registration and any future Profile edits (e.g. for administrative purposes only).
417
  * (s2Member/s2Member Pro) **Compatibility**. Minor updates for compatibility with the coming release of WordPress® v3.4.
418
  * (s2Member Pro) **Bug fix**. Broken link in UI leading to: `s2m-pro-extras.zip`. Corrected in this release.
419
 
420
  = v120301 - 1.0 =
 
421
  * ... trimmed away at v111220.
422
  * Initial release: v1.0.
1
  === s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
+ Version: 131126
4
+ Stable tag: 131126
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
44
  Professional Installation URI: http://www.s2member.com/professional-installation/
45
 
46
  Description: s2Member® — a powerful (free) membership plugin for WordPress®. Protect members only content with roles/capabilities.
47
+ Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, paypal pro, pay pal, authorize, authorize.net, google wallet, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
48
 
49
  s2Member® — a powerful (free) membership plugin for WordPress®. Protect members only content with roles/capabilities.
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  == Description ==
52
 
53
  [youtube http://www.youtube.com/watch?v=2C3Lan7vxw0 /]
60
 
61
  You can learn more about s2Member® at [s2Member.com](http://www.s2member.com/).
62
 
63
+ == Installation ==
64
+
65
+ = s2Member® is Very Easy to Install =
66
+
67
+ 1. Upload the `/s2member` folder to your `/wp-content/plugins/` directory.
68
+ 2. Activate the plugin through the **Plugins** menu in WordPress®.
69
+ 3. Navigate to the **s2Member® Options** panel for configuration details.
70
+
71
+ = See Also (s2Member.com) =
72
+
73
+ [Detailed installation/upgrade instructions](http://www.s2member.com/framework/#!s2_tab_jump=s2-framework-install-update).
74
+
75
+ = Is s2Member compatible with Multisite Networking? =
76
+
77
+ Yes. s2Member and s2Member Pro, are also both compatible with Multisite Networking. After you enable Multisite Networking, install the s2Member plugin. Then navigate to `s2Member -› Multisite (Config)` in the Dashboard on your Main Site.
78
+
79
  == Screenshots ==
80
 
81
  1. s2Member Screenshot #1
88
 
89
  == Frequently Asked Questions ==
90
 
91
+ = Please Check the Following s2Member® Resources =
92
+
93
+ * s2Member® FAQs: <http://www.s2member.com/faqs/>
94
+ * Knowledge Base: <http://www.s2member.com/kb/>
95
+ * Video Tutorials: <http://www.s2member.com/videos/>
96
+ * Community: <http://www.s2member.com/forums/>
97
+ * Codex: <http://www.s2member.com/codex/>
98
 
99
  = Translating s2Member® =
100
+
101
  Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
102
 
103
+ == License ==
104
+
105
+ Copyright: © 2013 [WebSharks, Inc.](http://www.websharks-inc.com/bizdev/) (coded in the USA)
106
+
107
+ Released under the terms of the [GNU General Public License](http://www.gnu.org/licenses/gpl-2.0.html).
108
+
109
+ = Credits / Additional Acknowledgments =
110
+
111
+ * Software designed for WordPress®.
112
+ - GPL License <http://codex.wordpress.org/GPL>
113
+ - WordPress® <http://wordpress.org>
114
+ * JavaScript extensions require jQuery.
115
+ - GPL License <http://jquery.org/license>
116
+ - jQuery <http://jquery.com/>
117
+ * Readme parsing routines, powered (in part) by PHP Markdown.
118
+ - BSD / GPL Compatible License <http://michelf.com/projects/php-markdown/license/>
119
+ - PHP Markdown <http://michelf.com/projects/php-markdown/>
120
+ * Administration panel (tools icon) was provided by Everaldo.com.
121
+ - LGPL License <http://www.everaldo.com/crystal/?action=license>
122
+ - Everaldo <http://www.everaldo.com/crystal/?action=downloads>
123
+ * Administration panel (videos icon) was provided by David Vignoni.
124
+ - LGPL License <http://www.iconfinder.com/search/?q=iconset%3Anuvola2>
125
+ - David Vignoni <http://www.icon-king.com/>
126
+ * PayPal® and its associated API, buttons & services have been integrated into this software via external hyperlinks.
127
+ The files/services provided by PayPal® are not distributed with this software. They have their own terms & conditions.
128
+ - PayPal®, a 3rd party service, is powered by eBay, Inc. <http://www.paypal.com/>
129
+ - PayPal® is a trademark of eBay, Inc. <http://www.ebay.com/>
130
+ * The W3C® and its associated validator & services have been integrated into this software via external hyperlinks.
131
+ The files/services provided by the W3C® are not distributed with this software. They have their own terms & conditions.
132
+ - The W3C®, a 3rd party service, is powered by the World Wide Web Consortium <http://validator.w3.org/>
133
+ - W3C® is a trademark of the World Wide Web Consortium. <http://www.w3.org/>
134
+ * The MailChimp® services have been integrated into this software through a GPL compatible API & hyperlinks.
135
+ The services provided by MailChimp® are not distributed with this software. They have their own terms & conditions.
136
+ - MailChimp®, a 3rd party service, is powered by The Rocket Science Group, LLC <http://www.mailchimp.com/>
137
+ - MailChimp® is a trademark of The Rocket Science Group, LLC. <http://www.mailchimp.com/terms-policies/terms-of-use/>
138
+ * The AWeber® services have been integrated into this software through hyperlinks & email commands.
139
+ The services provided by AWeber® are not distributed with this software. They have their own terms & conditions.
140
+ - AWeber®, a 3rd party service, is powered by AWeber Communications <http://www.aweber.com/about.htm>
141
+ - AWeber® is a trademark of AWeber Communications. <http://www.aweber.com/service-agreement.htm>
142
+
143
  == Upgrade Notice ==
144
 
145
+ = v131126 =
146
+
147
  (Maintenance Release) Upgrade immediately.
148
 
149
  == Changelog ==
150
 
151
+ = v131126 =
152
+
153
+ * (s2Member Pro) **Google Wallet.** s2Member Pro now supports [Google Wallet for Digital Goods](https://developers.google.com/commerce/wallet/digital/).
154
+
155
+ In the past we offered support for Google "Checkout" (Google "Checkout" is no longer available as of November 2013). s2Member's previous integration with Google Checkout has now been fully updated to support Google "Wallet" for Digital Goods. To enable Google Wallet in your installation of s2Member Pro, please see: `Dashboard -› s2Member Pro -› Other Gateways -› Google Wallet`. For setup instructions, please see: `Dashboard -› s2Member Pro -› Google Options`.
156
+
157
+ At the time of this writing, there are no KB articles related to Google Wallet at s2Member.com (yet); these will come soon. Until then, you might find it helpful to review dev notes by Jason Caldwell (Lead Developer). Please see: <https://github.com/WebSharks/s2Member/issues/19>.
158
+
159
+ We also suggest that you review the documentation in your Dashboard under: `s2Member Pro -› Google Options` and `s2Member Pro -› Google Buttons`. If you were previously using Google "Checkout", please review [this notice posted by Google](https://support.google.com/checkout/sell/answer/3080449?hl=en).
160
+ * (s2Member/s2Member Pro) **Bootstrap Compatibility.** s2Member has been updated throughout to support the [Twitter Bootstrap](http://getbootstrap.com/) CSS framework when running on a WordPress theme that's been built on Bootstrap. For instance; profile editing forms, custom registration/profile fields, s2Member Pro Forms for checkout/registration; these will now look good on sites powered by Bootstrap. This change has no impact on functionality, only on appearance; and only IF your site is powered by Bootstrap. Throughout s2Member's HTML code we've added CSS class names that follow a Bootstrap standard. These Bootstrap classes are blended together with default structural styles that makes s2Member compatible with all WordPress themes. This way s2Member (and s2Member Pro) can produce a clean/professional appearance on just about any WordPress theme; and now Bootstrap is supported too!
161
+ * (s2Member Pro) **Configurable Emails.** We've added new configuration panels into the s2Member UI for a Modification Confirmation Email and also for the Custom Capability Confirmation Email. These are now configurable for all payment gateways integrated with s2Member Pro; e.g. AliPay, ccBill, ClickBank, Google Wallet, Authorize.Net, PayPal Standard, and PayPal Pro. These emails have always existed, but up until now customization required a WordPress filter. Now it's easier, you can customize these from the Dashboard! Please note: this feature comes only with s2Member Pro. As one example, please check your Dashboard under: `s2Member Pro -› PayPal Options -› Modification Confirmation Email`.
162
+ * (s2Member/s2Member Pro) **Snippets/Redirects.** Snippets and Redirects no longer carry the s2Member Restriction Options meta box in the Post/Page editing station; there's no need for Restrictions against these two special Post Types. This change, together with the latest improvements in these two plugins: [WP Snippets](http://wordpress.org/plugins/wp-snippets/) and [WP Redirects](http://wordpress.org/plugins/wp-redirects/) (also produced by our team) offer a more powerful solution now that all of these plugins are more compatible with each other.
163
+ * (s2Member/s2Member Pro) **Backward Compatibility.** Updating calls to `get_post()`. We're adding a `NULL` argument to prevent warnings in older releases of WordPress where an argument was required; e.g. `get_post(NULL)`.
164
+ * (s2Member/s2Member Pro) **Forward Compatibility.** Adding support for the `relative` scheme in SSL filters that deal with `set_url_scheme()` in the latest versions of WordPress. This improves s2Member's "force SSL mode" where a site owner sets the Custom Field for a Post/Page; e.g. `s2member_force_ssl` is set to `yes`. This change will better support themes/plugins that use absolute relative paths together with WordPress core functions like `site_url()` and `home_url()`.
165
+ * (s2Member/s2Member Pro) **PHP Debug Notices.** Updating s2Member's source code to further prevent PHP debug notices when running in `WP_DEBUG` mode. This is part of an ongoing effort keep s2Member running smoothly in PHP strict mode; and to maintain conformity with WordPress standards.
166
+ * (s2Member Pro) **Unlimited Membership Levels.** Updating the built-in software documentation for s2Member Pro to cover an edge case where a site owner many choose to exceed the recommended maximum for Membership Levels when running s2Member Pro. If you intend to use more than `100` Membership Levels (this is not recommended); but if you do, please see: `Dashboard -› s2Member Pro -› General Options -› Membership Levels/Labels` for the latest details on this.
167
+ * (s2Member/s2Member Pro) **Dropping IE8 Support.** s2Member and s2Member Pro will no longer support IE8 in any official capacity. s2Member's HTML output and CSS files have been cleaned up; and all hacks related to IE8 have been removed. Out with the old, in with the new! We need to keep s2Member up-to-date with the latest improvements offered by IE9 and other modern browsers. While s2Member may continue to function relatively well in IE8, hacks used in the past to accomodate edge cases in this buggy browser have been removed in favor of standards compliance.
168
+ * (s2Member/s2Member Pro) **Bug Fix.** s2Member and s2Member Pro have both been updated to prevent spaces in a comma-delimited list of Custom Capabilities; e.g. `ccaps="music, videos"` should be `ccaps="music,videos"` please. Spaces in this list have never been allowed, but now there is better server-side validation to prevent this from happening; reducing the chance of error when a site owner configures a Button or Pro Form shortcode with s2Member.
169
+ * (s2Member/s2Member Pro) **Other Minor Bug Fixes.** Please see: <https://github.com/WebSharks/s2Member/commits/000000-dev>
170
+
171
  = v131109 =
172
+
173
  * (s2Member/s2Member Pro) **UI Makeover** This release of s2Member upgrades all administrative UI panels.
174
  * (s2Member/s2Member Pro) **Compatibility** Updating s2Member for compatibility with the coming release of both Quick Cache LITE and Quick Cache Pro for WordPress. These are not available publicly yet, but they are expected for release very soon. This release of s2Member is compatible with both the current and future releases of Quick Cache for WordPress.
175
  * (s2Member/s2Member Pro) **Improvement (Speed)** Lazy load s2Member's JS file at all times. Done, this release will speed your site up for first-time visitors.
181
  * (s2Member Pro) **Checkout Options** Improving support for multiple Checkout Options. When a customer changes to a new Checkout Option by selecting an option from the drop-down menu in a Pro Form; this action will now result in a hash jump back to the location of the Pro Form on any given page; instead of to the top of the page, which could potentially result in a confusing experience on some sites (depending on the implementation). Aside: for developers, it's helpful to know that all s2Member Pro Forms now have a hashable ID `#s2p-form` that is cleaner than the longer (product-specific) IDs associated with Pro Forms; e.g. `s2member-pro-paypal-form...`, etc. If you need to hash a Pro Form, please use the more general `#s2p-form` on the end of a URL. This will take a customer directly to that Pro Form in the context of any given page.
182
 
183
  = v131026 =
184
+
185
  * (s2Member) **WordPress v3.7 Compatibility** s2Member further updated to support subtle changes in the WordPress v3.7 `wp-login.php` file. This release corrects a minor issue w/ patches applied by s2Member when running in a Multisite Network environment. If you are running s2Member on a Multisite Network, please be sure to run the automatic patcher provided in your Dashboard against WordPress v3.7 after updating to this release of s2Member.
186
  * (s2Member Pro) **PayPal Central IPN** Updating the example file: `s2m-pro-extras/paypal-central-ipn.php` to use one of the latest PayPal IP addresses listed [here](https://ppmts.custhelp.com/app/answers/detail/a_id/92).
187
 
188
  = v131025 =
189
+
190
  * (s2Member) **WordPress v3.7 Compatibility** s2Member updated to support WordPress v3.7. s2Member remains compatible with WP v3.3 (or higher).
191
  * (s2Member Pro) **New Feature: Simultaneous Login Monitoring** Available only w/ s2Member Pro. s2Member Pro has been updated to support configurations that limit the number of simultaneous logins a single username can receive. For further details, please see: `Dashboard -› s2Member -› Restriction Options -› Simultaneous Login Restrictions` (when s2Member Pro is installed).
192
  * (s2Member) **Post Restrictions (#3)** Adding support for `all-[post type]` in addition to the existing `all-[post type]s` (plural) currently supported by s2Member's Restriction Options for Posts. This makes it possible for a site owner to type only the Post Type after the keyword prefix `all-`; and excluding the plural `s` in cases when this is necessary.
205
  * (s2Member) **See also: s2Member Repo** https://github.com/WebSharks/s2Member/commits/000000-dev
206
 
207
  = v130816 =
208
+
209
  * (s2Member Pro) **Compatibility, ClickBank (#467)** Improving support for ClickBank PitchPlus Upsell Flows. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-buttons-not-working/#post-55725) for further details.
210
  * (s2Member/s2Member Pro) **User Search on Multisite Networks (#468)** User search functionality was partially broken for Child Blogs in a Multisite Network after some improvements were implemented in s2Member® v130731. The issue has now been corrected in this release for Multisite Networks. For further details, please see [this thread](http://www.s2member.com/forums/topic/user-search-no-longer-working/#post-55778).
211
  * (s2Member/s2Member Pro) **Z-Index in Menu Pages (#461)** Stacking order against a WordPress® installation running a Dashboard with a collapsed sidebar menu (left side) was causing some UI problems. Fixed in this release.
214
  * (s2Member/s2Member Pro) **Videos (#467)** Updating internal documentation found in `Dashboard -› s2Member® -› Quick-Start`. Specifically, the video player here was integrated with an older version of the YouTube® API and was not working properly. Fixed in this release.
215
 
216
  = v130802 =
217
+
218
  * (s2Member Pro) **Compatibility, WordPress® v3.6** Updating s2Member® Pro Form templates and their underlying CSS. This update improves their appearance against the Twenty Thirteen theme that comes with WordPress® v3.6. Specifically, some of the Pro Form buttons were a little out of place in this new default theme. Fixed in this release.
219
  * (s2Member Pro) **Compatibility, Checkout Options (#443)** Revision 3. Updating this feature to support a wider variety of WordPress® configurations and content filters. This update also resolves an empty `desc=""` attribute error reported by some site owners. Feature description... It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
220
 
221
  = v130801 =
222
+
223
  * (s2Member Pro) **New Feature; Checkout Options (#403)** Revision 2. Updating documentation on this new feature to prevent conufusion for site owners. s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
224
 
225
  = v130731 =
226
+
227
  * (s2Member Pro) **New Feature; Checkout Options (#403)** s2Member® Pro now supports "Checkout Options". It is now possible to build dropdown menus offering your customers a variety of options using a Single Pro Form. This is accomplished quite easily using Shortcodes. For full details and examples, please check this section of your Dashboard in the latest release. See: `s2Member® -› PayPal® Pro Forms -› Wrapping Multiple Shortcodes as "Checkout Options"`. NOTE: this works for PayPal® Pro Forms, and ALSO for Authorize.Net Pro Forms.
228
  * (s2Member Pro) **Free Checkout (#403)** It is now possible to offer a 100% free checkout experience using any of s2Member's Pro Form Shortcodes. In previous releases of s2Member® it was not possible to set the `ra=""` Attribute to a zero dollar amount. Now it is! This works for PayPal® Pro Forms, and also for Authorize.Net Pro Forms.
229
  * (s2Member Pro) **100% Off Coupons (#403)** It is now possible to offer a 100% off coupon. This works for PayPal® Pro Forms, and also for Authorize.Net Pro Forms. See: `s2Member® -› Pro Coupon Codes` for details and examples.
237
  * (s2Member/s2Member Pro) **Bug Fix (#418)** Fixed incorrect result totals under some rare scenarios in user search results.
238
 
239
  = v130617 =
240
+
241
  * (s2Member/s2Member Pro) **IP Restrictions (#148)** It is now possible to introduce a custom template file that controls the error message displayed when/if a user breaches security by exceeding your maximum unique IP addresses; as configured under `s2Member -› Restriction Options -› Unique IP Restrictions`. If you would like to use a custom template for this message, please copy the default template file from `/s2member/includes/templates/errors/ip-restrictions.php` and place this file into your active WordPress® theme directory (or into the `/wp-content/` directory if you prefer). s2Member will automatically find your custom template in one of these locations; and s2Member will use your custom template instead of the built-in default.
242
  * (s2Member Pro) **Bug Fix (#302)** Updating Authorize.Net Pro Form Generator to support max days of `365` instead of `7`.
243
  * (s2Member Pro) **Amazon S3 Secret Access Keys (#321)** Updating UI configuration panel to better explain what a Secret Access Key is; and adding a note about Secret Access Keys for Amazon S3 integration. Amazon® is deprecating Secret Access Keys, but they ARE still required for digitally signed URLs. This update changes nothing in s2Member's functionality. It simply adds some additional detail to a configuration field that will assist site owners integrating s2Member w/ Amazon S3 for the first time.
247
  * (s2Member Pro) **PayPal Pro Forms (#312)** Preventing the use of multiple Pro Forms in the same Post/Page. This has never been possible, it is known to break the functionality of s2Member Pro Forms. Please limit Pro Form Shortcodes to ONE for each Post/Page; and do NOT attempt to use more than one Pro Form Shortcode on the same Post/Page (at the same time). In this release we have added a friendly JavaScript alert/warning for site owners that attempt this, so that problems and confusion can be avoided in this unlikely scenario.
248
 
249
  = v130513 =
250
+
251
  * (s2Member/s2Member Pro) **s2Stream Shortcode Bug Fix (#256)** Fixing a bug first introduced in the previous release where we added support for `player_aspectratio`. This quick update corrects the PHP parse error at line #154 of `sc-files-in.inc.php`. It also corrects the behavior of the `player_height=""` and `player_aspectratio=""` Shortcode Attributes for the `s2Stream` Shortcode. Many thanks to everyone that reported this bug.
252
  * (s2Member Pro) **Codestyling Localization** Removing symlink creator for Codestyleing Localization compatibility. There have been some reports of problems during WordPress® automatic upgrades (when/if the symlink exists). Until we can find a way to avoid this, we're disabling the automatic symlink generator. If you're running the Codestyling Localization plugin together with s2Member Pro, you will need to create the symlink yourself if you want to make s2Member fully compatible. Please create a symlink here: `/wp-content/plugins/s2member/s2member-pro` that points to the s2Member Pro directory: `/wp-content/plugins/s2member-pro`. See notes in previous changelog for further details on this.
253
 
260
 
261
  2. Now, please follow the [instructions here](http://www.s2member.com/pro/#!s2_tab_jump=s2-pro-install-update) to upgrade s2Member® Pro manually.
262
 
 
263
  = v130510 =
264
+
265
  * (s2Member Pro) **Authorize.Net UK (and Other Currencies) (#104)** Adding support for Authorize.Net UK and other currencies too. s2Member Pro now officially supports Authorize.Net UK Edition. It is now possible to change your Authorize.Net Pro Form Shortcode Attribute `cc="USD"` to one of these values: `cc="USD"`, or `cc="CAD"` or `cc="EUR"` or `cc="GBP"`. For further details, please see: `Dashboard -› Authorize.Net Pro Forms -› Shortcode Attributes (Explained)`.
266
  * (s2Member Pro) **ClickBank Skins (#227)** Adding support for the `cbskin=""` Shortcode Attribute. For further details, please see: `Dashboard -› ClickBank Buttons -› Shortcode Attributes (Explained)`.
267
  * (s2Member Pro) **ClickBank PitchPlus Upsell Flows (#227)** Adding support for ClickBank PitchPlus Upsell Flows via new Shortcode Attributes: `cbfid=""`, `cbur=""`, `cbf="auto"`. s2Member Pro now officially supports ClickBank PitchPlus Upsell Flows. We support PitchPlus Basic and PitchPlus Advanced too. For further details, please see: `Dashboard -› ClickBank Buttons -› Shortcode Attributes (Explained)`.
291
  * (s2Member Pro) **Username Validation (#246)** Now forcing user input (during Pro Form registration) to lowercase on Multisite Networks to prevent unnecessary validation errors during checkout (saving a customer time). Also, s2Member now validates a customer's Username before it is passed through `sanitize_user()` (a core WordPress® function). This prevents confusion for a customer where certain characters were stripped out automatically, causing them problems when attempting to log in for the first time (e.g. the customer thinks their Username is `john~doe`; when it is actually `johndoe` because WordPress (when running a Multisite Network) removes anything that is NOT `a-z0-9 _.-@` (and s2Member removes whitespace as well).
292
 
293
  = v130406 =
294
+
295
  * (s2Member/s2Member Pro) **Multisite Networks (#145)** Bug fix on Multisite Networks related to User deletions and subsequent logins on child blogs. For further details, please see [this thread](http://www.s2member.com/forums/topic/deleted-users-can-log-in/#post-46738).
296
  * (s2Member Pro) **New Feature (#59)** It is now possible to Edit a User in the Dashboard and check a box to have the User's password reset, and an email message sent automatically to the User/Member with a copy of the Username/Password. This requires s2Member® Pro.
297
  * (s2Member Pro) **API Functions (#158)** New PayPal® Pro API Functions (`s2member_pro_paypal_rbp_for_user`, `s2member_pro_paypal_rbp_times_for_user`). These are for developers. For further details, please see [this article](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) in the s2Member® Codex.
298
  * (s2Member Pro) **API Functions (#158)** New PayPal® Pro (PayFlow® Edition) API Functions (`s2member_pro_payflow_rbp_for_user`, `s2member_pro_payflow_rbp_times_for_user`). These are for developers. For further details, please see [this article](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) in the s2Member® Codex.
299
 
300
  = v130404 =
301
+
302
  * (s2Member Pro) **Compatibility (#108)** Updating s2Member® Pro's integration with Authorize.Net to allow charges up to `$99,999.00` (formerly `$10,000.00`).
303
  * (s2Member/s2Member Pro) **User Searches (#91)** Updating `pre_user_query` filter to include `first_name/last_name` (instead of only the `display_name`).
304
  * (s2Member/s2Member Pro) **bbPress Integration (#88)** Updating bbPress Role/Cap filter to exclude itself during bbPress deactivation. This was causing a loss of the `read` Capability inadvertently.
310
  * (s2Member/s2Member Pro) **JW Player (#121)** Adding support for percentage-based width/height values in `player_width="" player_height=""` attributes of an s2Stream shortcode that generates a JW Player. Example: `player_width="100%"`.
311
 
312
  = v130221 =
313
+
314
  * (s2Member/s2Member Pro) **Bug Fix (#41)** Custom Registration/Profile Fields with an ID that ended with `-[0-9]+` or `_[0-9]+` was failing JavaScript validation due to a parsing issue. Fixed in this release.
315
  * (s2Member/s2Member Pro) **Bug Fix (#43)** A bug first introduced in the last release of s2Member® v130220 was preventing Administrative New User Notifications from being sent by s2Member®. Fixed in this release.
316
 
317
  = v130220 =
318
+
319
  * (s2Member Pro) **Feature Enhancement/User Exportation (#33)** Adding support for UTF-8 BOM in CSV User export files. Now a configurable option during User/Member Exportation.
320
  * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#21)** Adding additional Replacement Codes for New User Email Notifications (for both the User/Member Notification and also for the Administrator Notification). The following Replacement Codes are now possible: `%%role%%`, `%%label%%`, `%%level%%`, `%%ccaps%%`. Also adding four new Filters for developers. These include: `ws_plugin__s2member_welcome_email_sbj`, `ws_plugin__s2member_welcome_email_msg`, `ws_plugin__s2member_admin_new_user_email_sbj`, `ws_plugin__s2member_admin_new_user_email_msg`. See `Dashboard -› General Options -› Email Configuration` for further details.
321
  * (s2Member/s2Member Pro) **Feature Enhancement/Emails (#30)** Adding support for PHP tags in the following emails: New User Notification, Administrative New User Notification, Signup Confirmation Email, Specific Post/Page Confirmation Email. See the relevant sections in your Dashboard for further details. Such as: `s2Member® -› General Options -› Email Configuration` and `s2Member® -› PayPal® Options -› Signup Confirmation Email`.
327
  * (s2Member/s2Member Pro) **Feature Enhancement/s2Stream Shortcode (#32)** Adding additional support for JW Player™ Captions, Titles, Descriptions, and Media IDs (i.e. `player_title=""`, `player_description=""`, `player_mediaid=""`, `player_captions=""`). Please check the Shortcode Attributes tab in [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/#using-s2stream-shortcodes) for further details.
328
 
329
  = v130214 =
330
+
331
  * **(Maintenance Release) Upgrade immediately.**
332
  * (s2Member/s2Member Pro) **Log Viewer (#16)** Additional log file descriptions have been added to the Dashboard, along with some other UI enhancements in this section.
333
  * (s2Member/s2Member Pro) **Bug Fix (#18)** Usernames consisting of all numeric values were not always being redirected to the Login Welcome Page upon logging in, even when s2Member® was configured to do so. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/subscribers-not-taken-to-welcome-page/page/2/#post-41663).
338
  * (s2Member/s2Member Pro) **Compatibility** Bumping minimum WordPress® requirement from v3.2 up to v3.3. Starting with this release, s2Member® is no longer compatible with the much older WordPress® v3.2.
339
 
340
  = v130213 =
341
+
342
  * **(Maintenance Release) Upgrade immediately.**
343
  * (s2Member Pro) **Compatibility (#13)** PayPal® Payments Pro, PayPal® Payments Pro (Payflow Edition), and Authorize.Net. s2Member® Pro now supports a recurring interval of Semi-Yearly (e.g. charges occur every six months). This has always been possible by manipulating Shortcode Attribues, but it's now officially supported by Pro Form Generators in your Dashboard — which come with s2Member® Pro.
344
  * (s2Member Pro) **Compatibility (#13)** ClickBank® Recurring Products. ClickBank® has started allowing a Weekly recurring interval and stopped allowing Yearly. s2Member® has been updated in this release to support a Weekly recurring interval with ClickBank®; and to remove the Yearly option in the ClickBank® Button Generator.
375
  * (s2Member/s2Member Pro) **Compatibility** Updated all of s2Member's IPN handlers to accept `$_REQUEST` data for Proxy-related variables like `s2member_paypal_proxy_return_url`. This allows s2Member® itself to use `$_POST` variables for Proxy-related variables; and it further reduces the likelihood of 403 Forbidden errors caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/). One issue this should help to correct, is a mysterious case where a `success=""` Shortcode Attribute is not working as you might expect. This can be caused by [paranoid Mod Security configurations](http://www.s2member.com/kb/mod-security-random-503-403-errors/) at places like HostGator®, because a URL is passing through a query string. This release will help to prevent this from becoming a problem, because `success=""` URLs will be passed through `$_POST` variables now in all Pro Form integrations.
376
 
377
  = v130207 =
378
+
379
  * **(Maintenance Release) Upgrade immediately.**
380
  * (s2Member Pro) **Bug Fix (#2)** Modification Tracking Codes not working properly under s2Member's Authorize.Net integration. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/shareasale-integration-not-working/#post-40954).
381
  * (s2Member) **Compatibility (#4)** PayPal® integrated into a site charging in the JPY currency was incorrectly limited to an amount of 10000.00. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/default-currency-can-i-change-it-to-yen/#post-40590).
384
  * (s2Member/s2Member Pro) **Compatibility (#6)** s2Member® File Downloads (audio/video files) with spaces in a file name were not always being handled properly. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/jwplayer-filename-bug/#post-40799).
385
 
386
  = v130203 =
387
+
388
  * **(New Release) Please read this changelog for important details.**
389
  * (s2Member Pro) **Remote Ops API (`create_user`)** s2Member® Pro's Remote Operations API, for the `create_user` Operation has been updated to support a new specification: `modify_if_login_exists`. For further details, please check your s2Member® Pro Dashboard here: `s2Member® -› API / Scripting -› Remote Operations API`.
390
  * (s2Member Pro) **Remote Ops API (`modify_user`,`delete_user`)** s2Member® Pro's Remote Operations API has been updated to support two additional Operations: `update_user` and `delete_user`. For further details on these new Operations, please check your s2Member® Pro Dashboard here: `s2Member® -› API / Scripting -› Remote Operations API`.
395
  * (s2Member Pro) **User Importation (#89)** s2Member® Pro's User/Member Import format changed in this release (with respect to Custom Registration/Profile Fields only). If you are importing Custom Registration/Profile Fields, please review [this KB article](http://www.s2member.com/kb/importing-updating-users/#custom-registration-profile-fields) before you import new Users/Members or mass update any existing Users/Members. ALSO NOTE: User/Member CSV Export Files generated by previous versions of s2Member® Pro (if they contained any Custom Registration/Profile Fields) will NOT be compatible with this latest release (e.g. you should NOT attempt to re-import those old files in an effort to mass update existing Users/Members). Please generate a new User/Member CSV Export File in the latest release of s2Member® Pro before attempting to edit and/or mass update existing Users/Members with applications like MS Excel or OpenOffice.
396
 
397
  = v130123 =
398
+
399
  * **(Maintenance Release) Upgrade immediately.**
400
  * (s2Member/s2Member Pro) **s2Stream Shortcode (#78)** s2Member® now supports JW Player® license keys using Shortcode Attribute `player_key=""`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
401
  * (s2Member/s2Member Pro) **s2Stream Shortcode (#79)** s2Member® now supports JW Player® [Advanced Option Blocks](http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player) using Shortcode Attribute `player_option_blocks=""`. Example: `player_option_blocks="sharing:{}"`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
404
  * (s2Member/s2Member Pro) **KB Articles** Inline documentation updated in some areas, with a few links pointing to helpful/related KB articles.
405
 
406
  = v130121 =
407
+
408
  * **(Maintenance Release) Upgrade immediately.**
409
  * **New Feature** s2Member® now comes with a new Shortcode `[s2Stream file_download="video.mp4" player="jwplayer-v6" ... /]`, making it MUCH easier for site owners to implemement RTMP streams of audio/video content. For further details, please check your Dashboard under: `s2Member® -› Download Options -› JW Player® v6 and RTMP Protocol Examples`. See also: `s2Member® -› Download Options -› Shortcode Attributes (Explained)`.
410
  * **Compatibility (#75)** Updated s2Member's local file storage engine (for File Downloads via s2Member®), to support special characters in file names. Discussed in [this thread](http://www.s2member.com/forums/topic/problem-with-quotes-in-filename-downloads/#post-38395).
412
  * **Compatibility** Updated s2Member's integration with Amazon® S3 to extend the default 30 second connection timeout (which was too conservative for many integrations) up to 24 hours by default, making it match the same as s2Member's Amazon® CloudFront connection timeout. For further details, please check your Dashboard under: `s2Member® -› Download Options -› Amazon® S3/CDN Storage -› Dev Note w/Technical Details`. It is possible to modify this connection timeout through a Filter discussed there.
413
 
414
  = v130116 =
415
+
416
  * **(Maintenance Release) Upgrade immediately.**
417
  * **Compatibility (#39)** Updated codes samples for JW Player®, to include the `mp4:` prefix when implementing RTMP streams against MP4 video files. Discussed in [this thread](http://www.s2member.com/forums/topic/cloudfront-subfolder-streaming-error/#post-35750).
418
  * **Compatibility (#51)** Updated Payflow® API to support recurring billing every six months. Discussed in [this thread](http://www.s2member.com/forums/topic/payflow-error-6-month-recurring-membership/#post-36053).
420
  * **Feature Improvement (#71)** s2Member® has been updated to support byte-range requests with it's default local file storage engine, served from the `/s2member-files/` directory. s2Member® has always supported byte-range requests when integrated with Amazon® CloudFront. Now it supports byte-range requests in it's default local storage engine too. This will improve compatibility with mobile devices, iTunes™ and other devices that use byte-range requests. Discussed in [this thread](http://www.s2member.com/forums/topic/any-way-to-set-accept-ranges-for-downloads/#post-15871).
421
 
422
  = v121213 =
423
+
424
  * **(Maintenance Release) Upgrade immediately.**
425
  * **Updated for compatibility with WordPress® v3.5. Backward compatibility remains for previous versions of WordPress®, as far back as WordPress® v3.2.**
426
  * (s2Member Pro) **Bug Fix**. An issue first introduced in s2Member® Pro v120517 where we fixed problems with the `maxlength` attribute in Authorize.Net Pro Forms, left a remaining problem. The State/Province field in the Billing Address section of a Pro Form, since s2Member® Pro v120517, has only accepted 2 characters when it should have been capable of accepting up to 40 characters. Fixed in this release.
430
  * (s2Member Pro) **Bug Fix**. Free Registration Pro Forms submitted without having payment gateway API credentials configured within s2Member® resulted in an on-site error message when there should NOT be one (because a site owner is dealing with Free Registration only in this scenario). Fixed in this release.
431
 
432
  = v121204 =
433
+
434
  * **(Maintenance Release) Upgrade immediately.**
435
  * (s2Member / s2Member Pro) **Bug Fix**. An issue with long billing agreement descriptions under PayPal® Pro (Payflow® Edition) accounts, when coupon codes were being used by customers, was addressed in this release. Symptoms of this bug were errors in s2Member® log files from the Payflow® API, with error code: `11581-Profile description is invalid`. Caused by undocumented length requirements for the billing agreement description under the Payflow® API. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/error-generic-processor-error-11581/page/2/#post-33477).
436
  * (s2Member / s2Member Pro) **Compatibility**. Updated JW Player code samples for compatibility with JW Player v6. Discussed in [this thread](http://www.s2member.com/forums/topic/jw-player-rtmp-streaming-mp4-amazon-s3/page/2/#post-32074).
437
 
438
  = v121201 =
439
+
440
  * **(Maintenance Release) Upgrade immediately.**
441
  * (s2Member / s2Member Pro) **Bug Fix**. Support Rep Cristián Lávaque found a bug in the behavior of s2Member’s Alternative View Restrictions, associated with Category listings in custom menu widgets. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/welcome-page-title-shows-but-no-content/page/2/#post-29802).
442
  * (s2Member Pro) **Feature Enhancement**. s2Member Pro Forms integrated ONLY with PayPal Express Checkout (`accept="paypal" accept_via_paypal="paypal"`), will no longer display a Billing Method section on the Pro Form, as it's not necessary (there's only one possible option in this case, and it's already depicted by the PayPal button at the bottom of the Pro Form). Many site owners had implemented CSS hacks to hide this section of a Pro Form configured this way, based on [this FAQ article](http://www.s2member.com/faqs/#s2-faqs-paypal-pro-not-required). This hack is no longer necessary - starting with this release.
446
  * (s2Member Pro) **Authorize.Net**. True montly billing instead of every 30 days. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/1-month-recurring-billing-instead-of-30-days/#post-30420).
447
 
448
  = v121023 =
449
+
450
  * **(Maintenance Release) Upgrade immediately.**
451
  * (s2Member / s2Member Pro) **Bug Fix**. A bug related to s2Member's `is_site_root()` method, when fancy permalinks are NOT in use; has been corrected for compatibility with the latest version of WordPress. Please see [this thread](http://www.s2member.com/forums/topic/new-custom-field-default-not-on-old-users/#post-28792) for futher details.
452
  * (s2Member Pro) **Import/Export Bug Fix**. An issue related to RFC guidelines for escape sequences in CSV files has been addressed in this release. Please see [this thread](http://www.s2member.com/forums/topic/new-custom-field-default-not-on-old-users/#post-28792) for futher details.
458
  * (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was modified to prevent dates in the future from being requested from the DataLink API. ccBill® was responding to some DataLink requests with a failed authentication, which were caused by dates/times in the future; according to MST on the ccBill® side of things.
459
 
460
  = v120703 =
461
+
462
  * **(Maintenance Release) Upgrade immediately.**
463
  * (s2Member/s2Member Pro) **Payflow® Express Checkout**. An issue related to Express Checkout (when using the Payflow® API), has been corrected in this release. A bug in previous releases, was causing error messages under certain circumstances that read `Field format error: Invalid PayerID`.
464
  * (s2Member/s2Member Pro) **WordPress® v3.4**. Standards compliance. Routine maintenance. Re-confirmed compatibility with WordPress® v3.4.
465
 
466
  = v120622 =
467
+
468
  * **(Maintenance Release) Upgrade immediately.**
469
  * (s2Member/s2Member Pro) **WordPress® v3.4**. Confirmed compatibility with WordPress® v3.4.
470
  * (s2Member/s2Member Pro) **Currency Conversion**. This release updates s2Member's currency conversion API, which is powered by Google®. Please see [this thread](http://www.s2member.com/forums/topic/paypal-agreecontinue-sends-to-memb-options/#post-16972) for further details.
472
  * (s2Member/s2Member Pro) **Character Encoding**. This release fixes a big in s2Member's character encoding conversion, for IPN responses received from PayPal®. This releases also fixes an issue specifically with the pound sterling symbol `£`, which was causing some transient IPN data to become corrupted, under the right scenario.
473
 
474
  = v120608 =
475
+
476
  * **(Maintenance Release) Upgrade immediately.**
477
  * (s2Member/s2Member Pro) **WordPress® v3.4**. Updated for compatibility with the coming release of [WordPress® v3.4](http://wordpress.org/news/2012/06/wordpress-3-4-release-candidate-2/). Additional details available [here](http://wordpress.org/news/2012/06/wordpress-3-4-release-candidate-2/).
478
  * (s2Member/s2Member Pro) **Payflow® Bug Fix**. This release addresses two bugs that existed in s2Member's Payflow® integration. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/transactions-not-going-through/#post-15896) for further details.
480
  * (s2Member) **Documentation**. Code samples for Content Dripping have been updated in the Dashboard, in order to correct a date comparison snippet, which was WRONG. Please check your Dashboard under: `s2Member® -› API Scripting -› Content Dripping -› Example #2`, for the updated code sample.
481
 
482
  = v120601 =
483
+
484
  * **(Maintenance Release) Upgrade immediately.**
485
  * (s2Member Pro) **ClickBank® Button Shortcodes**. This release works around a bug that has been discovered on the ClickBank® side of things, when a `+` character appears in the `desc=""` attribute of your ClickBank® Button Shortcode. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-output-url/#post-15166) for further details.
486
  * (s2Member Pro) **Payflow® Daily Recurrence (Limitation)**. PayPal® Pro accounts with the Payflow® Edition API, are NOT capable of charging on a `daily` recurring basis. Previous releases of s2Member® Pro mistakenly documented this as being possible. Resolved in this release. PayPal® Pro accounts operating with the Payflow® Edition (and integrated with s2Member®), are only capable of charging recurring fees on the following schedules: `weekly, bi-weekly, monthly, quarterly, or yearly`. This is in large part, a limitation in the Payflow® API, which we hope will be resolved by PayPal® in a future version. Please feel free to contact PayPal® if you'd like to vote for this feature! This limitation does NOT affect existing PayPal® Pro accounts operating exclusively under the PayPal® Pro API (e.g. without Payflow®).
488
  * (s2Member/s2Member Pro) **Bug Fix**. A bug related to inaccurate role assignment, under certain scenarios (for administrative accounts). Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/inaccurate-role-assignment-in-s2member-pro/#post-14122) for further details.
489
 
490
  = v120517 =
491
+
492
  * **(Maintenance Release) Upgrade immediately.**
493
  * (s2Member Pro) **PayPal® Pro Forms**. This release removes all limitations on the maximum length of an initial trial/period. It is now possible to offer any number of days/weeks/months/years for free, or at a different initial rate.
494
  * (s2Member Pro) **Authorize.Net® Bug Fix**. Max length (i.e. `maxlength=""`) adjusted in Pro Forms integrating with Authorize.Net. 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.
495
  * (s2Member/s2Member Pro) **JW Player® Code Samples**. Updated code samples for JW Player®, to reduce the possibility of a namespace conflict in configuration variables. For further details, please check [this thread](http://www.s2member.com/forums/topic/jw-player-new-code-conflict/#post-13819).
496
 
497
  = v120514 =
498
+
499
  * **(Maintenance Release) Upgrade immediately.**
500
  * (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`.
501
  * (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)`.
505
  * (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`.
506
 
507
  = v120309 =
508
+
509
  * (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`.
510
  * (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.
511
 
512
  = v120308 =
513
+
514
  * (s2Member/s2Member Pro) **Custom Registration/Profile Fields**. Now possible to create a Custom Field that's always hidden, during both registration and any future Profile edits (e.g. for administrative purposes only).
515
  * (s2Member/s2Member Pro) **Compatibility**. Minor updates for compatibility with the coming release of WordPress® v3.4.
516
  * (s2Member Pro) **Bug fix**. Broken link in UI leading to: `s2m-pro-extras.zip`. Corrected in this release.
517
 
518
  = v120301 - 1.0 =
519
+
520
  * ... trimmed away at v111220.
521
  * Initial release: v1.0.
s2member.php CHANGED
@@ -19,8 +19,8 @@
19
  */
20
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
 
22
- Version: 131109
23
- Stable tag: 131109
24
 
25
  SSL Compatible: yes
26
  bbPress Compatible: yes
@@ -32,7 +32,7 @@ Multisite Blog Farm Compatible: yes
32
  PayPal Standard Compatible: yes
33
  PayPal Pro Compatible: yes w/s2Member Pro
34
  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.7.1
@@ -61,7 +61,7 @@ PayPal Pro Integration: http://www.s2member.com/videos/ED70D90C6749DA3D/
61
  Professional Installation URI: http://www.s2member.com/professional-installation/
62
 
63
  Description: s2Member, a powerful (free) membership plugin for WordPress. Protect/secure members only content with roles/capabilities.
64
- Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, paypal pro, pay pal, authorize, authorize.net, google checkout, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
65
 
66
  -- end section for WordPress parsing. ------------------------------------------------------------------------------- */
67
  if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
@@ -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", "131109" /* !#distro-version#! */);
79
  /**
80
  * Minimum PHP version required to run s2Member.
81
  *
@@ -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", "131109" /* !#distro-version#! */);
109
  /*
110
  Several compatibility checks.
111
  If all pass, load the s2Member plugin.
19
  */
20
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
 
22
+ Version: 131126
23
+ Stable tag: 131126
24
 
25
  SSL Compatible: yes
26
  bbPress Compatible: yes
32
  PayPal Standard Compatible: yes
33
  PayPal Pro Compatible: yes w/s2Member Pro
34
  Authorize.Net Compatible: yes w/s2Member Pro
35
+ Google Wallet Compatible: yes w/s2Member Pro
36
  ClickBank Compatible: yes w/s2Member Pro
37
 
38
  Tested up to: 3.7.1
61
  Professional Installation URI: http://www.s2member.com/professional-installation/
62
 
63
  Description: s2Member, a powerful (free) membership plugin for WordPress. Protect/secure members only content with roles/capabilities.
64
+ Tags: s2, s2member, s2 member, membership, users, user, members, member, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, paypal pro, pay pal, authorize, authorize.net, google wallet, clickbank, click bank, buddypress, buddy press, bbpress, bb press, shopping cart, cart, checkout, ecommerce
65
 
66
  -- end section for WordPress parsing. ------------------------------------------------------------------------------- */
67
  if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
75
  * @var str
76
  */
77
  if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
78
+ define("WS_PLUGIN__S2MEMBER_VERSION", "131126" /* !#distro-version#! */);
79
  /**
80
  * Minimum PHP version required to run s2Member.
81
  *
105
  * @var str
106
  */
107
  if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
108
+ define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "131126" /* !#distro-version#! */);
109
  /*
110
  Several compatibility checks.
111
  If all pass, load the s2Member plugin.