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

Version Description

= v121023 = Maintenance release. Upgrade immediately.

Download this release

Release Info

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

Code changes from version 120703 to 121023

includes/classes/paypal-utilities.inc.php CHANGED
@@ -67,13 +67,13 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
67
  if(!empty($postvars["charset"]) && function_exists("mb_convert_encoding"))
68
  {
69
  foreach($postvars as &$value)
70
- $value = @mb_convert_encoding($value, "UTF-8", $postvars["charset"]);
71
  }
72
  /**/
73
  return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
74
  }
75
  else /* Nope. */
76
- return false;
77
  }
78
  else if(!empty($_REQUEST) && is_array($postvars = stripslashes_deep($_REQUEST)))
79
  {
@@ -89,7 +89,7 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
89
  if(!empty($postvars["charset"]) && function_exists("mb_convert_encoding"))
90
  {
91
  foreach($postvars as &$value)
92
- $value = @mb_convert_encoding($value, "UTF-8", $postvars["charset"]);
93
  }
94
  /**/
95
  $endpoint = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com";
@@ -104,10 +104,10 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
104
  return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
105
  /**/
106
  else /* Nope. */
107
- return false;
108
  }
109
  else /* Nope. */
110
- return false;
111
  }
112
  else /* Else a custom conditional has been applied by Filters. */
113
  {
@@ -136,7 +136,7 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
136
  $key = md5(c_ws_plugin__s2member_utils_encryption::xencrypt($current_blog->domain.$current_blog->path, false, false));
137
  /**/
138
  else /* Else it's a standard Proxy Key; not on a Multisite Network, or not on the Main Site anyway. */
139
- $key = md5(c_ws_plugin__s2member_utils_encryption::xencrypt(preg_replace("/\:[0-9]+$/", "", $_SERVER["HTTP_HOST"]), false, false));
140
  /**/
141
  return apply_filters("ws_plugin__s2member_paypal_proxy_key_gen", $key, get_defined_vars());
142
  }
@@ -186,7 +186,7 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
186
  $response["__error"] = sprintf(_x('Error #%1$s. %2$s. %3$s.', "s2member-front", "s2member"), $response["L_ERRORCODE0"], rtrim($response["L_SHORTMESSAGE0"], "."), rtrim($response["L_LONGMESSAGE0"], "."));
187
  /**/
188
  else /* Else, generate an error messsage - so something is reported back to the Customer. */
189
- $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
190
  }
191
  /**/
192
  $logv = c_ws_plugin__s2member_utilities::ver_details();
@@ -286,7 +286,8 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
286
  /* translators: Exclude `%2$s`. These are English details returned by PayPal®. Replace `%2$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_payflow_api_response`. */
287
  $response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["RESULT"], rtrim($response["RESPMSG"], "."));
288
  /**/
289
- else $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
 
290
  }
291
  else if(isset($response["TRXRESULT"]) && $response["TRXRESULT"] !== "0")
292
  {
@@ -294,7 +295,8 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
294
  /* translators: Exclude `%2$s`. These are English details returned by PayPal®. Replace `%2$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_payflow_api_response`. */
295
  $response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["TRXRESULT"], rtrim($response["TRXRESPMSG"], "."));
296
  /**/
297
- else $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
 
298
  }
299
  /**/
300
  $logv = c_ws_plugin__s2member_utilities::ver_details();
@@ -565,7 +567,7 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
565
  return apply_filters("ws_plugin__s2member_paypal_pro_period1", $period1, get_defined_vars());
566
  }
567
  else /* Default. */
568
- return apply_filters("ws_plugin__s2member_paypal_pro_period1", $default, get_defined_vars());
569
  }
570
  /**
571
  * Get `period3` from either an array with `PROFILEREFERENCE|rp_invoice_id|period3`, or use an existing string.
@@ -621,7 +623,7 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
621
  return apply_filters("ws_plugin__s2member_paypal_pro_period3", $period3, get_defined_vars());
622
  }
623
  else /* Default. */
624
- return apply_filters("ws_plugin__s2member_paypal_pro_period3", $default, get_defined_vars());
625
  }
626
  }
627
  }
67
  if(!empty($postvars["charset"]) && function_exists("mb_convert_encoding"))
68
  {
69
  foreach($postvars as &$value)
70
+ $value = @mb_convert_encoding($value, "UTF-8", (($postvars["charset"] === "gb2312") ? "GBK" : $postvars["charset"]));
71
  }
72
  /**/
73
  return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
74
  }
75
  else /* Nope. */
76
+ return false;
77
  }
78
  else if(!empty($_REQUEST) && is_array($postvars = stripslashes_deep($_REQUEST)))
79
  {
89
  if(!empty($postvars["charset"]) && function_exists("mb_convert_encoding"))
90
  {
91
  foreach($postvars as &$value)
92
+ $value = @mb_convert_encoding($value, "UTF-8", (($postvars["charset"] === "gb2312") ? "GBK" : $postvars["charset"]));
93
  }
94
  /**/
95
  $endpoint = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com";
104
  return apply_filters("ws_plugin__s2member_paypal_postvars", $postvars, get_defined_vars());
105
  /**/
106
  else /* Nope. */
107
+ return false;
108
  }
109
  else /* Nope. */
110
+ return false;
111
  }
112
  else /* Else a custom conditional has been applied by Filters. */
113
  {
136
  $key = md5(c_ws_plugin__s2member_utils_encryption::xencrypt($current_blog->domain.$current_blog->path, false, false));
137
  /**/
138
  else /* Else it's a standard Proxy Key; not on a Multisite Network, or not on the Main Site anyway. */
139
+ $key = md5(c_ws_plugin__s2member_utils_encryption::xencrypt(preg_replace("/\:[0-9]+$/", "", $_SERVER["HTTP_HOST"]), false, false));
140
  /**/
141
  return apply_filters("ws_plugin__s2member_paypal_proxy_key_gen", $key, get_defined_vars());
142
  }
186
  $response["__error"] = sprintf(_x('Error #%1$s. %2$s. %3$s.', "s2member-front", "s2member"), $response["L_ERRORCODE0"], rtrim($response["L_SHORTMESSAGE0"], "."), rtrim($response["L_LONGMESSAGE0"], "."));
187
  /**/
188
  else /* Else, generate an error messsage - so something is reported back to the Customer. */
189
+ $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
190
  }
191
  /**/
192
  $logv = c_ws_plugin__s2member_utilities::ver_details();
286
  /* translators: Exclude `%2$s`. These are English details returned by PayPal®. Replace `%2$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_payflow_api_response`. */
287
  $response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["RESULT"], rtrim($response["RESPMSG"], "."));
288
  /**/
289
+ else
290
+ $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
291
  }
292
  else if(isset($response["TRXRESULT"]) && $response["TRXRESULT"] !== "0")
293
  {
295
  /* translators: Exclude `%2$s`. These are English details returned by PayPal®. Replace `%2$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__s2member_paypal_payflow_api_response`. */
296
  $response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["TRXRESULT"], rtrim($response["TRXRESPMSG"], "."));
297
  /**/
298
+ else
299
+ $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member");
300
  }
301
  /**/
302
  $logv = c_ws_plugin__s2member_utilities::ver_details();
567
  return apply_filters("ws_plugin__s2member_paypal_pro_period1", $period1, get_defined_vars());
568
  }
569
  else /* Default. */
570
+ return apply_filters("ws_plugin__s2member_paypal_pro_period1", $default, get_defined_vars());
571
  }
572
  /**
573
  * Get `period3` from either an array with `PROFILEREFERENCE|rp_invoice_id|period3`, or use an existing string.
623
  return apply_filters("ws_plugin__s2member_paypal_pro_period3", $period3, get_defined_vars());
624
  }
625
  else /* Default. */
626
+ return apply_filters("ws_plugin__s2member_paypal_pro_period3", $default, get_defined_vars());
627
  }
628
  }
629
  }
includes/classes/users-list-in.inc.php CHANGED
@@ -169,7 +169,7 @@ if (!class_exists ("c_ws_plugin__s2member_users_list_in"))
169
  echo '<tr>' . "\n";
170
  $auto_eot_time = get_user_option ("s2member_auto_eot_time", $user_id);
171
  $auto_eot_time = ($auto_eot_time) ? date ("D M j, Y g:i a T", $auto_eot_time) : "";
172
- echo '<th><label for="ws-plugin--s2member-profile-s2member-auto-eot-time">Automatic EOT Time:</label> <a href="#" onclick="alert(\'EOT = End Of Term. ( i.e. Account Expiration / Termination. ).\\n\\nIf you leave this empty, s2Member will configure an EOT Time automatically, based on the paid Subscription associated with this account. In other words, if a paid Subscription expires, is cancelled, terminated, refunded, reversed, or charged back to you; s2Member will deal with the EOT automatically.\\n\\nThat being said, if you would rather take control over this, you can. If you type in a date manually, s2Member will obey the Auto-EOT Time that you\\\'ve given, no matter what. In other words, you can force certain Members to expire automatically, at a time that you specify. s2Member will obey.\\n\\nValid formats for Automatic EOT Time:\\n\\nmm/dd/yyyy\\nyyyy-mm-dd\\n+1 year\\n+2 weeks\\n+2 months\\n+10 minutes\\nnext thursday\\ntomorrow\\ntoday\\n\\n* anything compatible with PHP\\\'s strtotime() function.\'); return false;" tabindex="-1">[?]</a>' . (($auto_eot_time) ? '<br /><small>( <a href="http://www.world-time-zones.org/zones/greenwich-mean-time.htm" target="_blank" rel="external">Universal Time / GMT</a> )</small>' : '') . '</th>' . "\n";
173
  echo '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_profile_s2member_auto_eot_time" id="ws-plugin--s2member-profile-s2member-auto-eot-time" value="' . format_to_edit ($auto_eot_time) . '" class="regular-text" /></td>' . "\n";
174
  echo '</tr>' . "\n";
175
  /**/
169
  echo '<tr>' . "\n";
170
  $auto_eot_time = get_user_option ("s2member_auto_eot_time", $user_id);
171
  $auto_eot_time = ($auto_eot_time) ? date ("D M j, Y g:i a T", $auto_eot_time) : "";
172
+ echo '<th><label for="ws-plugin--s2member-profile-s2member-auto-eot-time">Automatic EOT Time:</label> <a href="#" onclick="alert(\'EOT = End Of Term. ( i.e. Account Expiration / Termination. ).\\n\\nIf you leave this empty, s2Member will configure an EOT Time automatically, based on the paid Subscription associated with this account. In other words, if a paid Subscription expires, is cancelled, terminated, refunded, reversed, or charged back to you; s2Member will deal with the EOT automatically.\\n\\nThat being said, if you would rather take control over this, you can. If you type in a date manually, s2Member will obey the Auto-EOT Time that you\\\'ve given, no matter what. In other words, you can force certain Members to expire automatically, at a time that you specify. s2Member will obey.\\n\\nValid formats for Automatic EOT Time:\\n\\nmm/dd/yyyy\\nyyyy-mm-dd\\n+1 year\\n+2 weeks\\n+2 months\\n+10 minutes\\nnext thursday\\ntomorrow\\ntoday\\n\\n* anything compatible with PHP\\\'s strtotime() function.\'); return false;" tabindex="-1">[?]</a>' . (($auto_eot_time) ? '<br /><small>( <a href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank" rel="external">Universal Time / GMT</a> )</small>' : '') . '</th>' . "\n";
173
  echo '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_profile_s2member_auto_eot_time" id="ws-plugin--s2member-profile-s2member-auto-eot-time" value="' . format_to_edit ($auto_eot_time) . '" class="regular-text" /></td>' . "\n";
174
  echo '</tr>' . "\n";
175
  /**/
includes/classes/utils-conds.inc.php CHANGED
@@ -121,7 +121,8 @@ if(!class_exists("c_ws_plugin__s2member_utils_conds"))
121
  /**/
122
  if(empty($parse["host"]) || strcasecmp($parse["host"], c_ws_plugin__s2member_utils_urls::parse_url(site_url(), PHP_URL_HOST)) === 0)
123
  if($parse["path"] === "/" || rtrim($parse["path"], "/") === rtrim(c_ws_plugin__s2member_utils_urls::parse_url(site_url(), PHP_URL_PATH), "/"))
124
- return true;
 
125
  }
126
  return false; /* Default return false. */
127
  }
121
  /**/
122
  if(empty($parse["host"]) || strcasecmp($parse["host"], c_ws_plugin__s2member_utils_urls::parse_url(site_url(), PHP_URL_HOST)) === 0)
123
  if($parse["path"] === "/" || rtrim($parse["path"], "/") === rtrim(c_ws_plugin__s2member_utils_urls::parse_url(site_url(), PHP_URL_PATH), "/"))
124
+ if(get_option("permalink_structure") || (empty($_GET["post_id"]) && empty($_GET["page_id"]) && empty($_GET["p"])))
125
+ return true;
126
  }
127
  return false; /* Default return false. */
128
  }
includes/classes/utils-html.inc.php CHANGED
@@ -55,9 +55,8 @@ if (!class_exists ("c_ws_plugin__s2member_utils_html"))
55
  echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . "\n";
56
  /**/
57
  echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/jquery/jquery.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
58
- echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/l10n.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
59
  /**/
60
- echo '<script type="text/javascript">' . "var pwsL10n = {empty: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strength indicator", "s2member-front", "s2member")) . "', short: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Very weak", "s2member-front", "s2member")) . "', bad: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Weak", "s2member-front", "s2member")) . "', good: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Medium", "s2member-front", "s2member")) . "', strong: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strong", "s2member-front", "s2member")) . "', mismatch: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Mismatch", "s2member-front", "s2member")) . "'}; try{convertEntities(pwsL10n);}catch(e){};</script>" . "\n";
61
  echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-admin/js/password-strength-meter.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
62
  /**/
63
  echo '<script type="text/javascript" src="' . esc_attr ($s2o . "?ws_plugin__s2member_js_w_globals=" . urlencode (WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5) . "&amp;qcABC=1&amp;ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ())) . '"></script>' . "\n";
55
  echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . "\n";
56
  /**/
57
  echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-includes/js/jquery/jquery.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
 
58
  /**/
59
+ echo '<script type="text/javascript">' . "var pwsL10n = {empty: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strength indicator", "s2member-front", "s2member")) . "', short: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Very weak", "s2member-front", "s2member")) . "', bad: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Weak", "s2member-front", "s2member")) . "', good: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Medium", "s2member-front", "s2member")) . "', strong: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strong", "s2member-front", "s2member")) . "', mismatch: '" . c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Mismatch", "s2member-front", "s2member")) . "'};</script>" . "\n";
60
  echo '<script type="text/javascript" src="' . esc_attr (site_url ("/wp-admin/js/password-strength-meter.js?ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ()))) . '"></script>' . "\n";
61
  /**/
62
  echo '<script type="text/javascript" src="' . esc_attr ($s2o . "?ws_plugin__s2member_js_w_globals=" . urlencode (WS_PLUGIN__S2MEMBER_API_CONSTANTS_MD5) . "&amp;qcABC=1&amp;ver=" . urlencode (c_ws_plugin__s2member_utilities::ver_checksum ())) . '"></script>' . "\n";
includes/classes/utils-strings.inc.php CHANGED
@@ -57,13 +57,14 @@ if(!class_exists("c_ws_plugin__s2member_utils_strings"))
57
  *
58
  * @param str $string Input string.
59
  * @param int $times Number of escapes. Defaults to 1.
 
60
  * @return str Output string after double quotes are escaped.
61
  */
62
- public static function esc_dq($string = FALSE, $times = FALSE)
63
  {
64
  $times = (is_numeric($times) && $times >= 0) ? (int)$times : 1;
65
  /**/
66
- return str_replace('"', str_repeat("\\", $times).'"', (string)$string);
67
  }
68
  /**
69
  * Escapes single quotes.
57
  *
58
  * @param str $string Input string.
59
  * @param int $times Number of escapes. Defaults to 1.
60
+ * @param str $escape_char The character to be used in escapes.
61
  * @return str Output string after double quotes are escaped.
62
  */
63
+ public static function esc_dq($string = FALSE, $times = FALSE, $escape_char = "\\")
64
  {
65
  $times = (is_numeric($times) && $times >= 0) ? (int)$times : 1;
66
  /**/
67
+ return str_replace('"', str_repeat($escape_char, $times).'"', (string)$string);
68
  }
69
  /**
70
  * Escapes single quotes.
includes/classes/utils-urls.inc.php CHANGED
@@ -195,6 +195,8 @@ if(!class_exists("c_ws_plugin__s2member_utils_urls"))
195
  $args = /* Force array, and disable SSL verification. */ (!is_array($args)) ? array(): $args;
196
  $args["sslverify"] = (!isset($args["sslverify"])) ? /* Off. */ false : $args["sslverify"];
197
  /**/
 
 
198
  if((is_array($post_vars) || is_string($post_vars)) && !empty($post_vars))
199
  $args = array_merge($args, array("method" => "POST", "body" => $post_vars));
200
  /**/
195
  $args = /* Force array, and disable SSL verification. */ (!is_array($args)) ? array(): $args;
196
  $args["sslverify"] = (!isset($args["sslverify"])) ? /* Off. */ false : $args["sslverify"];
197
  /**/
198
+ $args["httpversion"] = (!isset($args["httpversion"])) ? "1.1" : $args["httpversion"];
199
+ /**/
200
  if((is_array($post_vars) || is_string($post_vars)) && !empty($post_vars))
201
  $args = array_merge($args, array("method" => "POST", "body" => $post_vars));
202
  /**/
includes/functions/api-functions.inc.php CHANGED
@@ -14,7 +14,7 @@
14
  * @package s2Member\API_Functions
15
  * @since 3.5
16
  */
17
- if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
18
  exit("Do not access this file directly.");
19
  /**
20
  * Conditional to determine if the current User is NOT logged in.
@@ -49,11 +49,11 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
49
  *
50
  * @see http://codex.wordpress.org/Function_Reference/is_user_logged_in is_user_logged_in()
51
  */
52
- if (!function_exists ("is_user_not_logged_in"))
53
  {
54
- function is_user_not_logged_in ()
55
  {
56
- return (!is_user_logged_in ());
57
  }
58
  }
59
  /**
@@ -127,19 +127,19 @@ if (!function_exists ("is_user_not_logged_in"))
127
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
128
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
129
  */
130
- if (!function_exists ("user_is"))
131
  {
132
- function user_is ($id = FALSE, $role = FALSE)
133
  {
134
- $role = ($role === "s2member_level0") ? "subscriber" : preg_replace ("/^access_/i", "", $role);
135
  /**/
136
- if (($role === "super_administrator" || $role === "administrator") && is_multisite () && is_super_admin ($id))
137
  return true; /* Return true, Super Admins are always considered an Admnistrator, for all Blogs. */
138
  /**/
139
- else if (is_multisite () && is_super_admin ($id)) /* Else return false for Super Admins here. */
140
  return false; /* Super Admins can access all Capabilities, so the default handling would fail. */
141
  /**/
142
- return user_can ($id, $role);
143
  }
144
  }
145
  /**
@@ -212,11 +212,11 @@ if (!function_exists ("user_is"))
212
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
213
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
214
  */
215
- if (!function_exists ("user_is_not"))
216
  {
217
- function user_is_not ($id = FALSE, $role = FALSE)
218
  {
219
- return (!user_is ($id, $role));
220
  }
221
  }
222
  /**
@@ -289,19 +289,19 @@ if (!function_exists ("user_is_not"))
289
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
290
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
291
  */
292
- if (!function_exists ("current_user_is"))
293
  {
294
- function current_user_is ($role = FALSE)
295
  {
296
- $role = ($role === "s2member_level0") ? "subscriber" : preg_replace ("/^access_/i", "", $role);
297
  /**/
298
- if (($role === "super_administrator" || $role === "administrator") && is_multisite () && is_super_admin ())
299
  return true; /* Return true, Super Admins are always considered an Admnistrator, for all Blogs. */
300
  /**/
301
- else if (is_multisite () && is_super_admin ()) /* Else return false for Super Admins here. */
302
  return false; /* Super Admins can access all Capabilities, so the default handling would fail. */
303
  /**/
304
- return current_user_can ($role);
305
  }
306
  }
307
  /**
@@ -373,11 +373,11 @@ if (!function_exists ("current_user_is"))
373
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
374
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
375
  */
376
- if (!function_exists ("current_user_is_not"))
377
  {
378
- function current_user_is_not ($role = FALSE)
379
  {
380
- return (!current_user_is ($role));
381
  }
382
  }
383
  /**
@@ -456,19 +456,19 @@ if (!function_exists ("current_user_is_not"))
456
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
457
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
458
  */
459
- if (!function_exists ("current_user_is_for_blog"))
460
  {
461
- function current_user_is_for_blog ($blog_id = FALSE, $role = FALSE)
462
  {
463
- $role = ($role === "s2member_level0") ? "subscriber" : preg_replace ("/^access_/i", "", $role);
464
  /**/
465
- if (($role === "super_administrator" || $role === "administrator") && is_multisite () && is_super_admin ())
466
  return true; /* Return true, Super Admins are always considered an Admnistrator, for all Blogs. */
467
  /**/
468
- else if (is_multisite () && is_super_admin ()) /* Else return false for Super Admins here. */
469
  return false; /* Super Admins can access all Capabilities, so the default handling would fail. */
470
  /**/
471
- return current_user_can_for_blog ($blog_id, $role);
472
  }
473
  }
474
  /**
@@ -535,11 +535,11 @@ if (!function_exists ("current_user_is_for_blog"))
535
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
536
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
537
  */
538
- if (!function_exists ("current_user_is_not_for_blog"))
539
  {
540
- function current_user_is_not_for_blog ($blog_id = FALSE, $role = FALSE)
541
  {
542
- return (!current_user_is_for_blog ($blog_id, $role));
543
  }
544
  }
545
  /**
@@ -604,11 +604,11 @@ if (!function_exists ("current_user_is_not_for_blog"))
604
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
605
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
606
  */
607
- if (!function_exists ("user_cannot"))
608
  {
609
- function user_cannot ($id = FALSE, $capability = FALSE)
610
  {
611
- return (!user_can ($id, $capability));
612
  }
613
  }
614
  /**
@@ -673,11 +673,11 @@ if (!function_exists ("user_cannot"))
673
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
674
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
675
  */
676
- if (!function_exists ("current_user_cannot"))
677
  {
678
- function current_user_cannot ($capability = FALSE)
679
  {
680
- return (!current_user_can ($capability));
681
  }
682
  }
683
  /**
@@ -743,11 +743,11 @@ if (!function_exists ("current_user_cannot"))
743
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
744
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
745
  */
746
- if (!function_exists ("current_user_cannot_for_blog"))
747
  {
748
- function current_user_cannot_for_blog ($blog_id = FALSE, $capability = FALSE)
749
  {
750
- return (!current_user_can_for_blog ($blog_id, $capability));
751
  }
752
  }
753
  /**
@@ -852,28 +852,28 @@ if (!function_exists ("current_user_cannot_for_blog"))
852
  * @see s2Member\API_Functions\attach_s2member_query_filters()
853
  * @see s2Member\API_Functions\detach_s2member_query_filters()
854
  */
855
- if (!function_exists ("is_protected_by_s2member"))
856
  {
857
- function is_protected_by_s2member ($what = FALSE, $type = FALSE, $check_user = FALSE)
858
  {
859
  global $post; /* Global reference to $post in The Loop. */
860
  /**/
861
- $what = ($what) ? $what : ((is_object ($post) && $post->ID) ? $post->ID : false);
862
- $type = ($type) ? strtolower ($type) : "singular";
863
  /**/
864
- if ($type === "category" && ($array = c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access ($what, $check_user)))
865
  return $array; /* A non-empty array with ["s2member_level_req"]. */
866
  /**/
867
- else if ($type === "tag" && ($array = c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access ($what, $check_user)))
868
  return $array; /* A non-empty array with ["s2member_level_req"]. */
869
  /**/
870
- else if (($type === "post" || $type === "singular") && ($array = c_ws_plugin__s2member_posts_sp::check_specific_post_level_access ($what, $check_user)))
871
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
872
  /**/
873
- else if (($type === "page" || $type === "singular") && ($array = c_ws_plugin__s2member_pages_sp::check_specific_page_level_access ($what, $check_user)))
874
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
875
  /**/
876
- else if ($type === "uri" && ($array = c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access ($what, $check_user)))
877
  return $array; /* A non-empty array with ["s2member_level_req"]. */
878
  /**/
879
  return false;
@@ -974,28 +974,28 @@ if (!function_exists ("is_protected_by_s2member"))
974
  * @see s2Member\API_Functions\attach_s2member_query_filters()
975
  * @see s2Member\API_Functions\detach_s2member_query_filters()
976
  */
977
- if (!function_exists ("is_permitted_by_s2member"))
978
  {
979
- function is_permitted_by_s2member ($what = FALSE, $type = FALSE)
980
  {
981
  global $post; /* Global reference to $post in The Loop. */
982
  /**/
983
- $what = ($what) ? $what : ((is_object ($post) && $post->ID) ? $post->ID : false);
984
- $type = ($type) ? strtolower ($type) : "singular";
985
  /**/
986
- if ($type === "category" && c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access ($what, true))
987
  return false;
988
  /**/
989
- else if ($type === "tag" && c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access ($what, true))
990
  return false;
991
  /**/
992
- else if (($type === "post" || $type === "singular") && c_ws_plugin__s2member_posts_sp::check_specific_post_level_access ($what, true))
993
  return false;
994
  /**/
995
- else if (($type === "page" || $type === "singular") && c_ws_plugin__s2member_pages_sp::check_specific_page_level_access ($what, true))
996
  return false;
997
  /**/
998
- else if ($type === "uri" && c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access ($what, true))
999
  return false;
1000
  /**/
1001
  return true;
@@ -1066,11 +1066,11 @@ if (!function_exists ("is_permitted_by_s2member"))
1066
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1067
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1068
  */
1069
- if (!function_exists ("is_category_protected_by_s2member"))
1070
  {
1071
- function is_category_protected_by_s2member ($cat_id = FALSE, $check_user = FALSE)
1072
  {
1073
- if ($cat_id && ($array = c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access ($cat_id, $check_user)))
1074
  return $array; /* A non-empty array with ["s2member_level_req"]. */
1075
  /**/
1076
  return false;
@@ -1134,11 +1134,11 @@ if (!function_exists ("is_category_protected_by_s2member"))
1134
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1135
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1136
  */
1137
- if (!function_exists ("is_category_permitted_by_s2member"))
1138
  {
1139
- function is_category_permitted_by_s2member ($cat_id = FALSE)
1140
  {
1141
- if ($cat_id && c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access ($cat_id, true))
1142
  return false;
1143
  /**/
1144
  return true;
@@ -1222,11 +1222,11 @@ if (!function_exists ("is_category_permitted_by_s2member"))
1222
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1223
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1224
  */
1225
- if (!function_exists ("is_tag_protected_by_s2member"))
1226
  {
1227
- function is_tag_protected_by_s2member ($tag_id_slug_or_name = FALSE, $check_user = FALSE)
1228
  {
1229
- if ($tag_id_slug_or_name && ($array = c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access ($tag_id_slug_or_name, $check_user)))
1230
  return $array; /* A non-empty array with ["s2member_level_req"]. */
1231
  /**/
1232
  return false;
@@ -1303,11 +1303,11 @@ if (!function_exists ("is_tag_protected_by_s2member"))
1303
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1304
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1305
  */
1306
- if (!function_exists ("is_tag_permitted_by_s2member"))
1307
  {
1308
- function is_tag_permitted_by_s2member ($tag_id_slug_or_name = FALSE)
1309
  {
1310
- if ($tag_id_slug_or_name && c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access ($tag_id_slug_or_name, true))
1311
  return false;
1312
  /**/
1313
  return true;
@@ -1378,11 +1378,11 @@ if (!function_exists ("is_tag_permitted_by_s2member"))
1378
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1379
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1380
  */
1381
- if (!function_exists ("is_post_protected_by_s2member"))
1382
  {
1383
- function is_post_protected_by_s2member ($post_id = FALSE, $check_user = FALSE)
1384
  {
1385
- if ($post_id && ($array = c_ws_plugin__s2member_posts_sp::check_specific_post_level_access ($post_id, $check_user)))
1386
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
1387
  /**/
1388
  return false;
@@ -1446,11 +1446,11 @@ if (!function_exists ("is_post_protected_by_s2member"))
1446
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1447
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1448
  */
1449
- if (!function_exists ("is_post_permitted_by_s2member"))
1450
  {
1451
- function is_post_permitted_by_s2member ($post_id = FALSE)
1452
  {
1453
- if ($post_id && c_ws_plugin__s2member_posts_sp::check_specific_post_level_access ($post_id, true))
1454
  return false;
1455
  /**/
1456
  return true;
@@ -1521,11 +1521,11 @@ if (!function_exists ("is_post_permitted_by_s2member"))
1521
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1522
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1523
  */
1524
- if (!function_exists ("is_page_protected_by_s2member"))
1525
  {
1526
- function is_page_protected_by_s2member ($page_id = FALSE, $check_user = FALSE)
1527
  {
1528
- if ($page_id && ($array = c_ws_plugin__s2member_pages_sp::check_specific_page_level_access ($page_id, $check_user)))
1529
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
1530
  /**/
1531
  return false;
@@ -1589,11 +1589,11 @@ if (!function_exists ("is_page_protected_by_s2member"))
1589
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1590
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1591
  */
1592
- if (!function_exists ("is_page_permitted_by_s2member"))
1593
  {
1594
- function is_page_permitted_by_s2member ($page_id = FALSE)
1595
  {
1596
- if ($page_id && c_ws_plugin__s2member_pages_sp::check_specific_page_level_access ($page_id, true))
1597
  return false;
1598
  /**/
1599
  return true;
@@ -1671,11 +1671,11 @@ if (!function_exists ("is_page_permitted_by_s2member"))
1671
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1672
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1673
  */
1674
- if (!function_exists ("is_uri_protected_by_s2member"))
1675
  {
1676
- function is_uri_protected_by_s2member ($uri_or_full_url = FALSE, $check_user = FALSE)
1677
  {
1678
- if ($uri_or_full_url && ($array = c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access ($uri_or_full_url, $check_user)))
1679
  return $array; /* A non-empty array with ["s2member_level_req"]. */
1680
  /**/
1681
  return false;
@@ -1746,11 +1746,11 @@ if (!function_exists ("is_uri_protected_by_s2member"))
1746
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1747
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1748
  */
1749
- if (!function_exists ("is_uri_permitted_by_s2member"))
1750
  {
1751
- function is_uri_permitted_by_s2member ($uri_or_full_url = FALSE)
1752
  {
1753
- if ($uri_or_full_url && c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access ($uri_or_full_url, true))
1754
  return false;
1755
  /**/
1756
  return true;
@@ -1794,12 +1794,12 @@ if (!function_exists ("is_uri_permitted_by_s2member"))
1794
  *
1795
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1796
  */
1797
- if (!function_exists ("attach_s2member_query_filters"))
1798
  {
1799
- function attach_s2member_query_filters ()
1800
  {
1801
- remove_action ("pre_get_posts", "c_ws_plugin__s2member_security::security_gate_query", 100);
1802
- add_action ("pre_get_posts", "c_ws_plugin__s2member_querys::force_query_level_access", 100);
1803
  }
1804
  }
1805
  /**
@@ -1840,12 +1840,12 @@ if (!function_exists ("attach_s2member_query_filters"))
1840
  *
1841
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1842
  */
1843
- if (!function_exists ("detach_s2member_query_filters"))
1844
  {
1845
- function detach_s2member_query_filters ()
1846
  {
1847
- remove_action ("pre_get_posts", "c_ws_plugin__s2member_querys::force_query_level_access", 100);
1848
- add_action ("pre_get_posts", "c_ws_plugin__s2member_security::security_gate_query", 100);
1849
  }
1850
  }
1851
  /**
@@ -1912,11 +1912,11 @@ if (!function_exists ("detach_s2member_query_filters"))
1912
  *
1913
  * @see s2Member\API_Functions\s2member_file_download_key()
1914
  */
1915
- if (!function_exists ("s2member_file_download_url"))
1916
  {
1917
- function s2member_file_download_url ($config = FALSE, $get_streamer_array = FALSE)
1918
  {
1919
- return c_ws_plugin__s2member_files::create_file_download_url ($config, $get_streamer_array);
1920
  }
1921
  }
1922
  /**
@@ -1964,11 +1964,11 @@ if (!function_exists ("s2member_file_download_url"))
1964
  *
1965
  * @todo Allow custom expiration times.
1966
  */
1967
- if (!function_exists ("s2member_file_download_key"))
1968
  {
1969
- function s2member_file_download_key ($file = FALSE, $directive = FALSE)
1970
  {
1971
- return c_ws_plugin__s2member_files::file_download_key ($file, $directive);
1972
  }
1973
  }
1974
  /**
@@ -2015,12 +2015,12 @@ if (!function_exists ("s2member_file_download_key"))
2015
  * @todo Make it possible for s2Member to keep a count of files downloaded with an Advanced Download Key.
2016
  * @todo Create a Shortcode equivalent.
2017
  */
2018
- if (!function_exists ("s2member_user_downloads"))
2019
  {
2020
- function s2member_user_downloads ($user_id = FALSE, $not_counting_this_particular_file = FALSE)
2021
  {
2022
- $user = ($user_id && is_object ($user = new WP_User ((int)$user_id)) && !empty ($user->ID)) ? $user : false;
2023
- return c_ws_plugin__s2member_files::user_downloads ($user, $not_counting_this_particular_file);
2024
  }
2025
  }
2026
  /**
@@ -2068,11 +2068,11 @@ if (!function_exists ("s2member_user_downloads"))
2068
  * @todo Make it possible for s2Member to keep a count of files downloaded with an Advanced Download Key.
2069
  * @todo Create a Shortcode equivalent.
2070
  */
2071
- if (!function_exists ("s2member_total_downloads_of"))
2072
  {
2073
- function s2member_total_downloads_of ($file = FALSE, $user_id = FALSE, $check_archives_too = TRUE)
2074
  {
2075
- return c_ws_plugin__s2member_files::total_downloads_of ($file, $user_id, $check_archives_too);
2076
  }
2077
  }
2078
  /**
@@ -2120,11 +2120,11 @@ if (!function_exists ("s2member_total_downloads_of"))
2120
  * @todo Make it possible for s2Member to keep a count of files downloaded with an Advanced Download Key.
2121
  * @todo Create a Shortcode equivalent.
2122
  */
2123
- if (!function_exists ("s2member_total_unique_downloads_of"))
2124
  {
2125
- function s2member_total_unique_downloads_of ($file = FALSE, $user_id = FALSE, $check_archives_too = TRUE)
2126
  {
2127
- return c_ws_plugin__s2member_files::total_unique_downloads_of ($file, $user_id, $check_archives_too);
2128
  }
2129
  }
2130
  /**
@@ -2157,11 +2157,11 @@ if (!function_exists ("s2member_total_unique_downloads_of"))
2157
  *
2158
  * @see s2Member\API_Functions\get_user_field()
2159
  */
2160
- if (!function_exists ("s2member_registration_time"))
2161
  {
2162
- function s2member_registration_time ($user_id = FALSE)
2163
  {
2164
- return c_ws_plugin__s2member_registration_times::registration_time ($user_id);
2165
  }
2166
  }
2167
  /**
@@ -2200,11 +2200,11 @@ if (!function_exists ("s2member_registration_time"))
2200
  *
2201
  * @see s2Member\API_Functions\get_user_field()
2202
  */
2203
- if (!function_exists ("s2member_paid_registration_time"))
2204
  {
2205
- function s2member_paid_registration_time ($level = FALSE, $user_id = FALSE)
2206
  {
2207
- return c_ws_plugin__s2member_registration_times::paid_registration_time ($level, $user_id);
2208
  }
2209
  }
2210
  /**
@@ -2368,11 +2368,11 @@ if (!function_exists ("s2member_paid_registration_time"))
2368
  * @see http://codex.wordpress.org/Function_Reference/update_user_option update_user_option()
2369
  * @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
2370
  */
2371
- if (!function_exists ("get_user_field"))
2372
  {
2373
- function get_user_field ($field_id = FALSE, $user_id = FALSE)
2374
  {
2375
- return c_ws_plugin__s2member_utils_users::get_user_field ($field_id, $user_id);
2376
  }
2377
  }
2378
  /**
@@ -2415,20 +2415,20 @@ if (!function_exists ("get_user_field"))
2415
  * @see http://codex.wordpress.org/Function_Reference/update_user_option update_user_option()
2416
  * @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
2417
  */
2418
- if (!function_exists ("get_s2member_custom_fields"))
2419
  {
2420
- function get_s2member_custom_fields ($user_id = FALSE)
2421
  {
2422
- $fields = ($user_id) ? get_user_option ("s2member_custom_fields", $user_id) : false;
2423
  /**//**/
2424
- foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
2425
  {
2426
- if ($user_id) /* Should we try to fill the User's value for this Custom Field? */
2427
- $s2member_custom_fields[$field["id"]]["user_value"] = (isset ($fields[$field["id"]])) ? $fields[$field["id"]] : false;
2428
  $s2member_custom_fields[$field["id"]]["config"] = $field; /* Copy configuration into config element. */
2429
  }
2430
  /**/
2431
- return (isset ($s2member_custom_fields)) ? (array)$s2member_custom_fields : array ();
2432
  }
2433
  }
2434
  /**
@@ -2456,11 +2456,11 @@ if (!function_exists ("get_s2member_custom_fields"))
2456
  *
2457
  * @todo Create a true Shortcode equivalent function.
2458
  */
2459
- if (!function_exists ("s2member_value_for_pp_inv"))
2460
  {
2461
- function s2member_value_for_pp_inv ()
2462
  {
2463
- return uniqid () . "~" . $_SERVER["REMOTE_ADDR"];
2464
  }
2465
  }
2466
  /**
@@ -2487,11 +2487,11 @@ if (!function_exists ("s2member_value_for_pp_inv"))
2487
  *
2488
  * @todo Create a Shortcode equivalent for this function.
2489
  */
2490
- if (!function_exists ("s2member_shorten_url"))
2491
  {
2492
- function s2member_shorten_url ($url = FALSE, $api_sp = FALSE, $try_backups = TRUE)
2493
  {
2494
- return c_ws_plugin__s2member_utils_urls::shorten ($url, $api_sp, $try_backups);
2495
  }
2496
  }
2497
  /**
@@ -2523,11 +2523,11 @@ if (!function_exists ("s2member_shorten_url"))
2523
  *
2524
  * @todo Create a Shortcode equivalent for this function.
2525
  */
2526
- if (!function_exists ("s2member_encrypt"))
2527
  {
2528
- function s2member_encrypt ($string = FALSE, $key = FALSE, $w_md5_cs = TRUE)
2529
  {
2530
- return c_ws_plugin__s2member_utils_encryption::encrypt ($string, $key, $w_md5_cs);
2531
  }
2532
  }
2533
  /**
@@ -2558,11 +2558,11 @@ if (!function_exists ("s2member_encrypt"))
2558
  *
2559
  * @todo Create a Shortcode equivalent for this function.
2560
  */
2561
- if (!function_exists ("s2member_decrypt"))
2562
  {
2563
- function s2member_decrypt ($base64 = FALSE, $key = FALSE)
2564
  {
2565
- return c_ws_plugin__s2member_utils_encryption::decrypt ($base64, $key);
2566
  }
2567
  }
2568
  /**
@@ -2592,11 +2592,11 @@ if (!function_exists ("s2member_decrypt"))
2592
  *
2593
  * @todo Create a Shortcode equivalent for this function.
2594
  */
2595
- if (!function_exists ("s2member_xencrypt"))
2596
  {
2597
- function s2member_xencrypt ($string = FALSE, $key = FALSE, $w_md5_cs = TRUE)
2598
  {
2599
- return c_ws_plugin__s2member_utils_encryption::xencrypt ($string, $key, $w_md5_cs);
2600
  }
2601
  }
2602
  /**
@@ -2625,11 +2625,40 @@ if (!function_exists ("s2member_xencrypt"))
2625
  *
2626
  * @todo Create a Shortcode equivalent for this function.
2627
  */
2628
- if (!function_exists ("s2member_xdecrypt"))
2629
  {
2630
- function s2member_xdecrypt ($base64 = FALSE, $key = FALSE)
2631
  {
2632
- return c_ws_plugin__s2member_utils_encryption::xdecrypt ($base64, $key);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2633
  }
2634
  }
2635
  ?>
14
  * @package s2Member\API_Functions
15
  * @since 3.5
16
  */
17
+ if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
18
  exit("Do not access this file directly.");
19
  /**
20
  * Conditional to determine if the current User is NOT logged in.
49
  *
50
  * @see http://codex.wordpress.org/Function_Reference/is_user_logged_in is_user_logged_in()
51
  */
52
+ if(!function_exists("is_user_not_logged_in"))
53
  {
54
+ function is_user_not_logged_in()
55
  {
56
+ return (!is_user_logged_in());
57
  }
58
  }
59
  /**
127
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
128
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
129
  */
130
+ if(!function_exists("user_is"))
131
  {
132
+ function user_is($id = FALSE, $role = FALSE)
133
  {
134
+ $role = ($role === "s2member_level0") ? "subscriber" : preg_replace("/^access_/i", "", $role);
135
  /**/
136
+ if(($role === "super_administrator" || $role === "administrator") && is_multisite() && is_super_admin($id))
137
  return true; /* Return true, Super Admins are always considered an Admnistrator, for all Blogs. */
138
  /**/
139
+ else if(is_multisite() && is_super_admin($id)) /* Else return false for Super Admins here. */
140
  return false; /* Super Admins can access all Capabilities, so the default handling would fail. */
141
  /**/
142
+ return user_can($id, $role);
143
  }
144
  }
145
  /**
212
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
213
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
214
  */
215
+ if(!function_exists("user_is_not"))
216
  {
217
+ function user_is_not($id = FALSE, $role = FALSE)
218
  {
219
+ return (!user_is($id, $role));
220
  }
221
  }
222
  /**
289
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
290
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
291
  */
292
+ if(!function_exists("current_user_is"))
293
  {
294
+ function current_user_is($role = FALSE)
295
  {
296
+ $role = ($role === "s2member_level0") ? "subscriber" : preg_replace("/^access_/i", "", $role);
297
  /**/
298
+ if(($role === "super_administrator" || $role === "administrator") && is_multisite() && is_super_admin())
299
  return true; /* Return true, Super Admins are always considered an Admnistrator, for all Blogs. */
300
  /**/
301
+ else if(is_multisite() && is_super_admin()) /* Else return false for Super Admins here. */
302
  return false; /* Super Admins can access all Capabilities, so the default handling would fail. */
303
  /**/
304
+ return current_user_can($role);
305
  }
306
  }
307
  /**
373
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
374
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
375
  */
376
+ if(!function_exists("current_user_is_not"))
377
  {
378
+ function current_user_is_not($role = FALSE)
379
  {
380
+ return (!current_user_is($role));
381
  }
382
  }
383
  /**
456
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
457
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
458
  */
459
+ if(!function_exists("current_user_is_for_blog"))
460
  {
461
+ function current_user_is_for_blog($blog_id = FALSE, $role = FALSE)
462
  {
463
+ $role = ($role === "s2member_level0") ? "subscriber" : preg_replace("/^access_/i", "", $role);
464
  /**/
465
+ if(($role === "super_administrator" || $role === "administrator") && is_multisite() && is_super_admin())
466
  return true; /* Return true, Super Admins are always considered an Admnistrator, for all Blogs. */
467
  /**/
468
+ else if(is_multisite() && is_super_admin()) /* Else return false for Super Admins here. */
469
  return false; /* Super Admins can access all Capabilities, so the default handling would fail. */
470
  /**/
471
+ return current_user_can_for_blog($blog_id, $role);
472
  }
473
  }
474
  /**
535
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
536
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
537
  */
538
+ if(!function_exists("current_user_is_not_for_blog"))
539
  {
540
+ function current_user_is_not_for_blog($blog_id = FALSE, $role = FALSE)
541
  {
542
+ return (!current_user_is_for_blog($blog_id, $role));
543
  }
544
  }
545
  /**
604
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
605
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
606
  */
607
+ if(!function_exists("user_cannot"))
608
  {
609
+ function user_cannot($id = FALSE, $capability = FALSE)
610
  {
611
+ return (!user_can($id, $capability));
612
  }
613
  }
614
  /**
673
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
674
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
675
  */
676
+ if(!function_exists("current_user_cannot"))
677
  {
678
+ function current_user_cannot($capability = FALSE)
679
  {
680
+ return (!current_user_can($capability));
681
  }
682
  }
683
  /**
743
  * @see http://codex.wordpress.org/Function_Reference/current_user_can current_user_can()
744
  * @see http://codex.wordpress.org/Function_Reference/current_user_can_for_blog current_user_can_for_blog()
745
  */
746
+ if(!function_exists("current_user_cannot_for_blog"))
747
  {
748
+ function current_user_cannot_for_blog($blog_id = FALSE, $capability = FALSE)
749
  {
750
+ return (!current_user_can_for_blog($blog_id, $capability));
751
  }
752
  }
753
  /**
852
  * @see s2Member\API_Functions\attach_s2member_query_filters()
853
  * @see s2Member\API_Functions\detach_s2member_query_filters()
854
  */
855
+ if(!function_exists("is_protected_by_s2member"))
856
  {
857
+ function is_protected_by_s2member($what = FALSE, $type = FALSE, $check_user = FALSE)
858
  {
859
  global $post; /* Global reference to $post in The Loop. */
860
  /**/
861
+ $what = ($what) ? $what : ((is_object($post) && $post->ID) ? $post->ID : false);
862
+ $type = ($type) ? strtolower($type) : "singular";
863
  /**/
864
+ if($type === "category" && ($array = c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access($what, $check_user)))
865
  return $array; /* A non-empty array with ["s2member_level_req"]. */
866
  /**/
867
+ else if($type === "tag" && ($array = c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access($what, $check_user)))
868
  return $array; /* A non-empty array with ["s2member_level_req"]. */
869
  /**/
870
+ else if(($type === "post" || $type === "singular") && ($array = c_ws_plugin__s2member_posts_sp::check_specific_post_level_access($what, $check_user)))
871
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
872
  /**/
873
+ else if(($type === "page" || $type === "singular") && ($array = c_ws_plugin__s2member_pages_sp::check_specific_page_level_access($what, $check_user)))
874
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
875
  /**/
876
+ else if($type === "uri" && ($array = c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access($what, $check_user)))
877
  return $array; /* A non-empty array with ["s2member_level_req"]. */
878
  /**/
879
  return false;
974
  * @see s2Member\API_Functions\attach_s2member_query_filters()
975
  * @see s2Member\API_Functions\detach_s2member_query_filters()
976
  */
977
+ if(!function_exists("is_permitted_by_s2member"))
978
  {
979
+ function is_permitted_by_s2member($what = FALSE, $type = FALSE)
980
  {
981
  global $post; /* Global reference to $post in The Loop. */
982
  /**/
983
+ $what = ($what) ? $what : ((is_object($post) && $post->ID) ? $post->ID : false);
984
+ $type = ($type) ? strtolower($type) : "singular";
985
  /**/
986
+ if($type === "category" && c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access($what, true))
987
  return false;
988
  /**/
989
+ else if($type === "tag" && c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access($what, true))
990
  return false;
991
  /**/
992
+ else if(($type === "post" || $type === "singular") && c_ws_plugin__s2member_posts_sp::check_specific_post_level_access($what, true))
993
  return false;
994
  /**/
995
+ else if(($type === "page" || $type === "singular") && c_ws_plugin__s2member_pages_sp::check_specific_page_level_access($what, true))
996
  return false;
997
  /**/
998
+ else if($type === "uri" && c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access($what, true))
999
  return false;
1000
  /**/
1001
  return true;
1066
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1067
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1068
  */
1069
+ if(!function_exists("is_category_protected_by_s2member"))
1070
  {
1071
+ function is_category_protected_by_s2member($cat_id = FALSE, $check_user = FALSE)
1072
  {
1073
+ if($cat_id && ($array = c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access($cat_id, $check_user)))
1074
  return $array; /* A non-empty array with ["s2member_level_req"]. */
1075
  /**/
1076
  return false;
1134
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1135
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1136
  */
1137
+ if(!function_exists("is_category_permitted_by_s2member"))
1138
  {
1139
+ function is_category_permitted_by_s2member($cat_id = FALSE)
1140
  {
1141
+ if($cat_id && c_ws_plugin__s2member_catgs_sp::check_specific_catg_level_access($cat_id, true))
1142
  return false;
1143
  /**/
1144
  return true;
1222
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1223
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1224
  */
1225
+ if(!function_exists("is_tag_protected_by_s2member"))
1226
  {
1227
+ function is_tag_protected_by_s2member($tag_id_slug_or_name = FALSE, $check_user = FALSE)
1228
  {
1229
+ if($tag_id_slug_or_name && ($array = c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access($tag_id_slug_or_name, $check_user)))
1230
  return $array; /* A non-empty array with ["s2member_level_req"]. */
1231
  /**/
1232
  return false;
1303
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1304
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1305
  */
1306
+ if(!function_exists("is_tag_permitted_by_s2member"))
1307
  {
1308
+ function is_tag_permitted_by_s2member($tag_id_slug_or_name = FALSE)
1309
  {
1310
+ if($tag_id_slug_or_name && c_ws_plugin__s2member_ptags_sp::check_specific_ptag_level_access($tag_id_slug_or_name, true))
1311
  return false;
1312
  /**/
1313
  return true;
1378
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1379
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1380
  */
1381
+ if(!function_exists("is_post_protected_by_s2member"))
1382
  {
1383
+ function is_post_protected_by_s2member($post_id = FALSE, $check_user = FALSE)
1384
  {
1385
+ if($post_id && ($array = c_ws_plugin__s2member_posts_sp::check_specific_post_level_access($post_id, $check_user)))
1386
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
1387
  /**/
1388
  return false;
1446
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1447
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1448
  */
1449
+ if(!function_exists("is_post_permitted_by_s2member"))
1450
  {
1451
+ function is_post_permitted_by_s2member($post_id = FALSE)
1452
  {
1453
+ if($post_id && c_ws_plugin__s2member_posts_sp::check_specific_post_level_access($post_id, true))
1454
  return false;
1455
  /**/
1456
  return true;
1521
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1522
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1523
  */
1524
+ if(!function_exists("is_page_protected_by_s2member"))
1525
  {
1526
+ function is_page_protected_by_s2member($page_id = FALSE, $check_user = FALSE)
1527
  {
1528
+ if($page_id && ($array = c_ws_plugin__s2member_pages_sp::check_specific_page_level_access($page_id, $check_user)))
1529
  return $array; /* A non-empty array with ["s2member_(level|sp|ccap)_req"]. */
1530
  /**/
1531
  return false;
1589
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1590
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1591
  */
1592
+ if(!function_exists("is_page_permitted_by_s2member"))
1593
  {
1594
+ function is_page_permitted_by_s2member($page_id = FALSE)
1595
  {
1596
+ if($page_id && c_ws_plugin__s2member_pages_sp::check_specific_page_level_access($page_id, true))
1597
  return false;
1598
  /**/
1599
  return true;
1671
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1672
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1673
  */
1674
+ if(!function_exists("is_uri_protected_by_s2member"))
1675
  {
1676
+ function is_uri_protected_by_s2member($uri_or_full_url = FALSE, $check_user = FALSE)
1677
  {
1678
+ if($uri_or_full_url && ($array = c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access($uri_or_full_url, $check_user)))
1679
  return $array; /* A non-empty array with ["s2member_level_req"]. */
1680
  /**/
1681
  return false;
1746
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1747
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1748
  */
1749
+ if(!function_exists("is_uri_permitted_by_s2member"))
1750
  {
1751
+ function is_uri_permitted_by_s2member($uri_or_full_url = FALSE)
1752
  {
1753
+ if($uri_or_full_url && c_ws_plugin__s2member_ruris_sp::check_specific_ruri_level_access($uri_or_full_url, true))
1754
  return false;
1755
  /**/
1756
  return true;
1794
  *
1795
  * @see s2Member\API_Functions\detach_s2member_query_filters()
1796
  */
1797
+ if(!function_exists("attach_s2member_query_filters"))
1798
  {
1799
+ function attach_s2member_query_filters()
1800
  {
1801
+ remove_action("pre_get_posts", "c_ws_plugin__s2member_security::security_gate_query", 100);
1802
+ add_action("pre_get_posts", "c_ws_plugin__s2member_querys::force_query_level_access", 100);
1803
  }
1804
  }
1805
  /**
1840
  *
1841
  * @see s2Member\API_Functions\attach_s2member_query_filters()
1842
  */
1843
+ if(!function_exists("detach_s2member_query_filters"))
1844
  {
1845
+ function detach_s2member_query_filters()
1846
  {
1847
+ remove_action("pre_get_posts", "c_ws_plugin__s2member_querys::force_query_level_access", 100);
1848
+ add_action("pre_get_posts", "c_ws_plugin__s2member_security::security_gate_query", 100);
1849
  }
1850
  }
1851
  /**
1912
  *
1913
  * @see s2Member\API_Functions\s2member_file_download_key()
1914
  */
1915
+ if(!function_exists("s2member_file_download_url"))
1916
  {
1917
+ function s2member_file_download_url($config = FALSE, $get_streamer_array = FALSE)
1918
  {
1919
+ return c_ws_plugin__s2member_files::create_file_download_url($config, $get_streamer_array);
1920
  }
1921
  }
1922
  /**
1964
  *
1965
  * @todo Allow custom expiration times.
1966
  */
1967
+ if(!function_exists("s2member_file_download_key"))
1968
  {
1969
+ function s2member_file_download_key($file = FALSE, $directive = FALSE)
1970
  {
1971
+ return c_ws_plugin__s2member_files::file_download_key($file, $directive);
1972
  }
1973
  }
1974
  /**
2015
  * @todo Make it possible for s2Member to keep a count of files downloaded with an Advanced Download Key.
2016
  * @todo Create a Shortcode equivalent.
2017
  */
2018
+ if(!function_exists("s2member_user_downloads"))
2019
  {
2020
+ function s2member_user_downloads($user_id = FALSE, $not_counting_this_particular_file = FALSE)
2021
  {
2022
+ $user = ($user_id && is_object($user = new WP_User((int)$user_id)) && !empty($user->ID)) ? $user : false;
2023
+ return c_ws_plugin__s2member_files::user_downloads($user, $not_counting_this_particular_file);
2024
  }
2025
  }
2026
  /**
2068
  * @todo Make it possible for s2Member to keep a count of files downloaded with an Advanced Download Key.
2069
  * @todo Create a Shortcode equivalent.
2070
  */
2071
+ if(!function_exists("s2member_total_downloads_of"))
2072
  {
2073
+ function s2member_total_downloads_of($file = FALSE, $user_id = FALSE, $check_archives_too = TRUE)
2074
  {
2075
+ return c_ws_plugin__s2member_files::total_downloads_of($file, $user_id, $check_archives_too);
2076
  }
2077
  }
2078
  /**
2120
  * @todo Make it possible for s2Member to keep a count of files downloaded with an Advanced Download Key.
2121
  * @todo Create a Shortcode equivalent.
2122
  */
2123
+ if(!function_exists("s2member_total_unique_downloads_of"))
2124
  {
2125
+ function s2member_total_unique_downloads_of($file = FALSE, $user_id = FALSE, $check_archives_too = TRUE)
2126
  {
2127
+ return c_ws_plugin__s2member_files::total_unique_downloads_of($file, $user_id, $check_archives_too);
2128
  }
2129
  }
2130
  /**
2157
  *
2158
  * @see s2Member\API_Functions\get_user_field()
2159
  */
2160
+ if(!function_exists("s2member_registration_time"))
2161
  {
2162
+ function s2member_registration_time($user_id = FALSE)
2163
  {
2164
+ return c_ws_plugin__s2member_registration_times::registration_time($user_id);
2165
  }
2166
  }
2167
  /**
2200
  *
2201
  * @see s2Member\API_Functions\get_user_field()
2202
  */
2203
+ if(!function_exists("s2member_paid_registration_time"))
2204
  {
2205
+ function s2member_paid_registration_time($level = FALSE, $user_id = FALSE)
2206
  {
2207
+ return c_ws_plugin__s2member_registration_times::paid_registration_time($level, $user_id);
2208
  }
2209
  }
2210
  /**
2368
  * @see http://codex.wordpress.org/Function_Reference/update_user_option update_user_option()
2369
  * @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
2370
  */
2371
+ if(!function_exists("get_user_field"))
2372
  {
2373
+ function get_user_field($field_id = FALSE, $user_id = FALSE)
2374
  {
2375
+ return c_ws_plugin__s2member_utils_users::get_user_field($field_id, $user_id);
2376
  }
2377
  }
2378
  /**
2415
  * @see http://codex.wordpress.org/Function_Reference/update_user_option update_user_option()
2416
  * @see http://codex.wordpress.org/Function_Reference/wp_get_current_user wp_get_current_user()
2417
  */
2418
+ if(!function_exists("get_s2member_custom_fields"))
2419
  {
2420
+ function get_s2member_custom_fields($user_id = FALSE)
2421
  {
2422
+ $fields = ($user_id) ? get_user_option("s2member_custom_fields", $user_id) : false;
2423
  /**//**/
2424
+ foreach(json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
2425
  {
2426
+ if($user_id) /* Should we try to fill the User's value for this Custom Field? */
2427
+ $s2member_custom_fields[$field["id"]]["user_value"] = (isset($fields[$field["id"]])) ? $fields[$field["id"]] : false;
2428
  $s2member_custom_fields[$field["id"]]["config"] = $field; /* Copy configuration into config element. */
2429
  }
2430
  /**/
2431
+ return (isset($s2member_custom_fields)) ? (array)$s2member_custom_fields : array();
2432
  }
2433
  }
2434
  /**
2456
  *
2457
  * @todo Create a true Shortcode equivalent function.
2458
  */
2459
+ if(!function_exists("s2member_value_for_pp_inv"))
2460
  {
2461
+ function s2member_value_for_pp_inv()
2462
  {
2463
+ return uniqid()."~".$_SERVER["REMOTE_ADDR"];
2464
  }
2465
  }
2466
  /**
2487
  *
2488
  * @todo Create a Shortcode equivalent for this function.
2489
  */
2490
+ if(!function_exists("s2member_shorten_url"))
2491
  {
2492
+ function s2member_shorten_url($url = FALSE, $api_sp = FALSE, $try_backups = TRUE)
2493
  {
2494
+ return c_ws_plugin__s2member_utils_urls::shorten($url, $api_sp, $try_backups);
2495
  }
2496
  }
2497
  /**
2523
  *
2524
  * @todo Create a Shortcode equivalent for this function.
2525
  */
2526
+ if(!function_exists("s2member_encrypt"))
2527
  {
2528
+ function s2member_encrypt($string = FALSE, $key = FALSE, $w_md5_cs = TRUE)
2529
  {
2530
+ return c_ws_plugin__s2member_utils_encryption::encrypt($string, $key, $w_md5_cs);
2531
  }
2532
  }
2533
  /**
2558
  *
2559
  * @todo Create a Shortcode equivalent for this function.
2560
  */
2561
+ if(!function_exists("s2member_decrypt"))
2562
  {
2563
+ function s2member_decrypt($base64 = FALSE, $key = FALSE)
2564
  {
2565
+ return c_ws_plugin__s2member_utils_encryption::decrypt($base64, $key);
2566
  }
2567
  }
2568
  /**
2592
  *
2593
  * @todo Create a Shortcode equivalent for this function.
2594
  */
2595
+ if(!function_exists("s2member_xencrypt"))
2596
  {
2597
+ function s2member_xencrypt($string = FALSE, $key = FALSE, $w_md5_cs = TRUE)
2598
  {
2599
+ return c_ws_plugin__s2member_utils_encryption::xencrypt($string, $key, $w_md5_cs);
2600
  }
2601
  }
2602
  /**
2625
  *
2626
  * @todo Create a Shortcode equivalent for this function.
2627
  */
2628
+ if(!function_exists("s2member_xdecrypt"))
2629
  {
2630
+ function s2member_xdecrypt($base64 = FALSE, $key = FALSE)
2631
  {
2632
+ return c_ws_plugin__s2member_utils_encryption::xdecrypt($base64, $key);
2633
+ }
2634
+ }
2635
+ /**
2636
+ * Gets login IPs for a particular username.
2637
+ *
2638
+ * ———— PHP Code Samples ————
2639
+ * ```
2640
+ * <!php print_r($ips = s2member_login_ips_for("johndoe22")); !>
2641
+ * ```
2642
+ * ———— Shortcode Equivalent ————
2643
+ * ```
2644
+ * There is NO Shortcode equivalent for this ( yet ).
2645
+ * ```
2646
+ *
2647
+ * @package s2Member\API_Functions
2648
+ * @since 120728
2649
+ *
2650
+ * @param str $username A username.
2651
+ * @return array An associative array of all IPs associated with a particular username, over the last 30 days.
2652
+ * Array keys are IP addresses; array values are UTC timestamps.
2653
+ *
2654
+ * @todo Create a Shortcode equivalent for this function.
2655
+ */
2656
+ if(!function_exists("s2member_login_ips_for"))
2657
+ {
2658
+ function s2member_login_ips_for($username)
2659
+ {
2660
+ $ips = get_transient('s2m_ipr_'.md5('s2member_ip_restrictions_'.strtolower($username).'_entries'));
2661
+ return (is_array($ips)) ? $ips : array();
2662
  }
2663
  }
2664
  ?>
includes/menu-pages/gen-ops.inc.php CHANGED
@@ -971,6 +971,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
971
  echo '<p>Custom Fields will appear in your Standard Registration Form, and in User/Member Profiles:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Standard Registration Form.\\n* s2Member makes this form available to logged-in Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
972
  echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of a Multisite Blog Farm uses this Form. s2Member supports Custom Fields here too.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Multisite Registration Form.\\n* s2Member makes this form available to logged-in Super Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
973
  echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your BuddyPress Registration Form.\\n* However, you will probably be redirected away from this BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.\');">here</a>.<br />s2Member can integrate your Custom Fields with BuddyPress too, please see options below.</em></p>' . "\n" : '';
 
974
  /**/
975
  do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_custom_reg_fields", get_defined_vars ());
976
  /**/
971
  echo '<p>Custom Fields will appear in your Standard Registration Form, and in User/Member Profiles:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Standard Registration Form.\\n* s2Member makes this form available to logged-in Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
972
  echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of a Multisite Blog Farm uses this Form. s2Member supports Custom Fields here too.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Multisite Registration Form.\\n* s2Member makes this form available to logged-in Super Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
973
  echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your BuddyPress Registration Form.\\n* However, you will probably be redirected away from this BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.\');">here</a>.<br />s2Member can integrate your Custom Fields with BuddyPress too, please see options below.</em></p>' . "\n" : '';
974
+ echo '<p><strong>Regarding registration...</strong> Custom Fields do NOT appear during repeat registration and/or checkout attempts (e.g. they do NOT appear for any user that is currently logged into the site). Please make sure that you test registration and/or checkout forms while NOT logged in (e.g. please test as a first-time customer). Existing users/members/customers may update Custom Fields by editing their Profile.</p>' . "\n";
975
  /**/
976
  do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_custom_reg_fields", get_defined_vars ());
977
  /**/
includes/menu-pages/mms-ops.inc.php CHANGED
@@ -56,7 +56,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_mms_ops"))
56
  echo '<div class="ws-menu-page-section ws-plugin--s2member-mms-patches-section">'."\n";
57
  echo '<img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/small-icon.png" title="s2Member ( a Membership management system for WordPress® )" alt="" style="float:right; margin:0 0 0 25px; border:0;" />'."\n";
58
  echo '<h3>Multisite WordPress® Patches ( required for compatiblity )</h3>'."\n";
59
- echo '<p>In order for s2Member to function properly in a Multisite environment, you MUST implement four patches. One goes into your <code>/wp-login.php</code> file, one into <code>/wp-includes/load.php</code>, one into <code>/wp-includes/ms-functions.php</code>, and another into <code>/wp-admin/user-new.php</code>. We have TRAC tickets into WordPress® for these changes. However, until the official release of WordPress® includes these updates, you will need to use the automatic patcher below. All you do is check the box &amp; click Save.</p>'."\n";
60
  do_action("ws_plugin__s2member_during_mms_ops_page_during_left_sections_during_mms_patches", get_defined_vars());
61
  /**/
62
  echo '<table class="form-table">'."\n";
56
  echo '<div class="ws-menu-page-section ws-plugin--s2member-mms-patches-section">'."\n";
57
  echo '<img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/small-icon.png" title="s2Member ( a Membership management system for WordPress® )" alt="" style="float:right; margin:0 0 0 25px; border:0;" />'."\n";
58
  echo '<h3>Multisite WordPress® Patches ( required for compatiblity )</h3>'."\n";
59
+ echo '<p>In order for s2Member to function properly in a Multisite environment, you MUST implement four patches. One goes into your <code>/wp-login.php</code> file, one into <code>/wp-includes/load.php</code>, one into <code>/wp-includes/ms-functions.php</code>, and another into <code>/wp-admin/user-new.php</code>. Please use the automatic patcher below. All you do is check the box &amp; click Save.</p>'."\n";
60
  do_action("ws_plugin__s2member_during_mms_ops_page_during_left_sections_during_mms_patches", get_defined_vars());
61
  /**/
62
  echo '<table class="form-table">'."\n";
includes/translations/s2member.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the s2Member® Framework package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: s2Member® Framework 120622\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
7
- "POT-Creation-Date: 2012-07-03 20:54:11+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -666,24 +666,24 @@ msgid "Error #%1$s. %2$s. %3$s."
666
  msgstr ""
667
 
668
  #: s2member/includes/classes/paypal-utilities.inc.php:189
669
- #: s2member/includes/classes/paypal-utilities.inc.php:289
670
- #: s2member/includes/classes/paypal-utilities.inc.php:297
671
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:96
672
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:318
673
  msgctxt "s2member-front"
674
  msgid "Error. Please contact Support for assistance."
675
  msgstr ""
676
 
677
  #: s2member/includes/classes/paypal-utilities.inc.php:230
678
  #: s2member/includes/classes/paypal-utilities.inc.php:236
679
- #: s2member/includes/classes/paypal-utilities.inc.php:338
680
- #: s2member/includes/classes/paypal-utilities.inc.php:344
681
  msgctxt "s2member-front"
682
  msgid "Error #%s. Transaction declined. Please use an alternate funding source."
683
  msgstr ""
684
 
685
  #: s2member/includes/classes/paypal-utilities.inc.php:233
686
- #: s2member/includes/classes/paypal-utilities.inc.php:341
687
  msgctxt "s2member-front"
688
  msgid "Error #%s. Transaction declined. Express Checkout was NOT confirmed."
689
  msgstr ""
@@ -704,9 +704,9 @@ msgstr ""
704
  #. `ws_plugin__s2member_pro_authnet_arb_response`.
705
 
706
  #: s2member/includes/classes/paypal-utilities.inc.php:287
707
- #: s2member/includes/classes/paypal-utilities.inc.php:295
708
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:93
709
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:315
710
  msgctxt "s2member-front"
711
  msgid "Error #%1$s. %2$s."
712
  msgstr ""
@@ -889,32 +889,32 @@ msgctxt "s2member-front"
889
  msgid "( for this site )"
890
  msgstr ""
891
 
892
- #: s2member/includes/classes/utils-html.inc.php:60
893
  msgctxt "s2member-front"
894
  msgid "Strength indicator"
895
  msgstr ""
896
 
897
- #: s2member/includes/classes/utils-html.inc.php:60
898
  msgctxt "s2member-front"
899
  msgid "Very weak"
900
  msgstr ""
901
 
902
- #: s2member/includes/classes/utils-html.inc.php:60
903
  msgctxt "s2member-front"
904
  msgid "Weak"
905
  msgstr ""
906
 
907
- #: s2member/includes/classes/utils-html.inc.php:60
908
  msgctxt "s2member-front"
909
  msgid "Medium"
910
  msgstr ""
911
 
912
- #: s2member/includes/classes/utils-html.inc.php:60
913
  msgctxt "s2member-front"
914
  msgid "Strong"
915
  msgstr ""
916
 
917
- #: s2member/includes/classes/utils-html.inc.php:60
918
  msgctxt "s2member-front"
919
  msgid "Mismatch"
920
  msgstr ""
@@ -2464,24 +2464,24 @@ msgstr ""
2464
 
2465
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:248
2466
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:580
2467
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:291
2468
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:614
2469
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:334
2470
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:666
2471
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:422
2472
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:850
2473
  msgctxt "s2member-front"
2474
  msgid "<strong>Thank you.</strong> Your account has been updated.<br />&mdash; Please <a href=\"%s\" rel=\"nofollow\">log back in</a> now."
2475
  msgstr ""
2476
 
2477
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:447
2478
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:696
2479
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:453
2480
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:766
2481
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:505
2482
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:818
2483
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:684
2484
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1002
2485
  msgctxt "s2member-front"
2486
  msgid "<strong>Thank you.</strong> Your account has been approved.<br />&mdash; Please <a href=\"%s\" rel=\"nofollow\">login</a>."
2487
  msgstr ""
@@ -2492,18 +2492,18 @@ msgstr ""
2492
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:726
2493
  #: s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:124
2494
  #: s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:141
2495
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:462
2496
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:483
2497
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:775
2498
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:796
2499
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:514
2500
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:535
2501
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:827
2502
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:848
2503
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:693
2504
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:714
2505
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1011
2506
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1032
2507
  #: s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:124
2508
  #: s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:141
2509
  msgctxt "s2member-front"
@@ -2512,20 +2512,20 @@ msgstr ""
2512
 
2513
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:471
2514
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:717
2515
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:474
2516
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:787
2517
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:526
2518
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:839
2519
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:705
2520
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1023
2521
  msgctxt "s2member-front"
2522
  msgid "<strong>Thank you.</strong> Your account has been approved.<br />&mdash; You'll receive an email momentarily."
2523
  msgstr ""
2524
 
2525
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:737
2526
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:807
2527
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:859
2528
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1043
2529
  #: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:138
2530
  msgctxt "s2member-front"
2531
  msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
@@ -3326,13 +3326,13 @@ msgid "Unknown form submission type. Please contact Support."
3326
  msgstr ""
3327
 
3328
  #: s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:163
3329
- #: s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:277
3330
  msgctxt "s2member-front"
3331
  msgid "<strong>Thank you.</strong> Your purchase has been approved.<br />&mdash; Please <a href=\"%s\" rel=\"nofollow\">click here</a> to proceed."
3332
  msgstr ""
3333
 
3334
  #: s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:170
3335
- #: s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:284
3336
  msgctxt "s2member-front"
3337
  msgid "<strong>Oops.</strong> Unable to generate Access Link. Please contact Support for assistance."
3338
  msgstr ""
@@ -3357,26 +3357,26 @@ msgctxt "s2member-front"
3357
  msgid "<strong>Oops.</strong> No Subscr. ID. Please contact Support for assistance."
3358
  msgstr ""
3359
 
3360
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:650
3361
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:793
3362
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:271
3363
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:414
3364
  msgctxt "s2member-front percentage-symbol"
3365
  msgid "%"
3366
  msgstr ""
3367
 
3368
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:792
3369
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:413
3370
  msgctxt "s2member-front"
3371
  msgid " + tax"
3372
  msgstr ""
3373
 
3374
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:837
3375
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:889
3376
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:902
3377
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:924
3378
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:984
3379
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:999
3380
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:458
3381
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:510
3382
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:523
@@ -3387,12 +3387,12 @@ msgctxt "s2member-front"
3387
  msgid "COUPON %s off. ( Now: %s )"
3388
  msgstr ""
3389
 
3390
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:838
3391
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:890
3392
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:903
3393
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:925
3394
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:985
3395
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1000
3396
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:459
3397
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:511
3398
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:524
@@ -3403,12 +3403,12 @@ msgctxt "s2member-front"
3403
  msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s</strong> )</div>"
3404
  msgstr ""
3405
 
3406
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:850
3407
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:863
3408
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:876
3409
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:939
3410
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:954
3411
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:969
3412
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:471
3413
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:484
3414
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:497
@@ -3419,12 +3419,12 @@ msgctxt "s2member-front"
3419
  msgid "COUPON %s off. ( Now: %s, then %s )"
3420
  msgstr ""
3421
 
3422
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:851
3423
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:864
3424
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:877
3425
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:940
3426
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:955
3427
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:970
3428
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:472
3429
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:485
3430
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:498
@@ -3435,27 +3435,27 @@ msgctxt "s2member-front"
3435
  msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s, then %s</strong> )</div>"
3436
  msgstr ""
3437
 
3438
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:907
3439
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1004
3440
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:528
3441
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:625
3442
  msgctxt "s2member-front"
3443
  msgid "<div>Sorry, your Coupon is not applicable.</div>"
3444
  msgstr ""
3445
 
3446
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1008
3447
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:629
3448
  msgctxt "s2member-front"
3449
  msgid "<div>Coupon: <strong>%s0.00 off</strong>.</div>"
3450
  msgstr ""
3451
 
3452
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1012
3453
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:633
3454
  msgctxt "s2member-front"
3455
  msgid "<div>Sorry, your Coupon cannot be applied to this particular purchase.</div>"
3456
  msgstr ""
3457
 
3458
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1016
3459
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:637
3460
  msgctxt "s2member-front"
3461
  msgid "<div>Sorry, your Coupon <strong>expired</strong>: <em>%s</em>.</div>"
@@ -3464,14 +3464,14 @@ msgstr ""
3464
  #. translators: `%1$s` is new price/description, after coupon applied. `%2$s`
3465
  #. is original description.
3466
 
3467
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1022
3468
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:643
3469
  msgctxt "s2member-front"
3470
  msgid "%1$s ~ ORIGINALLY: %2$s"
3471
  msgstr ""
3472
 
3473
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1050
3474
- #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1054
3475
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:671
3476
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:675
3477
  msgctxt "s2member-front"
@@ -3593,12 +3593,12 @@ msgctxt "s2member-front"
3593
  msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal®</a> to cancel your Subscription."
3594
  msgstr ""
3595
 
3596
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:303
3597
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:626
3598
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:346
3599
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:678
3600
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:439
3601
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:862
3602
  msgctxt "s2member-front"
3603
  msgid "<strong>Sorry.</strong> Your account is pending other changes. Please try again in 15 minutes."
3604
  msgstr ""
2
  # This file is distributed under the same license as the s2Member® Framework package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: s2Member® Framework 120703\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
7
+ "POT-Creation-Date: 2012-10-24 02:10:21+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
666
  msgstr ""
667
 
668
  #: s2member/includes/classes/paypal-utilities.inc.php:189
669
+ #: s2member/includes/classes/paypal-utilities.inc.php:290
670
+ #: s2member/includes/classes/paypal-utilities.inc.php:299
671
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:97
672
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:319
673
  msgctxt "s2member-front"
674
  msgid "Error. Please contact Support for assistance."
675
  msgstr ""
676
 
677
  #: s2member/includes/classes/paypal-utilities.inc.php:230
678
  #: s2member/includes/classes/paypal-utilities.inc.php:236
679
+ #: s2member/includes/classes/paypal-utilities.inc.php:340
680
+ #: s2member/includes/classes/paypal-utilities.inc.php:346
681
  msgctxt "s2member-front"
682
  msgid "Error #%s. Transaction declined. Please use an alternate funding source."
683
  msgstr ""
684
 
685
  #: s2member/includes/classes/paypal-utilities.inc.php:233
686
+ #: s2member/includes/classes/paypal-utilities.inc.php:343
687
  msgctxt "s2member-front"
688
  msgid "Error #%s. Transaction declined. Express Checkout was NOT confirmed."
689
  msgstr ""
704
  #. `ws_plugin__s2member_pro_authnet_arb_response`.
705
 
706
  #: s2member/includes/classes/paypal-utilities.inc.php:287
707
+ #: s2member/includes/classes/paypal-utilities.inc.php:296
708
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:94
709
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:316
710
  msgctxt "s2member-front"
711
  msgid "Error #%1$s. %2$s."
712
  msgstr ""
889
  msgid "( for this site )"
890
  msgstr ""
891
 
892
+ #: s2member/includes/classes/utils-html.inc.php:59
893
  msgctxt "s2member-front"
894
  msgid "Strength indicator"
895
  msgstr ""
896
 
897
+ #: s2member/includes/classes/utils-html.inc.php:59
898
  msgctxt "s2member-front"
899
  msgid "Very weak"
900
  msgstr ""
901
 
902
+ #: s2member/includes/classes/utils-html.inc.php:59
903
  msgctxt "s2member-front"
904
  msgid "Weak"
905
  msgstr ""
906
 
907
+ #: s2member/includes/classes/utils-html.inc.php:59
908
  msgctxt "s2member-front"
909
  msgid "Medium"
910
  msgstr ""
911
 
912
+ #: s2member/includes/classes/utils-html.inc.php:59
913
  msgctxt "s2member-front"
914
  msgid "Strong"
915
  msgstr ""
916
 
917
+ #: s2member/includes/classes/utils-html.inc.php:59
918
  msgctxt "s2member-front"
919
  msgid "Mismatch"
920
  msgstr ""
2464
 
2465
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:248
2466
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:580
2467
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:294
2468
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:617
2469
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:337
2470
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:669
2471
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:425
2472
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:853
2473
  msgctxt "s2member-front"
2474
  msgid "<strong>Thank you.</strong> Your account has been updated.<br />&mdash; Please <a href=\"%s\" rel=\"nofollow\">log back in</a> now."
2475
  msgstr ""
2476
 
2477
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:447
2478
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:696
2479
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:456
2480
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:769
2481
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:508
2482
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:821
2483
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:687
2484
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1005
2485
  msgctxt "s2member-front"
2486
  msgid "<strong>Thank you.</strong> Your account has been approved.<br />&mdash; Please <a href=\"%s\" rel=\"nofollow\">login</a>."
2487
  msgstr ""
2492
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:726
2493
  #: s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:124
2494
  #: s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:141
2495
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:465
2496
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:486
2497
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:778
2498
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:799
2499
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:517
2500
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:538
2501
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:830
2502
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:851
2503
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:696
2504
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:717
2505
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1014
2506
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1035
2507
  #: s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:124
2508
  #: s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:141
2509
  msgctxt "s2member-front"
2512
 
2513
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:471
2514
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:717
2515
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:477
2516
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:790
2517
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:529
2518
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:842
2519
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:708
2520
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1026
2521
  msgctxt "s2member-front"
2522
  msgid "<strong>Thank you.</strong> Your account has been approved.<br />&mdash; You'll receive an email momentarily."
2523
  msgstr ""
2524
 
2525
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:737
2526
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:810
2527
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:862
2528
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1046
2529
  #: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:138
2530
  msgctxt "s2member-front"
2531
  msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
3326
  msgstr ""
3327
 
3328
  #: s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:163
3329
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:280
3330
  msgctxt "s2member-front"
3331
  msgid "<strong>Thank you.</strong> Your purchase has been approved.<br />&mdash; Please <a href=\"%s\" rel=\"nofollow\">click here</a> to proceed."
3332
  msgstr ""
3333
 
3334
  #: s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:170
3335
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:287
3336
  msgctxt "s2member-front"
3337
  msgid "<strong>Oops.</strong> Unable to generate Access Link. Please contact Support for assistance."
3338
  msgstr ""
3357
  msgid "<strong>Oops.</strong> No Subscr. ID. Please contact Support for assistance."
3358
  msgstr ""
3359
 
3360
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:652
3361
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:795
3362
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:271
3363
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:414
3364
  msgctxt "s2member-front percentage-symbol"
3365
  msgid "%"
3366
  msgstr ""
3367
 
3368
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:794
3369
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:413
3370
  msgctxt "s2member-front"
3371
  msgid " + tax"
3372
  msgstr ""
3373
 
3374
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:839
3375
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:891
3376
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:904
3377
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:926
3378
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:986
3379
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1001
3380
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:458
3381
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:510
3382
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:523
3387
  msgid "COUPON %s off. ( Now: %s )"
3388
  msgstr ""
3389
 
3390
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:840
3391
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:892
3392
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:905
3393
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:927
3394
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:987
3395
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1002
3396
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:459
3397
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:511
3398
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:524
3403
  msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s</strong> )</div>"
3404
  msgstr ""
3405
 
3406
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:852
3407
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:865
3408
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:878
3409
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:941
3410
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:956
3411
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:971
3412
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:471
3413
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:484
3414
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:497
3419
  msgid "COUPON %s off. ( Now: %s, then %s )"
3420
  msgstr ""
3421
 
3422
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:853
3423
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:866
3424
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:879
3425
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:942
3426
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:957
3427
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:972
3428
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:472
3429
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:485
3430
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:498
3435
  msgid "<div>Coupon: <strong>%s off</strong>. ( Now: <strong>%s, then %s</strong> )</div>"
3436
  msgstr ""
3437
 
3438
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:909
3439
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1006
3440
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:528
3441
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:625
3442
  msgctxt "s2member-front"
3443
  msgid "<div>Sorry, your Coupon is not applicable.</div>"
3444
  msgstr ""
3445
 
3446
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1010
3447
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:629
3448
  msgctxt "s2member-front"
3449
  msgid "<div>Coupon: <strong>%s0.00 off</strong>.</div>"
3450
  msgstr ""
3451
 
3452
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1014
3453
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:633
3454
  msgctxt "s2member-front"
3455
  msgid "<div>Sorry, your Coupon cannot be applied to this particular purchase.</div>"
3456
  msgstr ""
3457
 
3458
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1018
3459
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:637
3460
  msgctxt "s2member-front"
3461
  msgid "<div>Sorry, your Coupon <strong>expired</strong>: <em>%s</em>.</div>"
3464
  #. translators: `%1$s` is new price/description, after coupon applied. `%2$s`
3465
  #. is original description.
3466
 
3467
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1024
3468
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:643
3469
  msgctxt "s2member-front"
3470
  msgid "%1$s ~ ORIGINALLY: %2$s"
3471
  msgstr ""
3472
 
3473
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1052
3474
+ #: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1056
3475
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:671
3476
  #: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:675
3477
  msgctxt "s2member-front"
3593
  msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal®</a> to cancel your Subscription."
3594
  msgstr ""
3595
 
3596
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:306
3597
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:629
3598
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:349
3599
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:681
3600
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:442
3601
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:865
3602
  msgctxt "s2member-front"
3603
  msgid "<strong>Sorry.</strong> Your account is pending other changes. Please try again in 15 minutes."
3604
  msgstr ""
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
- Version: 120703
4
- Stable tag: 120703
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
@@ -16,7 +16,7 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
16
  Google® Checkout Compatible: yes w/s2Member® Pro
17
  ClickBank® Compatible: yes w/s2Member® Pro
18
 
19
- Tested up to: 3.4
20
  Requires at least: 3.2
21
 
22
  Copyright: © 2009 WebSharks, Inc.
@@ -91,11 +91,22 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
91
 
92
  == Upgrade Notice ==
93
 
94
- = v120703 =
95
  Maintenance release. Upgrade immediately.
96
 
97
  == Changelog ==
98
 
 
 
 
 
 
 
 
 
 
 
 
99
  = v120703 =
100
  * **(Maintenance Release) Upgrade immediately.**
101
  * (s2Member/s2Member Pro) **Payflow® Express Checkout**. An issue related to Express Checkout (when using the Payflow® API), has been corrected in this release. A bug in previous releases, was causing error messages under certain circumstances that read `Field format error: Invalid PayerID`.
1
  === s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
+ Version: 121023
4
+ Stable tag: 121023
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
16
  Google® Checkout Compatible: yes w/s2Member® Pro
17
  ClickBank® Compatible: yes w/s2Member® Pro
18
 
19
+ Tested up to: 3.4.2
20
  Requires at least: 3.2
21
 
22
  Copyright: © 2009 WebSharks, Inc.
91
 
92
  == Upgrade Notice ==
93
 
94
+ = v121023 =
95
  Maintenance release. Upgrade immediately.
96
 
97
  == Changelog ==
98
 
99
+ = v121023 =
100
+ * **(Maintenance Release) Upgrade immediately.**
101
+ * (s2Member / s2Member Pro) **Bug Fix**. A bug related to s2Member's `is_site_root()` method, when fancy permalinks are NOT in use; has been corrected for compatibility with the latest version of WordPress. Please see [this thread](http://www.s2member.com/forums/topic/new-custom-field-default-not-on-old-users/#post-28792) for futher details.
102
+ * (s2Member Pro) **Import/Export Bug Fix**. An issue related to RFC guidelines for escape sequences in CSV files has been addressed in this release. Please see [this thread](http://www.s2member.com/forums/topic/new-custom-field-default-not-on-old-users/#post-28792) for futher details.
103
+ * (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was updated for improved compatibility across multiple ccBill® sub-accounts.
104
+ * (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was updated for improved compatibility w/ ccBill® servers running on MST timezone.
105
+ * (s2Member/s2Member Pro) **API Function**. A new API Function was added. See: ``s2member_login_ips_for($username)``. Please check the [s2Member® Codex](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) for documentation. [This thread](http://www.s2member.com/forums/topic/s2member-restriction-options-unique-ip/#post-20562) may also be of some assistance.
106
+ * (s2Member/s2Member Pro) **404 Error (Bug Fix)**. A former dependency on `l10n.js` from the WordPress® core is no longer necessary. This old dependency has been removed to prevent 404 errors in the latest versions of WordPress®. Please check [this thread](http://www.s2member.com/forums/topic/wordpress-i10n-file-404-from-s2member/#post-20567) for further details.
107
+ * (s2Member Pro) **reCAPTCHA® Bug Fix**. A bug sometimes causing failed reCAPTCHA® responses after PayPal® Express Checkout has been corrected in this release. This occurred during certain scenarios, whenever reCAPTCHA® was enabled for checkout forms, and PayPal Express Checkout was selected as the payment method of choice.
108
+ * (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was modified to prevent dates in the future from being requested from the DataLink API. ccBill® was responding to some DataLink requests with a failed authentication, which were caused by dates/times in the future; according to MST on the ccBill® side of things.
109
+
110
  = v120703 =
111
  * **(Maintenance Release) Upgrade immediately.**
112
  * (s2Member/s2Member Pro) **Payflow® Express Checkout**. An issue related to Express Checkout (when using the Payflow® API), has been corrected in this release. A bug in previous releases, was causing error messages under certain circumstances that read `Field format error: Invalid PayerID`.
s2member.php CHANGED
@@ -19,8 +19,8 @@
19
  */
20
  /* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
21
 
22
- Version: 120703
23
- Stable tag: 120703
24
 
25
  SSL Compatible: yes
26
  bbPress® Compatible: yes
@@ -35,7 +35,7 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
35
  Google® Checkout Compatible: yes w/s2Member® Pro
36
  ClickBank® Compatible: yes w/s2Member® Pro
37
 
38
- Tested up to: 3.4
39
  Requires at least: 3.2
40
 
41
  Copyright: © 2009 WebSharks, Inc.
@@ -75,7 +75,7 @@ if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
75
  * @var str
76
  */
77
  if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
78
- define("WS_PLUGIN__S2MEMBER_VERSION", "120703" /* !#distro-version#! */);
79
  /**
80
  * Minimum PHP version required to run s2Member.
81
  *
@@ -105,7 +105,7 @@ if(!defined("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION"))
105
  * @var str
106
  */
107
  if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
108
- define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "120703" /* !#distro-version#! */);
109
  /*
110
  Several compatibility checks.
111
  If all pass, load the s2Member plugin.
19
  */
20
  /* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
21
 
22
+ Version: 121023
23
+ Stable tag: 121023
24
 
25
  SSL Compatible: yes
26
  bbPress® Compatible: yes
35
  Google® Checkout Compatible: yes w/s2Member® Pro
36
  ClickBank® Compatible: yes w/s2Member® Pro
37
 
38
+ Tested up to: 3.4.2
39
  Requires at least: 3.2
40
 
41
  Copyright: © 2009 WebSharks, Inc.
75
  * @var str
76
  */
77
  if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
78
+ define("WS_PLUGIN__S2MEMBER_VERSION", "121023" /* !#distro-version#! */);
79
  /**
80
  * Minimum PHP version required to run s2Member.
81
  *
105
  * @var str
106
  */
107
  if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
108
+ define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "121023" /* !#distro-version#! */);
109
  /*
110
  Several compatibility checks.
111
  If all pass, load the s2Member plugin.