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

Version Description

  • (s2Member). Bug fix. The Shortcode version of s2Member's Profile Editing Panel ( i.e. [s2Member-Profile /] ) was not validating input fields properly. This bug was has been resolved in v3.5.8+.
  • (s2Member). Compatibility. s2Member now requires PHP v5.2.3+ instead of just PHP v5.2+. This is because call_user_func_array() in early versions of PHP 5.2 did not support static class methods with a scope resolution operator. If you've had trouble getting s2Member v3.5+ to run on your server, this is likely the cause. Please make sure you're running PHP v5.2.3+.
  • (s2Member). Bug fix. PayPal Button Encryption was failing under some circumstances, because the PayPal API Method BMCreateButton requires two decimal places at all times. The bug fix in this release does NOT require any changes to your Shortcode attributes. Rather, the encryption routine will now automatically convert numeric dollar amounts during encryption.
  • (s2Member Pro). Compatibility. Starting with s2Member Pro v3.5.8+, Pro Cancellation Forms will automatically detect Customers that may have signed up with a Standard PayPal Button, and provide the Customer with a link & instructions about how to cancel their "Subscription" via PayPal. This makes it possible for site owners upgrading to s2Member Pro, to provide their Customers with just ONE Cancellation Form, which has the ability to consider both PayPal Standard "Subscriptions", and also "Recurring Profiles"; which are used by s2Member Pro Forms.
Download this release

Release Info

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

Code changes from version 3.5.7 to 3.5.8

images/brand-tools.fla CHANGED
Binary file
images/brand-tools.png CHANGED
Binary file
images/brand-videos.fla ADDED
Binary file
images/brand-videos.png ADDED
Binary file
includes/classes/files-in.inc.php CHANGED
@@ -64,7 +64,7 @@ if (!class_exists ("c_ws_plugin__s2member_files_in"))
64
  && wp_redirect (add_query_arg (urlencode_deep (array ("s2member_seeking" => "file-" . $_GET["s2member_file_download"])), get_page_link ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["file_download_limit_exceeded_page"])), apply_filters ("ws_plugin__s2member_content_redirect_status", 301, get_defined_vars ())) !== "nill")
65
  exit ();
66
  /**/
67
- else if (preg_match ("/^access[_\-]s2member[_\-]level([0-4])\//", $_GET["s2member_file_download"], $m))
68
  {
69
  $level_req = $m[1]; /* Which Level does this require? */
70
  if (!$user->has_cap ("access_s2member_level" . $level_req) /* Does the User have access to this Level? */
@@ -168,7 +168,7 @@ if (!class_exists ("c_ws_plugin__s2member_files_in"))
168
  while (!feof ($stream) && ($chunk_size = strlen ($data = fread ($stream, 2097152))))
169
  eval ('echo dechex ($chunk_size) . "\r\n". $data . "\r\n"; @flush ();');
170
  /**/
171
- fclose ($stream);
172
  /**/
173
  exit ("0\r\n\r\n");
174
  }
64
  && wp_redirect (add_query_arg (urlencode_deep (array ("s2member_seeking" => "file-" . $_GET["s2member_file_download"])), get_page_link ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["file_download_limit_exceeded_page"])), apply_filters ("ws_plugin__s2member_content_redirect_status", 301, get_defined_vars ())) !== "nill")
65
  exit ();
66
  /**/
67
+ else if (preg_match ("/^access[_\-]s2member[_\-]level([0-9]+)\//", $_GET["s2member_file_download"], $m))
68
  {
69
  $level_req = $m[1]; /* Which Level does this require? */
70
  if (!$user->has_cap ("access_s2member_level" . $level_req) /* Does the User have access to this Level? */
168
  while (!feof ($stream) && ($chunk_size = strlen ($data = fread ($stream, 2097152))))
169
  eval ('echo dechex ($chunk_size) . "\r\n". $data . "\r\n"; @flush ();');
170
  /**/
171
+ fclose($stream);
172
  /**/
173
  exit ("0\r\n\r\n");
174
  }
includes/classes/paypal-return-in.inc.php CHANGED
@@ -37,11 +37,11 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
37
  /**/
38
  $paypal["subscr_gateway"] = ($_GET["s2member_paypal_proxy"]) ? $_GET["s2member_paypal_proxy"] : "paypal";
39
  /**/
40
- if (!$_GET["s2member_paypal_proxy"] || !preg_match ("/ty-email/",$_GET["s2member_paypal_proxy_use"]))
41
  {
42
  $payment_status_issues = "/^(failed|denied|expired|refunded|partially_refunded|reversed|reversal|canceled_reversal|voided)$/i";
43
  /**/
44
- if (preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i",$paypal["custom"]))
45
  { /* The business address validation was removed from this routine, because PayPal® always fills that with the primary
46
  email address. In cases where an alternate PayPal® address is being paid, validation was not possible. */
47
  $paypal["s2member_log"][] = "s2Member originating domain ( _SERVER[HTTP_HOST] ) validated.";
@@ -55,9 +55,9 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
55
  /*
56
  Specific Post/Page Access ~ Sales.
57
  */
58
- if (/**/(preg_match ("/^web_accept$/i",$paypal["txn_type"]))/**/
59
- && (preg_match ("/^sp\:[0-9,]+\:[0-9]+$/",$paypal["item_number"]))/**/
60
- && (!preg_match ($payment_status_issues,$paypal["payment_status"]))/**/
61
  && ($paypal["txn_id"])/**/)
62
  {
63
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
@@ -123,10 +123,10 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
123
  With Auto-Return URLs via PDT, PayPal® will send subscr_payment instead of subscr_signup.
124
  So we need to look for (web_accept|subscr_signup|subscr_payment), and treat the same.
125
  */
126
- else if (/**/(preg_match ("/^(web_accept|subscr_signup|subscr_payment)$/i",$paypal["txn_type"]))/**/
127
- && (preg_match ("/^[1-4](\:|$)([\+a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/",$paypal["item_number"]))/**/
128
  && ($paypal["subscr_id"] || ($paypal["subscr_id"] = $paypal["txn_id"]))/**/
129
- && (!preg_match ($payment_status_issues,$paypal["payment_status"]))/**/)
130
  {
131
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
132
  do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup", get_defined_vars ());
@@ -138,7 +138,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
138
  /*
139
  New Subscription with advanced update vars ( option_name1, option_selection1 ).
140
  */
141
- if (preg_match ("/(updat|upgrad)/i",$paypal["option_name1"]) && $paypal["option_selection1"]) /* Advanced Subscription update modifications. */
142
  /* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified. PayPal® will not allow the
143
  modify=2 parameter to be used in those scenarios, because technically there is nothing to update. The only thing to be updated is the account. */
144
  {
@@ -202,7 +202,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
202
  /**/
203
  if ($redirection_url_after_modification = apply_filters ("ws_plugin__s2member_redirection_url_after_modification", false, get_defined_vars ()))
204
  {
205
- $paypal["s2member_log"][] = "Redirecting this Member to a custom URL after modification: " . $redirection_url_after_modification;
206
  /**/
207
  echo '<script type="text/javascript">' . "\n";
208
  echo "alert('Thank you! You\\'ve been updated to:\\n\\n" . esc_js ($paypal["item_name"]) . "');" . "\n";
@@ -271,21 +271,47 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
271
  do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_signup_wo_update_vars", get_defined_vars ());
272
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
273
  /**/
274
- $paypal["s2member_log"][] = "Redirecting Customer to Registration Page. They need to Register now.";
275
- /**/
276
  if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ())
277
  {
278
- echo '<script type="text/javascript">' . "\n"; /* This default location can be Filtered in WP with: `wp_signup_location`. */
279
- echo "alert('Thank you! Your account has been approved.\\nThe next step is to Register.\\n\\nPlease click OK to Register now.');" . "\n";
280
- echo "window.location = '" . esc_js (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . "';" . "\n"; /* Filterable. */
281
- echo '</script>' . "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  }
283
  else /* Otherwise, this is NOT a Multisite install. Or it is, but the Super Administrator is NOT selling Blog creation. */
284
  {
285
- echo '<script type="text/javascript">' . "\n"; /* This location can be Filtered with: `wp_register_location`. */
286
- echo "alert('Thank you! Your account has been approved.\\nThe next step is to Register a Username.\\n\\nPlease click OK to Register now.');" . "\n";
287
- echo "window.location = '" . esc_js (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . "';" . "\n";
288
- echo '</script>' . "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  }
290
  /**/
291
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
@@ -300,8 +326,8 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
300
  /*
301
  Subscription modifications.
302
  */
303
- else if (/**/(preg_match ("/^subscr_modify$/i",$paypal["txn_type"]))/**/
304
- && (preg_match ("/^[1-4](\:|$)([\+a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/",$paypal["item_number"]))/**/
305
  && ($paypal["subscr_id"])/**/)
306
  {
307
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
37
  /**/
38
  $paypal["subscr_gateway"] = ($_GET["s2member_paypal_proxy"]) ? $_GET["s2member_paypal_proxy"] : "paypal";
39
  /**/
40
+ if (!$_GET["s2member_paypal_proxy"] || !preg_match ("/ty-email/", $_GET["s2member_paypal_proxy_use"]))
41
  {
42
  $payment_status_issues = "/^(failed|denied|expired|refunded|partially_refunded|reversed|reversal|canceled_reversal|voided)$/i";
43
  /**/
44
+ if (preg_match ("/^" . preg_quote (preg_replace ("/\:([0-9]+)$/", "", $_SERVER["HTTP_HOST"]), "/") . "/i", $paypal["custom"]))
45
  { /* The business address validation was removed from this routine, because PayPal® always fills that with the primary
46
  email address. In cases where an alternate PayPal® address is being paid, validation was not possible. */
47
  $paypal["s2member_log"][] = "s2Member originating domain ( _SERVER[HTTP_HOST] ) validated.";
55
  /*
56
  Specific Post/Page Access ~ Sales.
57
  */
58
+ if (/**/(preg_match ("/^web_accept$/i", $paypal["txn_type"]))/**/
59
+ && (preg_match ("/^sp\:[0-9,]+\:[0-9]+$/", $paypal["item_number"]))/**/
60
+ && (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/
61
  && ($paypal["txn_id"])/**/)
62
  {
63
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
123
  With Auto-Return URLs via PDT, PayPal® will send subscr_payment instead of subscr_signup.
124
  So we need to look for (web_accept|subscr_signup|subscr_payment), and treat the same.
125
  */
126
+ else if (/**/(preg_match ("/^(web_accept|subscr_signup|subscr_payment)$/i", $paypal["txn_type"]))/**/
127
+ && (preg_match ("/^[1-4](\:|$)([\+a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"]))/**/
128
  && ($paypal["subscr_id"] || ($paypal["subscr_id"] = $paypal["txn_id"]))/**/
129
+ && (!preg_match ($payment_status_issues, $paypal["payment_status"]))/**/)
130
  {
131
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
132
  do_action ("ws_plugin__s2member_during_paypal_return_before_subscr_signup", get_defined_vars ());
138
  /*
139
  New Subscription with advanced update vars ( option_name1, option_selection1 ).
140
  */
141
+ if (preg_match ("/(updat|upgrad)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) /* Advanced Subscription update modifications. */
142
  /* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified. PayPal® will not allow the
143
  modify=2 parameter to be used in those scenarios, because technically there is nothing to update. The only thing to be updated is the account. */
144
  {
202
  /**/
203
  if ($redirection_url_after_modification = apply_filters ("ws_plugin__s2member_redirection_url_after_modification", false, get_defined_vars ()))
204
  {
205
+ $paypal["s2member_log"][] = "Redirecting Customer to a custom URL after modification: " . $redirection_url_after_modification;
206
  /**/
207
  echo '<script type="text/javascript">' . "\n";
208
  echo "alert('Thank you! You\\'ve been updated to:\\n\\n" . esc_js ($paypal["item_name"]) . "');" . "\n";
271
  do_action ("ws_plugin__s2member_during_paypal_return_during_subscr_signup_wo_update_vars", get_defined_vars ());
272
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
273
  /**/
 
 
274
  if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ())
275
  {
276
+ if ($redirection_url_after_mms_farm_signup = apply_filters ("ws_plugin__s2member_redirection_url_after_mms_farm_signup", false, get_defined_vars ()))
277
+ {
278
+ $paypal["s2member_log"][] = "Redirecting Customer to a custom URL after signup: " . $redirection_url_after_mms_farm_signup;
279
+ /**/
280
+ echo '<script type="text/javascript">' . "\n";
281
+ echo "alert('Thank you! Your account has been approved.\\nPlease click OK to continue.');" . "\n";
282
+ echo "window.location = '" . esc_js ($redirection_url_after_mms_farm_signup) . "';" . "\n";
283
+ echo '</script>' . "\n";
284
+ }
285
+ else /* Else, use standard/default handling in this scenario. Have the Customer register a Username. */
286
+ {
287
+ $paypal["s2member_log"][] = "Redirecting Customer to Signup Page. They need to Signup/Register now.";
288
+ /**/
289
+ echo '<script type="text/javascript">' . "\n"; /* Can be Filtered w/ `wp_signup_location`. */
290
+ echo "alert('Thank you! Your account has been approved.\\nThe next step is to Register.\\n\\nPlease click OK to Register now.');" . "\n";
291
+ echo "window.location = '" . esc_js (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . "';" . "\n";
292
+ echo '</script>' . "\n";
293
+ }
294
  }
295
  else /* Otherwise, this is NOT a Multisite install. Or it is, but the Super Administrator is NOT selling Blog creation. */
296
  {
297
+ if ($redirection_url_after_signup = apply_filters ("ws_plugin__s2member_redirection_url_after_signup", false, get_defined_vars ()))
298
+ {
299
+ $paypal["s2member_log"][] = "Redirecting Customer to a custom URL after signup: " . $redirection_url_after_signup;
300
+ /**/
301
+ echo '<script type="text/javascript">' . "\n";
302
+ echo "alert('Thank you! Your account has been approved.\\nPlease click OK to continue.');" . "\n";
303
+ echo "window.location = '" . esc_js ($redirection_url_after_signup) . "';" . "\n";
304
+ echo '</script>' . "\n";
305
+ }
306
+ else /* Else, use standard/default handling in this scenario. Have the Customer register a Username. */
307
+ {
308
+ $paypal["s2member_log"][] = "Redirecting Customer to Registration Page. They need to Register now.";
309
+ /**/
310
+ echo '<script type="text/javascript">' . "\n"; /* This location can be Filtered with: `wp_register_location`. */
311
+ echo "alert('Thank you! Your account has been approved.\\nThe next step is to Register a Username.\\n\\nPlease click OK to Register now.');" . "\n";
312
+ echo "window.location = '" . esc_js (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . "';" . "\n";
313
+ echo '</script>' . "\n";
314
+ }
315
  }
316
  /**/
317
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
326
  /*
327
  Subscription modifications.
328
  */
329
+ else if (/**/(preg_match ("/^subscr_modify$/i", $paypal["txn_type"]))/**/
330
+ && (preg_match ("/^[1-4](\:|$)([\+a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"]))/**/
331
  && ($paypal["subscr_id"])/**/)
332
  {
333
  eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
includes/classes/readmes.inc.php CHANGED
@@ -61,9 +61,15 @@ if (!class_exists ("c_ws_plugin__s2member_readmes"))
61
  $rm = preg_replace ("/(\=\=)( )(.+?)( )(\=\=)/", "<h4>$3</h4>", $rm);
62
  $rm = preg_replace ("/(\=)( )(.+?)( )(\=)/", "<h6>$3</h6>", $rm);
63
  /**/
 
 
 
 
 
 
64
  $rm = NC_Markdown ($rm); /* Parse out the Markdown syntax. */
65
  /**/
66
- $r1 = "/(\<a)( href)/i"; /* Modify all links. Assume a nofollow relationship. */
67
  /**/
68
  if ($_blank_targets) /* Modify all links. Always nofollow. ( with _blank targets ? ). */
69
  $rm = preg_replace ($r1, "$1" . ' target="_blank" rel="nofollow external"' . "$2", $rm);
@@ -98,6 +104,12 @@ if (!class_exists ("c_ws_plugin__s2member_readmes"))
98
  $rm = preg_replace ("/(\=\=)( )(.+?)( )(\=\=)/", "<h2>$3</h2>", $rm);
99
  $rm = preg_replace ("/(\=)( )(.+?)( )(\=)/", "<h3>$3</h3>", $rm);
100
  /**/
 
 
 
 
 
 
101
  $rm = NC_Markdown ($rm); /* Parse out the Markdown syntax. */
102
  /**/
103
  $r1 = "/(\<h2(.*?)\>)(.+?)(\<\/h2\>)(.+?)(\<h2(.*?)\>|$)/si";
61
  $rm = preg_replace ("/(\=\=)( )(.+?)( )(\=\=)/", "<h4>$3</h4>", $rm);
62
  $rm = preg_replace ("/(\=)( )(.+?)( )(\=)/", "<h6>$3</h6>", $rm);
63
  /**/
64
+ $y1 = "/\[youtube http\:\/\/www\.youtube\.com\/view_play_list\?p\=(.+?)[\s\/]*?\]/i";
65
+ $y2 = "/\[youtube http\:\/\/www\.youtube\.com\/watch\?v\=(.+?)[\s\/]*?\]/i";
66
+ /**/
67
+ $rm = preg_replace ($y1, '<embed type="application/x-shockwave-flash" src="//www.youtube.com/p/$1?version=3&hd=1&fs=1&rel=0" style="width:320px; height:210px; float:right; margin:0 0 15px 15px;" allowscriptaccess="always" allowfullscreen="true"></embed>', $rm);
68
+ $rm = preg_replace ($y2, '<embed type="application/x-shockwave-flash" src="//www.youtube.com/v/$1?version=3&hd=1&fs=1&rel=0" style="width:320px; height:210px; float:right; margin:0 0 15px 15px;" allowscriptaccess="always" allowfullscreen="true"></embed>', $rm);
69
+ /**/
70
  $rm = NC_Markdown ($rm); /* Parse out the Markdown syntax. */
71
  /**/
72
+ $r1 = "/(\<a)( href)/i"; /* Modify all links. Assume nofollow. */
73
  /**/
74
  if ($_blank_targets) /* Modify all links. Always nofollow. ( with _blank targets ? ). */
75
  $rm = preg_replace ($r1, "$1" . ' target="_blank" rel="nofollow external"' . "$2", $rm);
104
  $rm = preg_replace ("/(\=\=)( )(.+?)( )(\=\=)/", "<h2>$3</h2>", $rm);
105
  $rm = preg_replace ("/(\=)( )(.+?)( )(\=)/", "<h3>$3</h3>", $rm);
106
  /**/
107
+ $y1 = "/\[youtube http\:\/\/www\.youtube\.com\/view_play_list\?p\=(.+?)[\s\/]*?\]/i";
108
+ $y2 = "/\[youtube http\:\/\/www\.youtube\.com\/watch\?v\=(.+?)[\s\/]*?\]/i";
109
+ /**/
110
+ $rm = preg_replace ($y1, '<embed type="application/x-shockwave-flash" src="//www.youtube.com/p/$1?version=3&hd=1&fs=1&rel=0" style="width:320px; height:210px; float:right; margin:0 0 15px 15px;" allowscriptaccess="always" allowfullscreen="true"></embed>', $rm);
111
+ $rm = preg_replace ($y2, '<embed type="application/x-shockwave-flash" src="//www.youtube.com/v/$1?version=3&hd=1&fs=1&rel=0" style="width:320px; height:210px; float:right; margin:0 0 15px 15px;" allowscriptaccess="always" allowfullscreen="true"></embed>', $rm);
112
+ /**/
113
  $rm = NC_Markdown ($rm); /* Parse out the Markdown syntax. */
114
  /**/
115
  $r1 = "/(\<h2(.*?)\>)(.+?)(\<\/h2\>)(.+?)(\<h2(.*?)\>|$)/si";
includes/classes/sc-paypal-button-e.inc.php CHANGED
@@ -45,7 +45,14 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_e"))
45
  $i = 0; /* Initialize incremental variable counter. PayPal® wants these numbered using L_BUTTONVAR{n}; where {n} starts at zero. */
46
  foreach ($inputs as $input => $value) /* Now run through each of the input variables that we parsed from the Full Button Code */
47
  if (!preg_match ("/^cmd$/i", $input)) /* Don't include the `cmd` var; it will produce major errors in the API response. */
48
- eval ('$paypal["L_BUTTONVAR" . $i] = $input . "=" . $value; $i++;'); /* Just keeping this on one line is all. */
 
 
 
 
 
 
 
49
  /**/
50
  if (($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_api_response ($paypal)) && !$paypal["__error"] && $paypal["WEBSITECODE"] && ($code = $paypal["WEBSITECODE"]))
51
  /* Only proceed if we DID get a valid response from the PayPal® API. This works as a nice fallback; just in case the API connection fails. */
45
  $i = 0; /* Initialize incremental variable counter. PayPal® wants these numbered using L_BUTTONVAR{n}; where {n} starts at zero. */
46
  foreach ($inputs as $input => $value) /* Now run through each of the input variables that we parsed from the Full Button Code */
47
  if (!preg_match ("/^cmd$/i", $input)) /* Don't include the `cmd` var; it will produce major errors in the API response. */
48
+ {
49
+ /* The PayPal® API method `BMCreateButton` expects (amount|a1|a3) to include 2 decimal places. */
50
+ if (preg_match ("/^(amount|a1|a3)$/i", $input))
51
+ $value = number_format ($value, 2, ".", "");
52
+ /**/
53
+ $paypal["L_BUTTONVAR" . $i] = $input . "=" . $value;
54
+ $i++; /* Increment variable counter. */
55
+ }
56
  /**/
57
  if (($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_api_response ($paypal)) && !$paypal["__error"] && $paypal["WEBSITECODE"] && ($code = $paypal["WEBSITECODE"]))
58
  /* Only proceed if we DID get a valid response from the PayPal® API. This works as a nice fallback; just in case the API connection fails. */
includes/classes/utils-strings.inc.php CHANGED
@@ -40,7 +40,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_strings"))
40
  return preg_replace ('/\$/', '\\\$', $string);
41
  }
42
  /*
43
- Function that sanitizes a string; by removing non-standard characters.
44
  This allows all characters that appears on a standard computer keyboard.
45
  */
46
  public static function keyboard_chars_only ($string = FALSE)
@@ -82,7 +82,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_strings"))
82
  for ($i = 0, $random_str = ""; $i < $length; $i++)
83
  $random_str .= substr ($chars, mt_rand (0, strlen ($chars) - 1), 1);
84
  /**/
85
- return$random_str;
86
  }
87
  /*
88
  Functions that highlights PHP, and also Shortcodes.
40
  return preg_replace ('/\$/', '\\\$', $string);
41
  }
42
  /*
43
+ Sanitizes a string; by removing non-standard characters.
44
  This allows all characters that appears on a standard computer keyboard.
45
  */
46
  public static function keyboard_chars_only ($string = FALSE)
82
  for ($i = 0, $random_str = ""; $i < $length; $i++)
83
  $random_str .= substr ($chars, mt_rand (0, strlen ($chars) - 1), 1);
84
  /**/
85
+ return $random_str;
86
  }
87
  /*
88
  Functions that highlights PHP, and also Shortcodes.
includes/dropins/bridges/_s2member-bbpress-bridge.php CHANGED
@@ -6,7 +6,7 @@ Framework: WS-BB-DIP-1.0
6
 
7
  Tested up to: 1.0.3
8
  Requires at least: 1.0.3
9
- Requires: s2Member 3.5.3+, bbPress® 1.0.3+
10
 
11
  Copyright: © 2009 WebSharks, Inc.
12
  License: GNU General Public License
6
 
7
  Tested up to: 1.0.3
8
  Requires at least: 1.0.3
9
+ Requires: s2Member 3.5.7+, bbPress® 1.0.3+
10
 
11
  Copyright: © 2009 WebSharks, Inc.
12
  License: GNU General Public License
includes/menu-pages/api-ops.inc.php CHANGED
@@ -916,6 +916,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
916
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
917
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
918
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
919
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
920
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
921
  /**/
916
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
917
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
918
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
919
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
920
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
921
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
922
  /**/
includes/menu-pages/bridges.inc.php CHANGED
@@ -133,6 +133,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
133
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
134
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
135
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
136
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
137
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
138
  /**/
133
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
134
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
135
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
136
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
137
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
138
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
139
  /**/
includes/menu-pages/down-ops.inc.php CHANGED
@@ -298,6 +298,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
298
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
299
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
300
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
301
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
302
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
303
  /**/
298
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
299
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
300
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
301
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
302
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
303
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
304
  /**/
includes/menu-pages/els-ops.inc.php CHANGED
@@ -411,6 +411,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
411
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
412
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
413
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
414
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
415
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
416
  /**/
411
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
412
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
413
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
414
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
415
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
416
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
417
  /**/
includes/menu-pages/info.inc.php CHANGED
@@ -58,6 +58,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
58
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
59
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
60
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
61
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
62
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
63
  /**/
58
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
59
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
60
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
61
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
62
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
63
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
64
  /**/
includes/menu-pages/menu-pages.css CHANGED
@@ -436,6 +436,7 @@ div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table
436
  }
437
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-installation,
438
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-tools,
 
439
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-support,
440
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-donations,
441
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-others
@@ -444,6 +445,7 @@ div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table
444
  }
445
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-installation img,
446
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-tools img,
 
447
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-support img,
448
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-donations img,
449
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-others img
436
  }
437
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-installation,
438
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-tools,
439
+ div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-videos,
440
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-support,
441
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-donations,
442
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-others
445
  }
446
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-installation img,
447
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-tools img,
448
+ div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-videos img,
449
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-support img,
450
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-donations img,
451
  div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-r div.ws-menu-page-others img
includes/menu-pages/mms-options.inc.php CHANGED
@@ -358,6 +358,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
358
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
359
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
360
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
361
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
362
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
363
  /**/
358
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
359
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
360
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
361
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
362
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
363
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
364
  /**/
includes/menu-pages/options.inc.php CHANGED
@@ -1704,6 +1704,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
1704
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
1705
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
1706
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
1707
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
1708
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
1709
  /**/
1704
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
1705
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
1706
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
1707
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
1708
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
1709
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
1710
  /**/
includes/menu-pages/paypal-buttons.inc.php CHANGED
@@ -772,6 +772,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
772
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
773
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
774
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
775
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
776
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
777
  /**/
772
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
773
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
774
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
775
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
776
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
777
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
778
  /**/
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -616,6 +616,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
616
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
617
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
618
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
619
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
620
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
621
  /**/
616
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
617
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
618
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
619
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
620
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
621
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
622
  /**/
includes/menu-pages/scripting.inc.php CHANGED
@@ -1094,6 +1094,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
1094
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
1095
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
1096
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
1097
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
1098
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
1099
  /**/
1094
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
1095
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
1096
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
1097
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
1098
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
1099
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
1100
  /**/
includes/menu-pages/start.inc.php CHANGED
@@ -30,6 +30,22 @@ echo '<td class="ws-menu-page-table-l">' . "\n";
30
  /**/
31
  do_action ("ws_plugin__s2member_during_start_page_before_left_sections", get_defined_vars ());
32
  /**/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  if (apply_filters ("ws_plugin__s2member_during_start_page_during_left_sections_display_registration_process", true, get_defined_vars ()))
34
  {
35
  do_action ("ws_plugin__s2member_during_start_page_during_left_sections_before_registration_process", get_defined_vars ());
@@ -199,6 +215,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
199
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
200
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
201
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
202
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
203
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
204
  /**/
30
  /**/
31
  do_action ("ws_plugin__s2member_during_start_page_before_left_sections", get_defined_vars ());
32
  /**/
33
+ if (apply_filters ("ws_plugin__s2member_during_start_page_during_left_sections_display_video_tutorials", true, get_defined_vars ()))
34
+ {
35
+ do_action ("ws_plugin__s2member_during_start_page_during_left_sections_before_video_tutorials", get_defined_vars ());
36
+ /**/
37
+ echo '<div class="ws-menu-page-group" title="Video Tutorials ( recommended )" style="padding-top:5px;">' . "\n";
38
+ /**/
39
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-registration-process-section">' . "\n";
40
+ echo '<p><embed type="application/x-shockwave-flash" src="//www.youtube.com/p/A40AFC154461862E?version=3&hd=1&fs=1&rel=0" width="100%" height="550" allowscriptaccess="always" allowfullscreen="true"></embed></p>' . "\n";
41
+ do_action ("ws_plugin__s2member_during_start_page_during_left_sections_during_video_tutorials", get_defined_vars ());
42
+ echo '</div>' . "\n";
43
+ /**/
44
+ echo '</div>' . "\n";
45
+ /**/
46
+ do_action ("ws_plugin__s2member_during_start_page_during_left_sections_after_video_tutorials", get_defined_vars ());
47
+ }
48
+ /**/
49
  if (apply_filters ("ws_plugin__s2member_during_start_page_during_left_sections_display_registration_process", true, get_defined_vars ()))
50
  {
51
  do_action ("ws_plugin__s2member_during_start_page_during_left_sections_before_registration_process", get_defined_vars ());
215
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
216
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
217
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
218
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
219
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
220
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
221
  /**/
includes/menu-pages/trk-ops.inc.php CHANGED
@@ -274,6 +274,7 @@ do_action ("ws_plugin__s2member_during_menu_pages_before_right_sections", get_de
274
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
275
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
276
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
 
277
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
278
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
279
  /**/
274
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["upsell-pro"]) ? '<div class="ws-menu-page-others"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-upsell-pro.png" alt="." /></a></div>' . "\n" : '';
275
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Professional Installation URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-installation.png" alt="." /></a></div>' . "\n" : '';
276
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
277
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"]) ? '<div class="ws-menu-page-videos"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Video Tutorials")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-videos.png" alt="." /></a></div>' . "\n" : '';
278
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
279
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Donate link")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
280
  /**/
includes/s2member-min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){ws_plugin__s2member_uniqueFilesDownloaded=[];if(S2MEMBER_CURRENT_USER_IS_LOGGED_IN&&S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED){a('a[href*="s2member_file_download"]').click(function(){if(!this.href.match(/s2member_file_download_key\=(.+)/i)){var b="** Please Confirm This File Download **\n\n";b+="You've downloaded "+S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY+" protected file"+((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<1||S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY>1)?"s":"")+" in the last "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" days.\n\n";b+="You're entitled to "+((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED)?"UNLIMITED downloads though ( so, no worries ).":S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED+" unique downloads every "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" day period.");if(this.href.match(/s2member_skip_confirmation/i)||confirm(b)){if(a.inArray(this.href,ws_plugin__s2member_uniqueFilesDownloaded)===-1){ws_plugin__s2member_uniqueFilesDownloaded.push(this.href),S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY++}return true}else{return false}}else{return true}})}if(location.href.match(/\/wp-signup\.php/)){a("div#content > div.mu_register > form#setupform").submit(function(){var d=this,c="",b="",e="";a("input#user_name, input#user_email, input#blogname, input#blog_title",d).each(function(){if((c=a.trim(a(this).prev("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d,true)){e+=b+"\n\n"}}else{if((c=a.trim(a(this).prev("span.prefix_address").prev("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d,true)){e+=b+"\n\n"}}}});a(":input",d).each(function(){if((c=a.trim(a(this).prev("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d)){e+=b+"\n\n"}}});if(e=a.trim(e)){alert("Oops, you missed something:\n\n"+e);return false}return true})}else{if(location.href.match(/\/wp-login\.php/)){a("div#login > form#registerform").submit(function(){var d=this,c="",b="",e="";a("input#user_login, input#user_email",d).each(function(){if((c=a.trim(a(this).parent("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d,true)){e+=b+"\n\n"}}});a(":input",d).each(function(){if((c=a.trim(a(this).parent("label").children("span").slice(0,1).text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d)){e+=b+"\n\n"}}});if(e=a.trim(e)){alert("Oops, you missed something:\n\n"+e);return false}return true})}else{if(location.href.match(/\/\?s2member_profile\=1/)){a("form#ws-plugin--s2member-profile").submit(function(){var e=this,d="",c="",g="";var b=a("input#ws-plugin--s2member-profile-password");var f=a("input#ws-plugin--s2member-profile-password-confirmation");a(":input",e).each(function(){if((d=a.trim(a(this).parent("label").children("strong").slice(0,1).text().replace(/[\r\n\t]+/g," ")))){if(c=ws_plugin__s2member_validationErrors(d,this,e)){g+=c+"\n\n"}}});if(g=a.trim(g)){alert("Oops, you missed something:\n\n"+g);return false}else{if(a.trim(b.val())&&a.trim(b.val())!==a.trim(f.val())){alert("Oops, you missed something:\n\nPasswords do not match up. Please try again.");return false}}return true})}else{if(location.href.match(/\/wp-admin\/(user\/)?profile\.php/)){a("form#your-profile").submit(function(){var d=this,c="",b="",e="";a(':input[id^="ws-plugin--s2member-profile-"]',d).each(function(){if((c=a.trim(a(this).parent("td").prev("th").children("label").slice(0,1).text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d)){e+=b+"\n\n"}}});if(e=a.trim(e)){alert("Oops, you missed something:\n\n"+e);return false}return true})}}}}ws_plugin__s2member_validationErrors=function(l,k,c,g,f){if(typeof l==="string"&&l&&typeof k==="object"&&typeof c==="object"){if(typeof k.tagName==="string"&&k.tagName.match(/^(input|textarea|select)$/i)&&!k.disabled){var n=k.tagName.toLowerCase(),j=a(k),i=String(j.attr("type")).toLowerCase(),b=String(j.attr("name")),m=j.val();var g=(typeof g==="boolean")?g:(j.attr("aria-required")==="true"),f=(typeof f==="string")?f:j.attr("data-expected");if(n==="input"&&i==="checkbox"&&b.match(/\[\]$/)){if(typeof k.id==="string"&&k.id.match(/-0$/)){if(g&&!a('input[name="'+b.replace(/([\[\]])/g,"$1")+'"]:checked',c).length){return l+"\nPlease check at least one of the boxes."}}}else{if(n==="input"&&i==="checkbox"){if(g&&!k.checked){return l+"\nRequired. This box must be checked."}}else{if(n==="input"&&i==="radio"){if(typeof k.id==="string"&&k.id.match(/-0$/)){if(g&&!a('input[name="'+b.replace(/([\[\]])/g,"$1")+'"]:checked',c).length){return l+"\nPlease select one of the options."}}}else{if(n==="select"&&j.attr("multiple")){if(g&&(!(m instanceof Array)||!m.length)){return l+"\nPlease select at least one of the options."}}else{if(typeof m!=="string"||(g&&!(m=a.trim(m)).length)){return l+"\nThis is a required field, please try again."}else{if((m=a.trim(m)).length&&((n==="input"&&i.match(/^(text|password)$/i))||n==="textarea")&&typeof f==="string"&&f.length){if(f==="numeric-wp-commas"&&(!m.match(/^[0-9\.,]+$/)||isNaN(m.replace(/,/g,"")))){return l+"\nMust be numeric ( with or without decimals, commas allowed )."}else{if(f==="numeric"&&(!m.match(/^[0-9\.]+$/)||isNaN(m))){return l+"\nMust be numeric ( with or without decimals, no commas )."}else{if(f==="integer"&&(!m.match(/^[0-9]+$/)||isNaN(m))){return l+"\nMust be an integer ( a whole number, without any decimals )."}else{if(f==="integer-gt-0"&&(!m.match(/^[0-9]+$/)||isNaN(m)||m<=0)){return l+"\nMust be an integer > 0 ( whole number, no decimals, greater than 0 )."}else{if(f==="float"&&(!m.match(/^[0-9\.]+$/)||!m.match(/[0-9]/)||!m.match(/\./)||isNaN(m))){return l+"\nMust be a float ( floating point number, decimals required )."}else{if(f==="float-gt-0"&&(!m.match(/^[0-9\.]+$/)||!m.match(/[0-9]/)||!m.match(/\./)||isNaN(m)||m<=0)){return l+"\nMust be a float > 0 ( floating point number, decimals required, greater than 0 )."}else{if(f==="date"&&!m.match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)){return l+"\nMust be a date ( required date format: dd/mm/yyyy )."}else{if(f==="email"&&!m.match(/^([a-z_~0-9\+\-]+)(((\.?)([a-z_~0-9\+\-]+))*)(@)([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return l+"\nMust be a valid email address."}else{if(f==="url"&&!m.match(/^http(s?)\:\/\/(.{5,})$/i)){return l+"\nMust be a full URL ( starting with http or https )."}else{if(f==="domain"&&!m.match(/^([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return l+"\nMust be a domain name ( domain name only, without http )."}else{if(f==="phone"&&(!m.match(/^[0-9 \(\)\-]+$/)||m.replace(/[^0-9]/g,"").length!==10)){return l+"\nMust be a phone # ( 10 digits w/possible hyphens,spaces,brackets )."}else{if(f==="uszip"&&!m.match(/^[0-9]{5}(-[0-9]{4})?$/)){return l+"\nMust be a US zipcode ( 5-9 digits w/possible hyphen )."}else{if(f==="cazip"&&!m.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return l+"\nMust be a Canadian zipcode ( 6 alpha-numerics w/possible space )."}else{if(f==="uczip"&&!m.match(/^[0-9]{5}(-[0-9]{4})?$/)&&!m.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return l+"\nMust be a zipcode ( either a US or Canadian zipcode )."}else{if(f.match(/^alphanumerics-spaces-punctuation-([0-9]+)(-e)?$/)&&!m.match(/^[a-z 0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return l+"\nPlease use alphanumerics, spaces & punctuation only."}else{if(f.match(/^alphanumerics-spaces-([0-9]+)(-e)?$/)&&!m.match(/^[a-z 0-9]+$/i)){return l+"\nPlease use alphanumerics & spaces only."}else{if(f.match(/^alphanumerics-punctuation-([0-9]+)(-e)?$/)&&!m.match(/^[a-z0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return l+"\nPlease use alphanumerics & punctuation only ( no spaces )."}else{if(f.match(/^alphanumerics-([0-9]+)(-e)?$/)&&!m.match(/^[a-z0-9]+$/i)){return l+"\nPlease use alphanumerics only ( no spaces/punctuation )."}else{if(f.match(/^alphabetics-([0-9]+)(-e)?$/)&&!m.match(/^[a-z]+$/i)){return l+"\nPlease use alphabetics only ( no digits/spaces/punctuation )."}else{if(f.match(/^numerics-([0-9]+)(-e)?$/)&&!m.match(/^[0-9]+$/i)){return l+"\nPlease use numeric digits only."}else{if(f.match(/^(any|alphanumerics-spaces-punctuation|alphanumerics-spaces|alphanumerics-punctuation|alphanumerics|alphabetics|numerics)-([0-9]+)(-e)?$/)){var h=f.split("-"),d=Number(h[1]),e=(h.length>2)?Number(h[2]):"";if(e&&m.length!==d){return l+"\nMust be exactly "+d+" "+((h[0]==="numerics")?"digit":"character")+((d>1)?"s":"")+"."}else{if(m.length<d){return l+"\nMust be at least "+d+" "+((h[0]==="numerics")?"digit":"character")+((d>1)?"s":"")+"."}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return""}});
1
+ jQuery(document).ready(function(a){ws_plugin__s2member_uniqueFilesDownloaded=[];if(S2MEMBER_CURRENT_USER_IS_LOGGED_IN&&S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED){a('a[href*="s2member_file_download"]').click(function(){if(!this.href.match(/s2member_file_download_key\=(.+)/i)){var b="** Please Confirm This File Download **\n\n";b+="You've downloaded "+S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY+" protected file"+((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<1||S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY>1)?"s":"")+" in the last "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" days.\n\n";b+="You're entitled to "+((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED)?"UNLIMITED downloads though ( so, no worries ).":S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED+" unique downloads every "+S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS+" day period.");if(this.href.match(/s2member_skip_confirmation/i)||confirm(b)){if(a.inArray(this.href,ws_plugin__s2member_uniqueFilesDownloaded)===-1){ws_plugin__s2member_uniqueFilesDownloaded.push(this.href),S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY++}return true}else{return false}}else{return true}})}a("form#ws-plugin--s2member-profile").submit(function(){var e=this,d="",c="",g="";var b=a("input#ws-plugin--s2member-profile-password");var f=a("input#ws-plugin--s2member-profile-password-confirmation");a(":input",e).each(function(){if((d=a.trim(a(this).parent("label").children("strong").slice(0,1).text().replace(/[\r\n\t]+/g," ")))){if(c=ws_plugin__s2member_validationErrors(d,this,e)){g+=c+"\n\n"}}});if(g=a.trim(g)){alert("Oops, you missed something:\n\n"+g);return false}else{if(a.trim(b.val())&&a.trim(b.val())!==a.trim(f.val())){alert("Oops, you missed something:\n\nPasswords do not match up. Please try again.");return false}}return true});if(location.href.match(/\/wp-signup\.php/)){a("div#content > div.mu_register > form#setupform").submit(function(){var d=this,c="",b="",e="";a("input#user_name, input#user_email, input#blogname, input#blog_title",d).each(function(){if((c=a.trim(a(this).prev("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d,true)){e+=b+"\n\n"}}else{if((c=a.trim(a(this).prev("span.prefix_address").prev("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d,true)){e+=b+"\n\n"}}}});a(":input",d).each(function(){if((c=a.trim(a(this).prev("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d)){e+=b+"\n\n"}}});if(e=a.trim(e)){alert("Oops, you missed something:\n\n"+e);return false}return true})}else{if(location.href.match(/\/wp-login\.php/)){a("div#login > form#registerform input#wp-submit").attr("tabindex","1000");a("div#login > form#registerform").submit(function(){var d=this,c="",b="",e="";a("input#user_login, input#user_email",d).each(function(){if((c=a.trim(a(this).parent("label").text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d,true)){e+=b+"\n\n"}}});a(":input",d).each(function(){if((c=a.trim(a(this).parent("label").children("span").slice(0,1).text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d)){e+=b+"\n\n"}}});if(e=a.trim(e)){alert("Oops, you missed something:\n\n"+e);return false}return true})}else{if(location.href.match(/\/wp-admin\/(user\/)?profile\.php/)){a("form#your-profile").submit(function(){var d=this,c="",b="",e="";a(':input[id^="ws-plugin--s2member-profile-"]',d).each(function(){if((c=a.trim(a(this).parent("td").prev("th").children("label").slice(0,1).text().replace(/[\r\n\t]+/g," ")))){if(b=ws_plugin__s2member_validationErrors(c,this,d)){e+=b+"\n\n"}}});if(e=a.trim(e)){alert("Oops, you missed something:\n\n"+e);return false}return true})}}}ws_plugin__s2member_validationErrors=function(l,k,c,g,f){if(typeof l==="string"&&l&&typeof k==="object"&&typeof c==="object"){if(typeof k.tagName==="string"&&k.tagName.match(/^(input|textarea|select)$/i)&&!k.disabled){var n=k.tagName.toLowerCase(),j=a(k),i=String(j.attr("type")).toLowerCase(),b=String(j.attr("name")),m=j.val();var g=(typeof g==="boolean")?g:(j.attr("aria-required")==="true"),f=(typeof f==="string")?f:j.attr("data-expected");if(n==="input"&&i==="checkbox"&&b.match(/\[\]$/)){if(typeof k.id==="string"&&k.id.match(/-0$/)){if(g&&!a('input[name="'+b.replace(/([\[\]])/g,"$1")+'"]:checked',c).length){return l+"\nPlease check at least one of the boxes."}}}else{if(n==="input"&&i==="checkbox"){if(g&&!k.checked){return l+"\nRequired. This box must be checked."}}else{if(n==="input"&&i==="radio"){if(typeof k.id==="string"&&k.id.match(/-0$/)){if(g&&!a('input[name="'+b.replace(/([\[\]])/g,"$1")+'"]:checked',c).length){return l+"\nPlease select one of the options."}}}else{if(n==="select"&&j.attr("multiple")){if(g&&(!(m instanceof Array)||!m.length)){return l+"\nPlease select at least one of the options."}}else{if(typeof m!=="string"||(g&&!(m=a.trim(m)).length)){return l+"\nThis is a required field, please try again."}else{if((m=a.trim(m)).length&&((n==="input"&&i.match(/^(text|password)$/i))||n==="textarea")&&typeof f==="string"&&f.length){if(f==="numeric-wp-commas"&&(!m.match(/^[0-9\.,]+$/)||isNaN(m.replace(/,/g,"")))){return l+"\nMust be numeric ( with or without decimals, commas allowed )."}else{if(f==="numeric"&&(!m.match(/^[0-9\.]+$/)||isNaN(m))){return l+"\nMust be numeric ( with or without decimals, no commas )."}else{if(f==="integer"&&(!m.match(/^[0-9]+$/)||isNaN(m))){return l+"\nMust be an integer ( a whole number, without any decimals )."}else{if(f==="integer-gt-0"&&(!m.match(/^[0-9]+$/)||isNaN(m)||m<=0)){return l+"\nMust be an integer > 0 ( whole number, no decimals, greater than 0 )."}else{if(f==="float"&&(!m.match(/^[0-9\.]+$/)||!m.match(/[0-9]/)||!m.match(/\./)||isNaN(m))){return l+"\nMust be a float ( floating point number, decimals required )."}else{if(f==="float-gt-0"&&(!m.match(/^[0-9\.]+$/)||!m.match(/[0-9]/)||!m.match(/\./)||isNaN(m)||m<=0)){return l+"\nMust be a float > 0 ( floating point number, decimals required, greater than 0 )."}else{if(f==="date"&&!m.match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)){return l+"\nMust be a date ( required date format: dd/mm/yyyy )."}else{if(f==="email"&&!m.match(/^([a-z_~0-9\+\-]+)(((\.?)([a-z_~0-9\+\-]+))*)(@)([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return l+"\nMust be a valid email address."}else{if(f==="url"&&!m.match(/^http(s?)\:\/\/(.{5,})$/i)){return l+"\nMust be a full URL ( starting with http or https )."}else{if(f==="domain"&&!m.match(/^([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return l+"\nMust be a domain name ( domain name only, without http )."}else{if(f==="phone"&&(!m.match(/^[0-9 \(\)\-]+$/)||m.replace(/[^0-9]/g,"").length!==10)){return l+"\nMust be a phone # ( 10 digits w/possible hyphens,spaces,brackets )."}else{if(f==="uszip"&&!m.match(/^[0-9]{5}(-[0-9]{4})?$/)){return l+"\nMust be a US zipcode ( 5-9 digits w/possible hyphen )."}else{if(f==="cazip"&&!m.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return l+"\nMust be a Canadian zipcode ( 6 alpha-numerics w/possible space )."}else{if(f==="uczip"&&!m.match(/^[0-9]{5}(-[0-9]{4})?$/)&&!m.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return l+"\nMust be a zipcode ( either a US or Canadian zipcode )."}else{if(f.match(/^alphanumerics-spaces-punctuation-([0-9]+)(-e)?$/)&&!m.match(/^[a-z 0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return l+"\nPlease use alphanumerics, spaces & punctuation only."}else{if(f.match(/^alphanumerics-spaces-([0-9]+)(-e)?$/)&&!m.match(/^[a-z 0-9]+$/i)){return l+"\nPlease use alphanumerics & spaces only."}else{if(f.match(/^alphanumerics-punctuation-([0-9]+)(-e)?$/)&&!m.match(/^[a-z0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return l+"\nPlease use alphanumerics & punctuation only ( no spaces )."}else{if(f.match(/^alphanumerics-([0-9]+)(-e)?$/)&&!m.match(/^[a-z0-9]+$/i)){return l+"\nPlease use alphanumerics only ( no spaces/punctuation )."}else{if(f.match(/^alphabetics-([0-9]+)(-e)?$/)&&!m.match(/^[a-z]+$/i)){return l+"\nPlease use alphabetics only ( no digits/spaces/punctuation )."}else{if(f.match(/^numerics-([0-9]+)(-e)?$/)&&!m.match(/^[0-9]+$/i)){return l+"\nPlease use numeric digits only."}else{if(f.match(/^(any|alphanumerics-spaces-punctuation|alphanumerics-spaces|alphanumerics-punctuation|alphanumerics|alphabetics|numerics)-([0-9]+)(-e)?$/)){var h=f.split("-"),d=Number(h[1]),e=(h.length>2)?Number(h[2]):"";if(e&&m.length!==d){return l+"\nMust be exactly "+d+" "+((h[0]==="numerics")?"digit":"character")+((d>1)?"s":"")+"."}else{if(m.length<d){return l+"\nMust be at least "+d+" "+((h[0]==="numerics")?"digit":"character")+((d>1)?"s":"")+"."}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return""}});
includes/s2member.js CHANGED
@@ -10,20 +10,20 @@ If not, see: <http://www.gnu.org/licenses/>.
10
  /*
11
  Scripting routines handled on document ready state.
12
  */
13
- jQuery(document).ready (function($)
14
  {
15
  ws_plugin__s2member_uniqueFilesDownloaded = []; /* Real-time counts. */
16
  /* This is used in case a user downloads multiple files from a single page. */
17
  /**/
18
  if (S2MEMBER_CURRENT_USER_IS_LOGGED_IN && S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY < S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED)
19
  {
20
- $('a[href*="s2member_file_download"]').click (function()
21
  {
22
  if (!this.href.match (/s2member_file_download_key\=(.+)/i))
23
  {
24
  var c = '** Please Confirm This File Download **\n\n';
25
- c += 'You\'ve downloaded ' + S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY + ' protected file' + ((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY < 1 || S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY > 1) ? 's' : '') + ' in the last ' + S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS + ' days.\n\n';
26
- c += 'You\'re entitled to ' + ((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED) ? 'UNLIMITED downloads though ( so, no worries ).' : S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED + ' unique downloads every ' + S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS + ' day period.');
27
  /**/
28
  if (this.href.match (/s2member_skip_confirmation/i) || confirm (c))
29
  {
@@ -39,132 +39,137 @@ jQuery(document).ready (function($)
39
  });
40
  }
41
  /*
42
- Attach form submission handler to wp-signup.php.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  */
44
  if (location.href.match (/\/wp-signup\.php/))
45
- /**/
46
- $('div#content > div.mu_register > form#setupform').submit (function()
47
- {
48
- var context = this, label = '', error = '', errors = '';
49
- /**/
50
- $ ('input#user_name, input#user_email, input#blogname, input#blog_title', context).each (function()
51
- {
52
- if ((label = $.trim ($ (this).prev ('label').text ().replace (/[\r\n\t]+/g, ' '))))
53
- {
54
- if (error = ws_plugin__s2member_validationErrors (label, this, context, true))
55
- errors += error + '\n\n'; /* Collect errors. */
56
- }
57
- /**/
58
- else if ((label = $.trim ($ (this).prev ('span.prefix_address').prev ('label').text ().replace (/[\r\n\t]+/g, ' '))))
59
- {
60
- if (error = ws_plugin__s2member_validationErrors (label, this, context, true))
 
 
 
 
 
 
 
 
61
  errors += error + '\n\n'; /* Collect errors. */
62
- }
63
- });
64
- /**/
65
- $ (':input', context).each (function()
66
- {
67
- if ((label = $.trim ($ (this).prev ('label').text ().replace (/[\r\n\t]+/g, ' '))))
68
- if (error = ws_plugin__s2member_validationErrors (label, this, context))
69
- errors += error + '\n\n'; /* Collect errors. */
70
- });
71
- /**/
72
- if (errors = $.trim (errors))
73
- {
74
- alert('Oops, you missed something:\n\n' + errors);
75
- return false;
76
- }
77
- /**/
78
- return true;
79
- });
80
  /*
81
- Attach form submission handler to wp-login.php?action=register.
82
  */
83
  else if (location.href.match (/\/wp-login\.php/))
84
- /**/
85
- $('div#login > form#registerform').submit (function()
86
- {
87
- var context = this, label = '', error = '', errors = '';
88
- /**/
89
- $ ('input#user_login, input#user_email', context).each (function()
90
- {
91
- if ((label = $.trim ($ (this).parent ('label').text ().replace (/[\r\n\t]+/g, ' '))))
92
- if (error = ws_plugin__s2member_validationErrors (label, this, context, true))
93
- errors += error + '\n\n'; /* Collect errors. */
94
- });
95
- /**/
96
- $ (':input', context).each (function()
97
- {
98
- if ((label = $.trim ($ (this).parent ('label').children ('span').slice (0, 1).text ().replace (/[\r\n\t]+/g, ' '))))
99
- if (error = ws_plugin__s2member_validationErrors (label, this, context))
100
- errors += error + '\n\n'; /* Collect errors. */
101
- });
102
- /**/
103
- if (errors = $.trim (errors))
104
- {
105
- alert('Oops, you missed something:\n\n' + errors);
106
- return false;
107
- }
108
- /**/
109
- return true;
110
- });
111
- /*
112
- Attach form submission handler to ?s2member_profile=1.
113
- */
114
- else if (location.href.match (/\/\?s2member_profile\=1/))
115
- /**/
116
- $('form#ws-plugin--s2member-profile').submit (function()
117
- {
118
- var context = this, label = '', error = '', errors = '';
119
- /**/
120
- var $password = $ ('input#ws-plugin--s2member-profile-password');
121
- var $passwordConfirmation = $ ('input#ws-plugin--s2member-profile-password-confirmation');
122
- /**/
123
- $ (':input', context).each (function()
124
- {
125
- if ((label = $.trim ($ (this).parent ('label').children ('strong').slice (0, 1).text ().replace (/[\r\n\t]+/g, ' '))))
126
- if (error = ws_plugin__s2member_validationErrors (label, this, context))
127
- errors += error + '\n\n'; /* Collect errors. */
128
- });
129
- /**/
130
- if (errors = $.trim (errors))
131
- {
132
- alert('Oops, you missed something:\n\n' + errors);
133
- return false;
134
- }
135
- /**/
136
- else if ($.trim ($password.val ()) && $.trim ($password.val ()) !== $.trim ($passwordConfirmation.val ()))
137
- {
138
- alert('Oops, you missed something:\n\nPasswords do not match up. Please try again.');
139
- return false;
140
- }
141
- /**/
142
- return true;
143
- });
144
  /*
145
- Attach form submission handler to profile.php.
146
  */
147
  else if (location.href.match (/\/wp-admin\/(user\/)?profile\.php/))
148
- /**/
149
- $('form#your-profile').submit (function() /* Validation. */
150
- {
151
- var context = this, label = '', error = '', errors = '';
152
- /**/
153
- $ (':input[id^="ws-plugin--s2member-profile-"]', context).each (function()
154
- {
155
- if ((label = $.trim ($ (this).parent ('td').prev ('th').children ('label').slice (0, 1).text ().replace (/[\r\n\t]+/g, ' '))))
156
- if (error = ws_plugin__s2member_validationErrors (label, this, context))
157
- errors += error + '\n\n'; /* Collect errors. */
158
- });
159
- /**/
160
- if (errors = $.trim (errors))
161
- {
162
- alert('Oops, you missed something:\n\n' + errors);
163
- return false;
164
- }
165
- /**/
166
- return true;
167
- });
 
168
  /*
169
  Global function handles validation errors.
170
  */
@@ -195,15 +200,15 @@ jQuery(document).ready (function($)
195
  }
196
  else if (tag === 'select' && $field.attr ('multiple'))
197
  {
198
- if (required && (!(value instanceof Array) || !value.length))
199
  return label + '\nPlease select at least one of the options.';
200
  }
201
- else if (typeof value !== 'string' || (required && !(value = $.trim (value)).length))
202
  /* If we get here, the value MUST be in string format, and we need to trim the string before validation. */
203
  {
204
  return label + '\nThis is a required field, please try again.'; /* Missing data. */
205
  }
206
- else if ((value = $.trim (value)).length && ((tag === 'input' && type.match (/^(text|password)$/i)) || tag === 'textarea') && typeof expected === 'string' && expected.length)
207
  {
208
  if (expected === 'numeric-wp-commas' && (!value.match (/^[0-9\.,]+$/) || isNaN (value.replace (/,/g, ''))))
209
  {
@@ -290,10 +295,10 @@ jQuery(document).ready (function($)
290
  var split = expected.split ('-'), length = Number (split[1]), exactLength = (split.length > 2) ? Number (split[2]) : '';
291
  /**/
292
  if (exactLength && value.length !== length) /* An exact length is required? */
293
- return label + '\nMust be exactly ' + length + ' ' + ((split[0] === 'numerics') ? 'digit' : 'character') + ((length > 1) ? 's' : '') + '.';
294
  /**/
295
  else if (value.length < length) /* Otherwise, we interpret as the minimum length. */
296
- return label + '\nMust be at least ' + length + ' ' + ((split[0] === 'numerics') ? 'digit' : 'character') + ((length > 1) ? 's' : '') + '.';
297
  }
298
  }
299
  }
10
  /*
11
  Scripting routines handled on document ready state.
12
  */
13
+ jQuery (document).ready (function($)
14
  {
15
  ws_plugin__s2member_uniqueFilesDownloaded = []; /* Real-time counts. */
16
  /* This is used in case a user downloads multiple files from a single page. */
17
  /**/
18
  if (S2MEMBER_CURRENT_USER_IS_LOGGED_IN && S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY < S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED)
19
  {
20
+ $ ('a[href*="s2member_file_download"]').click (function()
21
  {
22
  if (!this.href.match (/s2member_file_download_key\=(.+)/i))
23
  {
24
  var c = '** Please Confirm This File Download **\n\n';
25
+ c += 'You\'ve downloaded ' + S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY + ' protected file' + ( (S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY < 1 || S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY > 1) ? 's' : '') + ' in the last ' + S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS + ' days.\n\n';
26
+ c += 'You\'re entitled to ' + ( (S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED) ? 'UNLIMITED downloads though ( so, no worries ).' : S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED + ' unique downloads every ' + S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS + ' day period.');
27
  /**/
28
  if (this.href.match (/s2member_skip_confirmation/i) || confirm (c))
29
  {
39
  });
40
  }
41
  /*
42
+ Deals with form field validation on Profile editing panels.
43
+ Always process; `[s2Member-Profile /]` could appear on any Post/Page/Widget.
44
+ */
45
+ $ ('form#ws-plugin--s2member-profile').submit (function()
46
+ {
47
+ var context = this, label = '', error = '', errors = '';
48
+ /**/
49
+ var $password = $ ('input#ws-plugin--s2member-profile-password');
50
+ var $passwordConfirmation = $ ('input#ws-plugin--s2member-profile-password-confirmation');
51
+ /**/
52
+ $ (':input', context).each (function()
53
+ {
54
+ if ((label = $.trim ($ (this).parent ('label').children ('strong').slice (0, 1).text ().replace (/[\r\n\t]+/g, ' '))))
55
+ if (error = ws_plugin__s2member_validationErrors (label, this, context))
56
+ errors += error + '\n\n'; /* Collect errors. */
57
+ });
58
+ /**/
59
+ if (errors = $.trim (errors))
60
+ {
61
+ alert ('Oops, you missed something:\n\n' + errors);
62
+ return false;
63
+ }
64
+ /**/
65
+ else if ($.trim ($password.val ()) && $.trim ($password.val ()) !== $.trim ($passwordConfirmation.val ()))
66
+ {
67
+ alert ('Oops, you missed something:\n\nPasswords do not match up. Please try again.');
68
+ return false;
69
+ }
70
+ /**/
71
+ return true;
72
+ });
73
+ /*
74
+ Attach form submission handler to `/wp-signup.php`.
75
  */
76
  if (location.href.match (/\/wp-signup\.php/))
77
+ {
78
+ $ ('div#content > div.mu_register > form#setupform').submit (function()
79
+ {
80
+ var context = this, label = '', error = '', errors = '';
81
+ /**/
82
+ $ ('input#user_name, input#user_email, input#blogname, input#blog_title', context).each (function()
83
+ {
84
+ if ((label = $.trim ($ (this).prev ('label').text ().replace (/[\r\n\t]+/g, ' '))))
85
+ {
86
+ if (error = ws_plugin__s2member_validationErrors (label, this, context, true))
87
+ errors += error + '\n\n'; /* Collect errors. */
88
+ }
89
+ /**/
90
+ else if ((label = $.trim ($ (this).prev ('span.prefix_address').prev ('label').text ().replace (/[\r\n\t]+/g, ' '))))
91
+ {
92
+ if (error = ws_plugin__s2member_validationErrors (label, this, context, true))
93
+ errors += error + '\n\n'; /* Collect errors. */
94
+ }
95
+ });
96
+ /**/
97
+ $ (':input', context).each (function()
98
+ {
99
+ if ((label = $.trim ($ (this).prev ('label').text ().replace (/[\r\n\t]+/g, ' '))))
100
+ if (error = ws_plugin__s2member_validationErrors (label, this, context))
101
  errors += error + '\n\n'; /* Collect errors. */
102
+ });
103
+ /**/
104
+ if (errors = $.trim (errors))
105
+ {
106
+ alert ('Oops, you missed something:\n\n' + errors);
107
+ return false;
108
+ }
109
+ /**/
110
+ return true;
111
+ });
112
+ }
 
 
 
 
 
 
 
113
  /*
114
+ Attach form submission handler to `/wp-login.php?action=register`.
115
  */
116
  else if (location.href.match (/\/wp-login\.php/))
117
+ {
118
+ /* Makes plenty of room ( i.e. tab indexes ) for Custom Registration Fields. */
119
+ $ ('div#login > form#registerform input#wp-submit').attr ('tabindex', '1000');
120
+ /**/
121
+ $ ('div#login > form#registerform').submit (function()
122
+ {
123
+ var context = this, label = '', error = '', errors = '';
124
+ /**/
125
+ $ ('input#user_login, input#user_email', context).each (function()
126
+ {
127
+ if ((label = $.trim ($ (this).parent ('label').text ().replace (/[\r\n\t]+/g, ' '))))
128
+ if (error = ws_plugin__s2member_validationErrors (label, this, context, true))
129
+ errors += error + '\n\n'; /* Collect errors. */
130
+ });
131
+ /**/
132
+ $ (':input', context).each (function()
133
+ {
134
+ if ((label = $.trim ($ (this).parent ('label').children ('span').slice (0, 1).text ().replace (/[\r\n\t]+/g, ' '))))
135
+ if (error = ws_plugin__s2member_validationErrors (label, this, context))
136
+ errors += error + '\n\n'; /* Collect errors. */
137
+ });
138
+ /**/
139
+ if (errors = $.trim (errors))
140
+ {
141
+ alert ('Oops, you missed something:\n\n' + errors);
142
+ return false;
143
+ }
144
+ /**/
145
+ return true;
146
+ });
147
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  /*
149
+ Attach form submission handler to `/wp-admin/(user/)?profile.php`.
150
  */
151
  else if (location.href.match (/\/wp-admin\/(user\/)?profile\.php/))
152
+ {
153
+ $ ('form#your-profile').submit (function() /* Validation. */
154
+ {
155
+ var context = this, label = '', error = '', errors = '';
156
+ /**/
157
+ $ (':input[id^="ws-plugin--s2member-profile-"]', context).each (function()
158
+ {
159
+ if ((label = $.trim ($ (this).parent ('td').prev ('th').children ('label').slice (0, 1).text ().replace (/[\r\n\t]+/g, ' '))))
160
+ if (error = ws_plugin__s2member_validationErrors (label, this, context))
161
+ errors += error + '\n\n'; /* Collect errors. */
162
+ });
163
+ /**/
164
+ if (errors = $.trim (errors))
165
+ {
166
+ alert ('Oops, you missed something:\n\n' + errors);
167
+ return false;
168
+ }
169
+ /**/
170
+ return true;
171
+ });
172
+ }
173
  /*
174
  Global function handles validation errors.
175
  */
200
  }
201
  else if (tag === 'select' && $field.attr ('multiple'))
202
  {
203
+ if (required && (! (value instanceof Array) || !value.length))
204
  return label + '\nPlease select at least one of the options.';
205
  }
206
+ else if (typeof value !== 'string' || (required && ! (value = $.trim (value)).length))
207
  /* If we get here, the value MUST be in string format, and we need to trim the string before validation. */
208
  {
209
  return label + '\nThis is a required field, please try again.'; /* Missing data. */
210
  }
211
+ else if ((value = $.trim (value)).length && ( (tag === 'input' && type.match (/^(text|password)$/i)) || tag === 'textarea') && typeof expected === 'string' && expected.length)
212
  {
213
  if (expected === 'numeric-wp-commas' && (!value.match (/^[0-9\.,]+$/) || isNaN (value.replace (/,/g, ''))))
214
  {
295
  var split = expected.split ('-'), length = Number (split[1]), exactLength = (split.length > 2) ? Number (split[2]) : '';
296
  /**/
297
  if (exactLength && value.length !== length) /* An exact length is required? */
298
+ return label + '\nMust be exactly ' + length + ' ' + ( (split[0] === 'numerics') ? 'digit' : 'character') + ( (length > 1) ? 's' : '') + '.';
299
  /**/
300
  else if (value.length < length) /* Otherwise, we interpret as the minimum length. */
301
+ return label + '\nMust be at least ' + length + ' ' + ( (split[0] === 'numerics') ? 'digit' : 'character') + ( (length > 1) ? 's' : '') + '.';
302
  }
303
  }
304
  }
includes/syscon.inc.php CHANGED
@@ -38,7 +38,7 @@ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["recaptcha"] = array ("public_key" => "
38
  /*
39
  Configure the right menu options panel for this software.
40
  */
41
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"] = array ("upsell-pro" => true, "installation" => true, "tools" => true, "support" => true, "donations" => true);
42
  /*
43
  Check if the plugin has been configured *should be set after the first config via options panel*.
44
  */
38
  /*
39
  Configure the right menu options panel for this software.
40
  */
41
+ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"] = array ("upsell-pro" => true, "installation" => false, "tools" => false, "videos" => true, "support" => true, "donations" => false);
42
  /*
43
  Check if the plugin has been configured *should be set after the first config via options panel*.
44
  */
licensing/license.txt CHANGED
@@ -22,6 +22,10 @@ Credits / Additional Acknowledgments:
22
  - LGPL License <http://www.everaldo.com/crystal/?action=license>
23
  - Everaldo <http://www.everaldo.com/crystal/?action=downloads>
24
 
 
 
 
 
25
  * PayPal® and its associated API, buttons & services have been integrated into this software via external hyperlinks.
26
  The files/services provided by PayPal® are not distributed with this software. They have their own terms & conditions.
27
  - PayPal®, a 3rd party service, is powered by eBay, Inc. <http://www.paypal.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/>
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member ( Membership w/ PayPal® ) ===
2
 
3
- Version: 3.5.7
4
- Stable tag: 3.5.7
5
  Framework: WS-P-3.5
6
 
7
  SSL Compatible: yes
@@ -19,9 +19,9 @@ ClickBank® Compatible: w/ s2Member Pro
19
  AliPay® Compatible: w/ s2Member Pro
20
  ccBill® Compatible: w/ s2Member Pro
21
 
22
- Tested up to: 3.1
23
  Requires at least: 3.0
24
- Requires: WordPress® 3.0+, PHP 5.2+
25
 
26
  Copyright: © 2009 WebSharks, Inc.
27
  License: GNU General Public License
@@ -31,6 +31,7 @@ Author: PriMoThemes.com / WebSharks, Inc.
31
  Donate link: http://www.primothemes.com/donate/
32
 
33
  Plugin Name: s2Member
 
34
  Pro Module / Prices: http://www.s2member.com/prices/
35
  Forum URI: http://www.primothemes.com/forums/viewforum.php?f=4
36
  PayPal Pro Integration: http://www.primothemes.com/forums/viewtopic.php?f=4&t=304
@@ -39,7 +40,7 @@ Plugin URI: http://www.primothemes.com/post/product/s2member-membership-plugin-w
39
  Description: Empowers WordPress® with membership capabilities. Integrates seamlessly with PayPal®. Also compatible with Multisite Networking, and even with BuddyPress if you like.
40
  Tags: membership, members, member, register, signup, paypal, paypal pro, pay pal, s2member, authorize.net, google checkout, ccbill, clickbank, alipay, subscriber, members only, buddypress, buddy press, buddy press compatible, shopping cart, checkout, api, options panel included, websharks framework, w3c validated code, includes extensive documentation, highly extensible
41
 
42
- s2Member is an extremely powerful (and free) membership management system for WordPress®. s2Member integrates seamlessly with PayPal® (very easy).
43
 
44
  == Installation ==
45
 
@@ -48,6 +49,9 @@ s2Member is an extremely powerful (and free) membership management system for Wo
48
  2. Activate the plugin through the `Plugins` menu in WordPress®.
49
  3. Navigate to the `s2Member Options` panel for configuration details.
50
 
 
 
 
51
  = Auto-installing through WordPress® ( memory errors? ) =
52
  This depends on your hosting provider and/or server configuration. Some web hosting companies impose very low limits on the amount of memory available to WordPress® during the execution of a single script. Since s2Member is a larger plugin, WordPress® may exceed conservative limits set forth by shared hosting companies. Don't feel bad, it's a very common problem. The solution is to install manually, using the instructions above. Memory limits only affect the WordPress® auto-installation routine, not the actual functionality of WordPress® or s2Member.
53
 
@@ -57,24 +61,11 @@ Yes. s2Member, and also s2Member Pro, are BOTH compatible with Multisite Network
57
  = What about Multisite Networking ( WPMU ), used on a Blog Farm? =
58
  Yes, preliminary ( experimental ) support for Multisite Blog Farms has also been implemented. If you're running a Multisite Blog Farm ( i.e. you offer Blogs ), please contact s2Member.com for further details. With Multisite Networking enabled, your site could ALSO offer a Customer access to create a Blog of their own, where a Customer becomes a "Member" of your ( Main Site ), and also a Blog Owner/Administrator. With s2Member installed ( network wide ), each of your Blog Owners could offer Membership too, using a single installation of the s2Member plugin ( which is a great selling point ). We refer to this as a Multisite Blog Farm. You can get started now, by turning on [Multisite Networking](http://codex.wordpress.org/Create_A_Network) inside your installation of WordPress®. Then, install the s2Member plugin ( network wide ). In the Dashboard for your Main Site, see: `s2Member -> Multisite ( Config )`.
59
 
60
- == Upgrading To The Latest Version ==
61
-
62
- You can either (upgrade automatically) by going to `WordPress® -> Plugins` and clicking "upgrade automatically". If that fails with memory errors, you can upgrade manually by following these instructions:
63
-
64
- 1. Go to: `s2Member -> General Options -> Deactivation Safeguards`. Turn Safeguards `on`, click Save.
65
- 2. Now you can safely deactivate s2Member by going to `WordPress® -> Plugins -> s2Member`.
66
- 3. Login via FTP, and delete the entire `/wp-content/plugins/s2member` directory.
67
- You can leave `/plugins/s2member-logs/` and `/plugins/s2member-files/`.
68
- 4. Now upload the latest `/s2member` folder to `/wp-content/plugins/`.
69
- 5. Go to: `WordPress® -> Plugins -> s2Member`, and reactivate.
70
- 6. That's it. All existing options will remain intact.
71
-
72
- = Why do I get memory errors during automatic upgrade? =
73
- This depends on your hosting provider and/or server configuration. Some web hosting companies impose very low limits on the amount of memory available to WordPress® during the execution of a single script. Since s2Member is a larger plugin, WordPress® may exceed conservative limits set forth by shared hosting companies. Don't feel bad, it's a very common problem. The solution is to upgrade manually. Memory limits only affect the WordPress® auto-installation/upgrade routine, not the actual functionality of WordPress® or s2Member.
74
-
75
  == Description ==
76
 
77
- s2Member is an extremely powerful ( and free ) membership management system for WordPress®. The s2Member Framework ( free ) integrates seamlessly with PayPal® ( very easy ), and fully supports recurring billing, with the ability to track affiliate commissions on a recurring basis. s2Member supports custom Pages for registration ( including Custom Registration Fields ), account access, and a whole lot more. s2Member is now compatible with Multisite Networking too, and even with BuddyPress if you like. In addition, with the s2Member Pro Module ( an optional paid upgrade ), you can add support for PayPal® Pro, Authorize.Net®, ccBill®, Google® Checkout, ClickBank®, and reach over 1 billion people in China with s2Member's AliPay® integration.
 
 
78
 
79
  s2Member supports Free Subscribers ( at Level #0 ), and up to four Primary Membership Levels, [1-4]; plus unlimited Custom Capability Packages. You can label your Membership Levels anything you like. The defaults are Free, Bronze, Silver, Gold, and Platinum. Custom Capabilities are an easy way to extend s2Member in very creative ways. Custom Capabilities allow you to create an unlimited number of Membership Packages, all with different Capabilities and prices.
80
 
@@ -99,6 +90,9 @@ New! - [s2Member Pro](http://www.s2member.com/) is an add-on module for the free
99
  9. s2Member / Screenshot #9
100
  10. s2Member / Screenshot #10
101
 
 
 
 
102
  == Frequently Asked Questions ==
103
 
104
  = Is there documentation available for s2Member? =
@@ -114,7 +108,7 @@ Yes. The [Forum](http://www.primothemes.com/forums/viewforum.php?f=4) for s2Memb
114
  Archived releases of s2Member are maintained [here](http://wordpress.org/extend/plugins/s2member/download/).
115
 
116
  = Does s2Member install any new database tables? =
117
- No, s2Member has been fully integrated with the Roles &amp; Capabilities that are already built into WordPress®. It is designed to be completely seamless, without code bloat. We've carefully structured the entire framework, in order to maximize s2Member's ability to operate with other plugins installed. For instance, s2Member is also compatible with BuddyPress; and can even be used to protect forums powered by bbPress.
118
 
119
  = Does PayPal integration work right-out-of-the-box? =
120
  Yes, it can even generate your PayPal® Subscription Buttons for you. Everything is fully integrated. You even get to create your own Pages within WordPress® to handle Membership Options, the Login Welcome Page, etc. For advanced webmasters, there are scripting techniques that are documented as well. These will help you further develop your site and tailor it to meet your specific needs. s2Member API Scripting is NOT required however.
@@ -169,11 +163,17 @@ Yes and no. We've left this feature out of the plugin intentionally, because man
169
 
170
  == Upgrade Notice ==
171
 
172
- = 3.5.7+ =
173
  * Upgrade highly recommended. Many new features, WordPress® 3.1 compatible, speed optimizations, and several bug fixes.
174
 
175
  == Changelog ==
176
 
 
 
 
 
 
 
177
  = 3.5.7 =
178
  * **(s2Member/s2Member Pro). Bug fix.** A bug was found in the `c_ws_plugin__s2member_systematics_sp` class file. This bug was affecting s2Member's Security Gate for WordPress® `Pages` under certain unique circumstances. One symptom of this bug ( seen with s2Member Pro installed ), was to experience a strange disappearance of (s2) Lock Icons in your list of Pages, whenever the first Page in your list was the Login Welcome Page that you configured for s2Member.
179
  * **(s2Member Pro). Bug fix.** On a Multisite Network, s2Member Pro Forms were generating an erroneous error `Please enter a username` during a Billing Modification under certain circumstances. This has been resolved in s2Member Pro v1.5.7+.
1
  === s2Member ( Membership w/ PayPal® ) ===
2
 
3
+ Version: 3.5.8
4
+ Stable tag: 3.5.8
5
  Framework: WS-P-3.5
6
 
7
  SSL Compatible: yes
19
  AliPay® Compatible: w/ s2Member Pro
20
  ccBill® Compatible: w/ s2Member Pro
21
 
22
+ Tested up to: 3.1.1
23
  Requires at least: 3.0
24
+ Requires: WordPress® 3.0+, PHP 5.2.3+
25
 
26
  Copyright: © 2009 WebSharks, Inc.
27
  License: GNU General Public License
31
  Donate link: http://www.primothemes.com/donate/
32
 
33
  Plugin Name: s2Member
34
+ Video Tutorials: http://www.s2member.com/videos/
35
  Pro Module / Prices: http://www.s2member.com/prices/
36
  Forum URI: http://www.primothemes.com/forums/viewforum.php?f=4
37
  PayPal Pro Integration: http://www.primothemes.com/forums/viewtopic.php?f=4&t=304
40
  Description: Empowers WordPress® with membership capabilities. Integrates seamlessly with PayPal®. Also compatible with Multisite Networking, and even with BuddyPress if you like.
41
  Tags: membership, members, member, register, signup, paypal, paypal pro, pay pal, s2member, authorize.net, google checkout, ccbill, clickbank, alipay, subscriber, members only, buddypress, buddy press, buddy press compatible, shopping cart, checkout, api, options panel included, websharks framework, w3c validated code, includes extensive documentation, highly extensible
42
 
43
+ s2Member is an extremely powerful ( and free ) membership management system for WordPress®. s2Member integrates seamlessly with PayPal® (very easy).
44
 
45
  == Installation ==
46
 
49
  2. Activate the plugin through the `Plugins` menu in WordPress®.
50
  3. Navigate to the `s2Member Options` panel for configuration details.
51
 
52
+ = Upgrading to the latest version? =
53
+ Please visit [this page](http://www.primothemes.com/forums/viewtopic.php?f=36&t=247) for [easy upgrade instructions](http://www.primothemes.com/forums/viewtopic.php?f=36&t=247).
54
+
55
  = Auto-installing through WordPress® ( memory errors? ) =
56
  This depends on your hosting provider and/or server configuration. Some web hosting companies impose very low limits on the amount of memory available to WordPress® during the execution of a single script. Since s2Member is a larger plugin, WordPress® may exceed conservative limits set forth by shared hosting companies. Don't feel bad, it's a very common problem. The solution is to install manually, using the instructions above. Memory limits only affect the WordPress® auto-installation routine, not the actual functionality of WordPress® or s2Member.
57
 
61
  = What about Multisite Networking ( WPMU ), used on a Blog Farm? =
62
  Yes, preliminary ( experimental ) support for Multisite Blog Farms has also been implemented. If you're running a Multisite Blog Farm ( i.e. you offer Blogs ), please contact s2Member.com for further details. With Multisite Networking enabled, your site could ALSO offer a Customer access to create a Blog of their own, where a Customer becomes a "Member" of your ( Main Site ), and also a Blog Owner/Administrator. With s2Member installed ( network wide ), each of your Blog Owners could offer Membership too, using a single installation of the s2Member plugin ( which is a great selling point ). We refer to this as a Multisite Blog Farm. You can get started now, by turning on [Multisite Networking](http://codex.wordpress.org/Create_A_Network) inside your installation of WordPress®. Then, install the s2Member plugin ( network wide ). In the Dashboard for your Main Site, see: `s2Member -> Multisite ( Config )`.
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  == Description ==
65
 
66
+ [youtube http://www.youtube.com/watch?v=FyA8Qmm2DHY /]
67
+
68
+ s2Member is an extremely powerful ( and free ) membership management system for WordPress®. The s2Member Framework ( free ) integrates seamlessly with PayPal® ( very easy ), and fully supports recurring billing, with the ability to track affiliate commissions on a recurring basis. s2Member supports custom Pages for registration ( including Custom Registration Fields ), account access, and a whole lot more. s2Member is now compatible with Multisite Networking too, and even with BuddyPress if you like. In addition, with the s2Member Pro Module ( an optional paid upgrade ), you can add support for PayPal® Pro, Authorize.Net®, ccBill®, Google® Checkout, ClickBank®, and reach over 1 billion people in China with s2Member's AliPay® integration. Videos available at: [s2Member.com / Videos](http://www.s2member.com/videos/).
69
 
70
  s2Member supports Free Subscribers ( at Level #0 ), and up to four Primary Membership Levels, [1-4]; plus unlimited Custom Capability Packages. You can label your Membership Levels anything you like. The defaults are Free, Bronze, Silver, Gold, and Platinum. Custom Capabilities are an easy way to extend s2Member in very creative ways. Custom Capabilities allow you to create an unlimited number of Membership Packages, all with different Capabilities and prices.
71
 
90
  9. s2Member / Screenshot #9
91
  10. s2Member / Screenshot #10
92
 
93
+ == Video Tutorials ==
94
+ Please visit s2Member.com for [video tutorials](http://www.s2member.com/videos/).
95
+
96
  == Frequently Asked Questions ==
97
 
98
  = Is there documentation available for s2Member? =
108
  Archived releases of s2Member are maintained [here](http://wordpress.org/extend/plugins/s2member/download/).
109
 
110
  = Does s2Member install any new database tables? =
111
+ No, s2Member has been fully integrated with Roles &amp; Capabilities that are already built into WordPress®. It is designed to be completely seamless, without code bloat. We've carefully structured the entire framework, in order to maximize s2Member's ability to operate with other plugins installed. For instance, s2Member is also compatible with BuddyPress; and can even be used to protect forums powered by bbPress.
112
 
113
  = Does PayPal integration work right-out-of-the-box? =
114
  Yes, it can even generate your PayPal® Subscription Buttons for you. Everything is fully integrated. You even get to create your own Pages within WordPress® to handle Membership Options, the Login Welcome Page, etc. For advanced webmasters, there are scripting techniques that are documented as well. These will help you further develop your site and tailor it to meet your specific needs. s2Member API Scripting is NOT required however.
163
 
164
  == Upgrade Notice ==
165
 
166
+ = 3.5.8+ =
167
  * Upgrade highly recommended. Many new features, WordPress® 3.1 compatible, speed optimizations, and several bug fixes.
168
 
169
  == Changelog ==
170
 
171
+ = 3.5.8 =
172
+ * **(s2Member). Bug fix.** The Shortcode version of s2Member's Profile Editing Panel ( i.e. `[s2Member-Profile /]` ) was not validating input fields properly. This bug was has been resolved in v3.5.8+.
173
+ * **(s2Member). Compatibility.** s2Member now requires PHP v5.2.3+ instead of just PHP v5.2+. This is because `call_user_func_array()` in early versions of PHP 5.2 did not support static class methods with a scope resolution operator. If you've had trouble getting s2Member v3.5+ to run on your server, this is likely the cause. Please make sure you're running PHP v5.2.3+.
174
+ * **(s2Member). Bug fix.** PayPal® Button Encryption was failing under some circumstances, because the PayPal® API Method `BMCreateButton` requires two decimal places at all times. The bug fix in this release does NOT require any changes to your Shortcode attributes. Rather, the encryption routine will now automatically convert numeric dollar amounts during encryption.
175
+ * **(s2Member Pro). Compatibility.** Starting with s2Member Pro v3.5.8+, Pro Cancellation Forms will automatically detect Customers that may have signed up with a Standard PayPal® Button, and provide the Customer with a link & instructions about how to cancel their "Subscription" via PayPal®. This makes it possible for site owners upgrading to s2Member Pro, to provide their Customers with just ONE Cancellation Form, which has the ability to consider both PayPal® Standard "Subscriptions", and also "Recurring Profiles"; which are used by s2Member Pro Forms.
176
+
177
  = 3.5.7 =
178
  * **(s2Member/s2Member Pro). Bug fix.** A bug was found in the `c_ws_plugin__s2member_systematics_sp` class file. This bug was affecting s2Member's Security Gate for WordPress® `Pages` under certain unique circumstances. One symptom of this bug ( seen with s2Member Pro installed ), was to experience a strange disappearance of (s2) Lock Icons in your list of Pages, whenever the first Page in your list was the Login Welcome Page that you configured for s2Member.
179
  * **(s2Member Pro). Bug fix.** On a Multisite Network, s2Member Pro Forms were generating an erroneous error `Please enter a username` during a Billing Modification under certain circumstances. This has been resolved in s2Member Pro v1.5.7+.
s2member.php CHANGED
@@ -9,8 +9,8 @@ along with this software. In the main directory, see: /licensing/
9
  If not, see: <http://www.gnu.org/licenses/>.
10
  */
11
  /*
12
- Version: 3.5.7
13
- Stable tag: 3.5.7
14
  Framework: WS-P-3.5
15
 
16
  SSL Compatible: yes
@@ -26,9 +26,9 @@ Google® Checkout Compatible: w/ s2Member Pro
26
  ClickBank® Compatible: w/ s2Member Pro
27
  AliPay® Compatible: w/ s2Member Pro
28
 
29
- Tested up to: 3.1
30
  Requires at least: 3.0
31
- Requires: WordPress® 3.0+, PHP 5.2+
32
 
33
  Copyright: © 2009 WebSharks, Inc.
34
  License: GNU General Public License
@@ -38,6 +38,7 @@ Author: PriMoThemes.com / WebSharks, Inc.
38
  Donate link: http://www.primothemes.com/donate/
39
 
40
  Plugin Name: s2Member
 
41
  Pro Module / Prices: http://www.s2member.com/prices/
42
  Forum URI: http://www.primothemes.com/forums/viewforum.php?f=4
43
  PayPal Pro Integration: http://www.primothemes.com/forums/viewtopic.php?f=4&t=304
@@ -54,10 +55,10 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
54
  /*
55
  Define versions.
56
  */
57
- @define ("WS_PLUGIN__S2MEMBER_VERSION", "3.5.7");
58
- @define ("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2");
59
  @define ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION", "3.0");
60
- @define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "1.5.7");
61
  /*
62
  Compatibility checks.
63
  */
9
  If not, see: <http://www.gnu.org/licenses/>.
10
  */
11
  /*
12
+ Version: 3.5.8
13
+ Stable tag: 3.5.8
14
  Framework: WS-P-3.5
15
 
16
  SSL Compatible: yes
26
  ClickBank® Compatible: w/ s2Member Pro
27
  AliPay® Compatible: w/ s2Member Pro
28
 
29
+ Tested up to: 3.1.1
30
  Requires at least: 3.0
31
+ Requires: WordPress® 3.0+, PHP 5.2.3+
32
 
33
  Copyright: © 2009 WebSharks, Inc.
34
  License: GNU General Public License
38
  Donate link: http://www.primothemes.com/donate/
39
 
40
  Plugin Name: s2Member
41
+ Video Tutorials: http://www.s2member.com/videos/
42
  Pro Module / Prices: http://www.s2member.com/prices/
43
  Forum URI: http://www.primothemes.com/forums/viewforum.php?f=4
44
  PayPal Pro Integration: http://www.primothemes.com/forums/viewtopic.php?f=4&t=304
55
  /*
56
  Define versions.
57
  */
58
+ @define ("WS_PLUGIN__S2MEMBER_VERSION", "3.5.8");
59
+ @define ("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2.3");
60
  @define ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION", "3.0");
61
+ @define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "1.5.8");
62
  /*
63
  Compatibility checks.
64
  */