Version Description
= v140520 =
(Maintenance Release) Upgrade immediately!
Download this release
Release Info
Developer | JasWSInc |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 140520 |
Comparing to | |
See all releases |
Code changes from version 140423 to 140520
- checksum.txt +1 -1
- includes/classes/access-cap-times.inc.php +240 -0
- includes/classes/custom-reg-fields.inc.php +245 -6
- includes/classes/profile-mods-4bp-in.inc.php +11 -2
- includes/classes/profile-mods-in.inc.php +11 -2
- includes/classes/registration-times.inc.php +81 -214
- includes/classes/registrations.inc.php +104 -47
- includes/classes/return-templates.inc.php +2 -2
- includes/classes/user-deletions.inc.php +1 -1
- includes/classes/user-drip-access.inc.php +147 -0
- includes/classes/users-list.inc.php +65 -15
- includes/classes/utils-users.inc.php +6 -6
- includes/functions/api-functions.inc.php +26 -3
- includes/hooks.inc.php +11 -1
- includes/jquery/.htaccess +6 -1
- includes/menu-pages/menu-pages-s-min.js +1 -1
- includes/menu-pages/menu-pages-s.js +14 -14
- includes/menu-pages/menu-pages.css +8 -0
- includes/s2member-min.js +1 -1
- includes/s2member.css +70 -8
- includes/s2member.js +23 -67
- includes/templates/cfg-files/s2member-files-no-gzip.php +1 -1
- includes/translations/s2member.pot +376 -279
- readme.txt +17 -101
- s2member.php +4 -4
checksum.txt
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
8ff3c403b6da2ebb6c3e93dafb2f9314
|
includes/classes/access-cap-times.inc.php
ADDED
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Access CAP Times.
|
4 |
+
*
|
5 |
+
* Copyright: © 2009-2011
|
6 |
+
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
|
7 |
+
* (coded in the USA)
|
8 |
+
*
|
9 |
+
* Released under the terms of the GNU General Public License.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\CCAPS
|
15 |
+
* @since 140514
|
16 |
+
*/
|
17 |
+
if(realpath(__FILE__) === realpath($_SERVER['SCRIPT_FILENAME']))
|
18 |
+
exit ('Do not access this file directly.');
|
19 |
+
|
20 |
+
if(!class_exists('c_ws_plugin__s2member_access_cap_times'))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* Access CAP Times.
|
24 |
+
*
|
25 |
+
* @package s2Member\CCAPS
|
26 |
+
* @since 140514
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_access_cap_times
|
29 |
+
{
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var array Previous array of user CAPS.
|
33 |
+
* For internal use only.
|
34 |
+
*/
|
35 |
+
protected static $prev_caps_by_user = array();
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Get user caps before udpate.
|
39 |
+
*
|
40 |
+
* @package s2Member\CCAPS
|
41 |
+
* @since 140514
|
42 |
+
*
|
43 |
+
* @attaches-to ``add_action('add_user_meta')`` (indirectly)
|
44 |
+
* @attaches-to ``add_action('update_user_meta')``
|
45 |
+
*
|
46 |
+
* @param integer $meta_id Meta row ID in database.
|
47 |
+
* @param integer $object_id User ID.
|
48 |
+
* @param string $meta_key Meta key.
|
49 |
+
* @param mixed $meta_value Meta value.
|
50 |
+
*/
|
51 |
+
public static function get_user_caps_before_update($meta_id, $object_id, $meta_key, $meta_value)
|
52 |
+
{
|
53 |
+
$wpdb = $GLOBALS['wpdb'];
|
54 |
+
/** @var $wpdb \wpdb For IDEs. */
|
55 |
+
|
56 |
+
if(strpos($meta_key, 'capabilities') === FALSE || $meta_key !== $wpdb->get_blog_prefix().'capabilities')
|
57 |
+
return; // Not updating caps.
|
58 |
+
|
59 |
+
$user_id = (integer)$object_id;
|
60 |
+
$user = new WP_User($user_id);
|
61 |
+
if(!$user->ID || !$user->exists())
|
62 |
+
return; // Not a valid user.
|
63 |
+
|
64 |
+
self::$prev_caps_by_user[$user_id] = $user->caps;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get user caps before udpate.
|
69 |
+
*
|
70 |
+
* @package s2Member\CCAPS
|
71 |
+
* @since 140514
|
72 |
+
*
|
73 |
+
* @attaches-to ``add_action('add_user_meta')``
|
74 |
+
*
|
75 |
+
* @param integer $object_id User ID.
|
76 |
+
* @param string $meta_key Meta key.
|
77 |
+
* @param mixed $meta_value Meta value.
|
78 |
+
*/
|
79 |
+
public static function get_user_caps_before_update_on_add($object_id, $meta_key, $meta_value)
|
80 |
+
{
|
81 |
+
self::get_user_caps_before_update(0, $object_id, $meta_key, $meta_value);
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Logs access capability times.
|
86 |
+
*
|
87 |
+
* @package s2Member\CCAPS
|
88 |
+
* @since 140514
|
89 |
+
*
|
90 |
+
* @attaches-to ``add_action('added_user_meta')``
|
91 |
+
* @attaches-to ``add_action('updated_user_meta')``
|
92 |
+
* @attaches-to ``add_action('deleted_user_meta')`` (indirectly)
|
93 |
+
*
|
94 |
+
* @param integer $meta_id Meta row ID in database.
|
95 |
+
* @param integer $object_id User ID.
|
96 |
+
* @param string $meta_key Meta key.
|
97 |
+
* @param mixed $meta_value Meta value.
|
98 |
+
*/
|
99 |
+
public static function log_access_cap_times($meta_id, $object_id, $meta_key, $meta_value)
|
100 |
+
{
|
101 |
+
$wpdb = $GLOBALS['wpdb'];
|
102 |
+
/** @var $wpdb \wpdb For IDEs. */
|
103 |
+
|
104 |
+
if(strpos($meta_key, 'capabilities') === FALSE || $meta_key !== $wpdb->get_blog_prefix().'capabilities')
|
105 |
+
return; // Not updating caps.
|
106 |
+
|
107 |
+
$user_id = (integer)$object_id;
|
108 |
+
$user = new WP_User($user_id);
|
109 |
+
if(!$user->ID || !$user->exists())
|
110 |
+
return; // Not a valid user.
|
111 |
+
|
112 |
+
$caps['prev'] = !empty(self::$prev_caps_by_user[$user_id]) ? self::$prev_caps_by_user[$user_id] : array();
|
113 |
+
self::$prev_caps_by_user = array(); // Reset this in case `get_user_caps_before_update()` doesn't run somehow.
|
114 |
+
$caps['now'] = is_array($meta_value) ? $meta_value : array();
|
115 |
+
$role_objects = $GLOBALS['wp_roles']->role_objects;
|
116 |
+
|
117 |
+
foreach($caps as &$_caps_prev_now)
|
118 |
+
{
|
119 |
+
foreach(array_intersect(array_keys($_caps_prev_now), array_keys($role_objects)) as $_role)
|
120 |
+
if($_caps_prev_now[$_role]) // If the cap (i.e. the role) is enabled; merge its caps.
|
121 |
+
$_caps_prev_now = array_merge($_caps_prev_now, $role_objects[$_role]->capabilities);
|
122 |
+
|
123 |
+
$_s2_caps_prev_now = array();
|
124 |
+
foreach($_caps_prev_now as $_cap => $_enabled)
|
125 |
+
if(strpos($_cap, 'access_s2member_') === 0)
|
126 |
+
$_s2_caps_prev_now[substr($_cap, 16)] = $_enabled;
|
127 |
+
$_caps_prev_now = $_s2_caps_prev_now;
|
128 |
+
}
|
129 |
+
unset($_s2_caps_prev_now, $_caps_prev_now, $_role, $_cap, $_enabled);
|
130 |
+
|
131 |
+
$ac_times = get_user_option('s2member_access_cap_times', $user_id);
|
132 |
+
if(!is_array($ac_times)) $ac_times = array();
|
133 |
+
$time = (float)time();
|
134 |
+
|
135 |
+
foreach($caps['prev'] as $_cap => $_was_enabled)
|
136 |
+
if($_was_enabled && empty($caps['now'][$_cap]))
|
137 |
+
$ac_times[number_format(($time += .0001), 4, '.', '')] = '-'.$_cap;
|
138 |
+
unset($_cap, $_was_enabled);
|
139 |
+
|
140 |
+
foreach($caps['now'] as $_cap => $_now_enabled)
|
141 |
+
if($_now_enabled && empty($caps['prev'][$_cap]))
|
142 |
+
$ac_times[number_format(($time += .0001), 4, '.', '')] = $_cap;
|
143 |
+
unset($_cap, $_now_enabled);
|
144 |
+
|
145 |
+
update_user_option($user_id, 's2member_access_cap_times', $ac_times);
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Logs access capability times.
|
150 |
+
*
|
151 |
+
* @package s2Member\CCAPS
|
152 |
+
* @since 140514
|
153 |
+
*
|
154 |
+
* @attaches-to ``add_action('deleted_user_meta')``
|
155 |
+
*
|
156 |
+
* @param array $meta_ids Meta row ID in database.
|
157 |
+
* @param integer $object_id User ID.
|
158 |
+
* @param string $meta_key Meta key.
|
159 |
+
*/
|
160 |
+
public static function log_access_cap_times_on_delete($meta_ids, $object_id, $meta_key)
|
161 |
+
{
|
162 |
+
$wpdb = $GLOBALS['wpdb'];
|
163 |
+
/** @var $wpdb \wpdb For IDEs. */
|
164 |
+
|
165 |
+
if(strpos($meta_key, 'capabilities') === FALSE || $meta_key !== $wpdb->get_blog_prefix().'capabilities')
|
166 |
+
return; // Not updating caps.
|
167 |
+
|
168 |
+
if(!is_array($meta_ids) || !$meta_ids)
|
169 |
+
return; // Nothing to do.
|
170 |
+
|
171 |
+
if(count($meta_ids) > 50)
|
172 |
+
if(function_exists('set_time_limit'))
|
173 |
+
@set_time_limit(900);
|
174 |
+
|
175 |
+
$user_ids = $wpdb->get_col("SELECT DISTINCT `user_id` FROM `".$wpdb->usermeta."` WHERE `umeta_id` IN('".implode("','", $meta_ids)."')");
|
176 |
+
|
177 |
+
if(count($user_ids) > 50)
|
178 |
+
if(function_exists('set_time_limit'))
|
179 |
+
@set_time_limit(900);
|
180 |
+
|
181 |
+
foreach($user_ids as $_user_id)
|
182 |
+
self::log_access_cap_times(0, $_user_id, $meta_key, array());
|
183 |
+
unset($_user_id);
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Gets access capability times.
|
188 |
+
*
|
189 |
+
* @package s2Member\CCAPS
|
190 |
+
* @since 140514
|
191 |
+
*
|
192 |
+
* @param integer $user_id WP User ID.
|
193 |
+
* @param array $access_caps Optional. If not passed, this returns all times for all caps.
|
194 |
+
* If passed, please pass an array of specific access capabilities to get the times for.
|
195 |
+
* If removal times are desired, you should add a `-` prefix.
|
196 |
+
* e.g. `array('ccap_music','level2','-ccap_video')`
|
197 |
+
*
|
198 |
+
* @return array An array of all access capability times.
|
199 |
+
* Keys are UTC timestamps (w/ microtime precision), values are the capabilities (including `-` prefixed removals).
|
200 |
+
* e.g. `array('1234567890.0001' => 'ccap_music', '1234567890.0002' => 'level2', '1234567890.0003' => '-ccap_video')`
|
201 |
+
*/
|
202 |
+
public static function get_access_cap_times($user_id, $access_caps = array())
|
203 |
+
{
|
204 |
+
$ac_times = array();
|
205 |
+
if(($user_id = (integer)$user_id))
|
206 |
+
{
|
207 |
+
$ac_times = get_user_option('s2member_access_cap_times', $user_id);
|
208 |
+
if(!is_array($ac_times)) $ac_times = array();
|
209 |
+
|
210 |
+
/* ------- Begin back compat. with `s2member_paid_registration_times`. */
|
211 |
+
|
212 |
+
// $update_ac_times = empty($ac_times) ? FALSE : TRUE;
|
213 |
+
$ac_times_min = !empty($ac_times) ? min(array_keys($ac_times)) : 0;
|
214 |
+
if(($r_time = c_ws_plugin__s2member_registration_times::registration_time()) && (empty($ac_times_min) || $r_time < $ac_times_min))
|
215 |
+
$ac_times[number_format(($r_time += .0001), 4, '.', '')] = 'level0';
|
216 |
+
|
217 |
+
if(is_array($pr_times = get_user_option('s2member_paid_registration_times', $user_id)))
|
218 |
+
{
|
219 |
+
$role_objects = $GLOBALS['wp_roles']->role_objects;
|
220 |
+
foreach($pr_times as $_level => $_time)
|
221 |
+
if(isset($role_objects['s2member_'.$_level]) && (empty($ac_times_min) || $_time < $ac_times_min))
|
222 |
+
foreach(array_keys($role_objects['s2member_'.$_level]->capabilities) as $_cap)
|
223 |
+
if(strpos($_cap, 'access_s2member_') === 0)
|
224 |
+
$ac_times[number_format(($_time += .0001), 4, '.', '')] = substr($_cap, 16);
|
225 |
+
unset($_level, $_time, $_cap);
|
226 |
+
}
|
227 |
+
/* ------- End back compat. with `s2member_paid_registration_times`. */
|
228 |
+
|
229 |
+
if($access_caps)
|
230 |
+
$ac_times = array_intersect($ac_times, (array)$access_caps);
|
231 |
+
|
232 |
+
ksort($ac_times, SORT_NUMERIC);
|
233 |
+
|
234 |
+
//if($update_ac_times)
|
235 |
+
// update_user_option($user_id, 's2member_access_cap_times', $ac_times);
|
236 |
+
}
|
237 |
+
return apply_filters('ws_plugin__s2member_get_access_cap_times', $ac_times, get_defined_vars());
|
238 |
+
}
|
239 |
+
}
|
240 |
+
}
|
includes/classes/custom-reg-fields.inc.php
CHANGED
@@ -274,12 +274,13 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
|
|
274 |
* @package s2Member\Custom_Reg_Fields
|
275 |
* @since 3.5
|
276 |
*
|
277 |
-
* @param
|
278 |
* You can either pass in a numeric Level number, or the string `auto-detection`.
|
279 |
-
* @param
|
|
|
280 |
* @return array Array of Custom Field IDs applicable.
|
281 |
*/
|
282 |
-
public static function custom_fields_configured_at_level($_level = "auto-detection", $_editable_context = FALSE)
|
283 |
{
|
284 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
285 |
do_action("ws_plugin__s2member_before_custom_fields_configured_at_level", get_defined_vars());
|
@@ -296,7 +297,7 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
|
|
296 |
foreach(json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
297 |
if($level === "any" || $field["levels"] === "all" || in_array($level, preg_split("/[;,]+/", preg_replace("/[^0-9;,]/", "", $field["levels"]))))
|
298 |
if(empty($_editable_context) || $_editable_context === "administrative" || ($_editable_context === "registration" && $field["editable"] !== "no-always-invisible" && $field["editable"] !== "yes-invisible") || (($_editable_context === "profile" || $_editable_context === "profile-view") && $field["editable"] !== "no-invisible" && $field["editable"] !== "no-always-invisible"))
|
299 |
-
$configured[] = /* Add this to the array. */ $field["id"];
|
300 |
}
|
301 |
return apply_filters("ws_plugin__s2member_custom_fields_configured_at_level", ((!empty($configured)) ? $configured : array()), get_defined_vars());
|
302 |
}
|
@@ -558,6 +559,244 @@ if(!class_exists("c_ws_plugin__s2member_custom_reg_fields"))
|
|
558 |
|
559 |
return /* Return for uniformity. */;
|
560 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
561 |
}
|
562 |
-
}
|
563 |
-
?>
|
274 |
* @package s2Member\Custom_Reg_Fields
|
275 |
* @since 3.5
|
276 |
*
|
277 |
+
* @param string|int $_level Optional. Defaults to the current User's Access Level number.
|
278 |
* You can either pass in a numeric Level number, or the string `auto-detection`.
|
279 |
+
* @param string $_editable_context Optional. One of `profile|profile-view|registration`.
|
280 |
+
* @param boolean $full_config Optional. Defaults to a `FALSE` value. `TRUE` to get a full array for each field configuration.
|
281 |
* @return array Array of Custom Field IDs applicable.
|
282 |
*/
|
283 |
+
public static function custom_fields_configured_at_level($_level = "auto-detection", $_editable_context = FALSE, $full_config = FALSE)
|
284 |
{
|
285 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
286 |
do_action("ws_plugin__s2member_before_custom_fields_configured_at_level", get_defined_vars());
|
297 |
foreach(json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
298 |
if($level === "any" || $field["levels"] === "all" || in_array($level, preg_split("/[;,]+/", preg_replace("/[^0-9;,]/", "", $field["levels"]))))
|
299 |
if(empty($_editable_context) || $_editable_context === "administrative" || ($_editable_context === "registration" && $field["editable"] !== "no-always-invisible" && $field["editable"] !== "yes-invisible") || (($_editable_context === "profile" || $_editable_context === "profile-view") && $field["editable"] !== "no-invisible" && $field["editable"] !== "no-always-invisible"))
|
300 |
+
$configured[] = /* Add this to the array. */ $full_config ? $field : $field["id"];
|
301 |
}
|
302 |
return apply_filters("ws_plugin__s2member_custom_fields_configured_at_level", ((!empty($configured)) ? $configured : array()), get_defined_vars());
|
303 |
}
|
559 |
|
560 |
return /* Return for uniformity. */;
|
561 |
}
|
562 |
+
|
563 |
+
/**
|
564 |
+
* Validates custom registration/profile fields.
|
565 |
+
*
|
566 |
+
* @param array $input Array of data input by a user.
|
567 |
+
* Array keys should match custom registration field variable names.
|
568 |
+
*
|
569 |
+
* @param array $fields_to_validate An array of custom registration/profile field configurations.
|
570 |
+
* Only include the configurations for those fields that need to be validated against the `$input`.
|
571 |
+
*
|
572 |
+
* @return array An array of errors; else an empty array.
|
573 |
+
* If there are errors, the array keys are the custom registration field variable names.
|
574 |
+
* Each array value is an error message with basic HTML markup.
|
575 |
+
*/
|
576 |
+
public static function validation_errors($input, $fields_to_validate)
|
577 |
+
{
|
578 |
+
$input = (array)$input;
|
579 |
+
$fields_to_validate = (array)$fields_to_validate;
|
580 |
+
|
581 |
+
$errors = array(); // Initialize the array of errors.
|
582 |
+
$force_personal_emails = isset($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_force_personal_emails'][0]) ? TRUE : FALSE;
|
583 |
+
$non_personal_email_users = '/^(?:'.implode('|', preg_split('/[\s;,]+/', preg_quote($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_force_personal_emails'], '/'))).'@/i';
|
584 |
+
|
585 |
+
foreach($fields_to_validate as $_field)
|
586 |
+
{
|
587 |
+
if(empty($_field['id'])) continue; // Not applicable.
|
588 |
+
$_field_type = !empty($_field['type']) ? $_field['type'] : '';
|
589 |
+
$_field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($_field['id']));
|
590 |
+
$_field_id_class = preg_replace('/_/', '-', $_field_var);
|
591 |
+
|
592 |
+
$_field_required = !empty($_field['required']) && $_field['required'] === 'yes';
|
593 |
+
$_field_expects = !empty($_field['expected']) ? $_field['expected'] : '';
|
594 |
+
$_field_label = !empty($_field['label']) ? $_field['label'] : ucwords(str_replace('_', ' ', $_field_var));
|
595 |
+
|
596 |
+
switch($_field_type)
|
597 |
+
{
|
598 |
+
case 'text':
|
599 |
+
case 'textarea':
|
600 |
+
case 'checkbox':
|
601 |
+
case 'pre_checkbox':
|
602 |
+
case 'radios':
|
603 |
+
case 'select':
|
604 |
+
if(isset($input[$_field_var]) && !is_string($input[$_field_var]))
|
605 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Invalid data type. Expecting a string.', 's2member-front', 's2member').'</em>';
|
606 |
+
break;
|
607 |
+
|
608 |
+
case 'checkboxes':
|
609 |
+
case 'selects':
|
610 |
+
if(isset($input[$_field_var]) && !is_array($input[$_field_var]))
|
611 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Invalid data type. Expecting an array.', 's2member-front', 's2member').'</em>';
|
612 |
+
break;
|
613 |
+
|
614 |
+
default: // Default case handler for best security.
|
615 |
+
if(isset($input[$_field_var]) && !is_string($input[$_field_var]))
|
616 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Invalid data type. Expecting a string.', 's2member-front', 's2member').'</em>';
|
617 |
+
break;
|
618 |
+
}
|
619 |
+
if(empty($errors[$_field_var]) && $_field_required) switch($_field_type)
|
620 |
+
{
|
621 |
+
case 'text':
|
622 |
+
case 'textarea':
|
623 |
+
if(!isset($input[$_field_var]) || !is_string($input[$_field_var]) || !isset($input[$_field_var][0]))
|
624 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('This is a required field, please try again.', 's2member-front', 's2member').'</em>';
|
625 |
+
break;
|
626 |
+
|
627 |
+
case 'checkbox':
|
628 |
+
case 'pre_checkbox':
|
629 |
+
if(!isset($input[$_field_var]) || !is_string($input[$_field_var]) || !isset($input[$_field_var][0]))
|
630 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Required. This box must be checked.', 's2member-front', 's2member').'</em>';
|
631 |
+
break;
|
632 |
+
|
633 |
+
case 'checkboxes':
|
634 |
+
if(!isset($input[$_field_var]) || !is_array($input[$_field_var]) || empty($input[$_field_var]))
|
635 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please check at least one of the boxes.', 's2member-front', 's2member').'</em>';
|
636 |
+
break;
|
637 |
+
|
638 |
+
case 'radios':
|
639 |
+
if(!isset($input[$_field_var]) || !is_string($input[$_field_var]))
|
640 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please select one of the options.', 's2member-front', 's2member').'</em>';
|
641 |
+
break;
|
642 |
+
|
643 |
+
case 'select':
|
644 |
+
if(!isset($input[$_field_var]) || !is_string($input[$_field_var]) || !isset($input[$_field_var][0]))
|
645 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please select one of the options.', 's2member-front', 's2member').'</em>';
|
646 |
+
break;
|
647 |
+
|
648 |
+
case 'selects':
|
649 |
+
if(!isset($input[$_field_var]) || !is_array($input[$_field_var]) || empty($input[$_field_var]))
|
650 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please select at least one of the options.', 's2member-front', 's2member').'</em>';
|
651 |
+
break;
|
652 |
+
|
653 |
+
default: // Default case handler for best security.
|
654 |
+
if(!isset($input[$_field_var]) || !is_string($input[$_field_var]) || !isset($input[$_field_var][0]))
|
655 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('This is a required field, please try again.', 's2member-front', 's2member').'</em>';
|
656 |
+
break;
|
657 |
+
}
|
658 |
+
if(empty($errors[$_field_var]) && $_field_expects) switch($_field_type)
|
659 |
+
{
|
660 |
+
case 'text':
|
661 |
+
case 'textarea':
|
662 |
+
if(isset($input[$_field_var]) && is_string($input[$_field_var]) && isset($input[$_field_var][0])) switch($_field_expects)
|
663 |
+
{
|
664 |
+
case 'numeric-wp-commas':
|
665 |
+
if(!preg_match('/^[0-9][0-9\.,]*$/', $input[$_field_var]))
|
666 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be numeric (with or without decimals, commas allowed).', 's2member-front', 's2member').'</em>';
|
667 |
+
break;
|
668 |
+
|
669 |
+
case 'numeric':
|
670 |
+
if(!preg_match('/^[0-9][0-9\.]*$/', $input[$_field_var]))
|
671 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be numeric (with or without decimals, no commas).', 's2member-front', 's2member').'</em>';
|
672 |
+
break;
|
673 |
+
|
674 |
+
case 'integer':
|
675 |
+
if(!preg_match('/^[0-9]+$/', $input[$_field_var]))
|
676 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be an integer (a whole number, without any decimals).', 's2member-front', 's2member').'</em>';
|
677 |
+
break;
|
678 |
+
|
679 |
+
case 'integer-gt-0':
|
680 |
+
if(!preg_match('/^[0-9]+$/', $input[$_field_var]) || $input[$_field_var] <= 0)
|
681 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be an integer > 0 (whole number, no decimals, greater than 0).', 's2member-front', 's2member').'</em>';
|
682 |
+
break;
|
683 |
+
|
684 |
+
case 'float':
|
685 |
+
if(!preg_match('/^[0-9\.]+$/', $input[$_field_var]) || !preg_match('/[0-9]/', $input[$_field_var]) || !preg_match('/\./', $input[$_field_var]))
|
686 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a float (floating point number, decimals required).', 's2member-front', 's2member').'</em>';
|
687 |
+
break;
|
688 |
+
|
689 |
+
case 'float-gt-0':
|
690 |
+
if(!preg_match('/^[0-9\.]+$/', $input[$_field_var]) || !preg_match('/[0-9]/', $input[$_field_var]) || !preg_match('/\./', $input[$_field_var]) || $input[$_field_var] <= 0)
|
691 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a float > 0 (floating point number, decimals required, greater than 0).', 's2member-front', 's2member').'</em>';
|
692 |
+
break;
|
693 |
+
|
694 |
+
case 'date':
|
695 |
+
if(!preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/', $input[$_field_var]))
|
696 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a date (required date format: dd/mm/yyyy).', 's2member-front', 's2member').'</em>';
|
697 |
+
break;
|
698 |
+
|
699 |
+
case 'email':
|
700 |
+
if(!is_email($input[$_field_var]))
|
701 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a valid email address.', 's2member-front', 's2member').'</em>';
|
702 |
+
|
703 |
+
else if($force_personal_emails && $non_personal_email_users && preg_match($non_personal_email_users, $input[$_field_var]))
|
704 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'.sprintf(_x('Please use a personal email address. Addresses like <%s@> are problematic.', 's2member-front', 's2member'), substr($input[$_field_var], 0, strpos($input[$_field_var], '@'))).'</em>';
|
705 |
+
break;
|
706 |
+
|
707 |
+
case 'url':
|
708 |
+
if(!preg_match('/^https?\:\/\/.+$/i', $input[$_field_var]))
|
709 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a full URL (starting with http or https).', 's2member-front', 's2member').'</em>';
|
710 |
+
break;
|
711 |
+
|
712 |
+
case 'domain':
|
713 |
+
if(!preg_match('/^[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*)*(?:\.[a-zA-Z][a-zA-Z0-9]+)?$/', $input[$_field_var]))
|
714 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a domain name (domain name only, without http).', 's2member-front', 's2member').'</em>';
|
715 |
+
break;
|
716 |
+
|
717 |
+
case 'phone':
|
718 |
+
if(!preg_match('/^[0-9 ()\-]+$/', $input[$_field_var]) || strlen(preg_replace('/[^0-9]+/', '', $input[$_field_var])) !== 10)
|
719 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a phone # (10 digits w/possible hyphens, spaces, brackets).', 's2member-front', 's2member').'</em>';
|
720 |
+
break;
|
721 |
+
|
722 |
+
case 'uszip':
|
723 |
+
if(!preg_match('/^[0-9]{5}(?:\-[0-9]{4})?$/', $input[$_field_var]))
|
724 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a US zipcode (5-9 digits w/ possible hyphen).', 's2member-front', 's2member').'</em>';
|
725 |
+
break;
|
726 |
+
|
727 |
+
case 'cazip':
|
728 |
+
if(!preg_match('/^[0-9A-Z]{3} ?[0-9A-Z]{3}$/i', $input[$_field_var]))
|
729 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a Canadian zipcode (6 alpha-numerics w/ possible space).', 's2member-front', 's2member').'</em>';
|
730 |
+
break;
|
731 |
+
|
732 |
+
case 'uczip':
|
733 |
+
if(!preg_match('/^[0-9]{5}(?:\-[0-9]{4})?$/', $input[$_field_var]) && !preg_match('/^[0-9A-Z]{3} ?[0-9A-Z]{3}$/i', $input[$_field_var]))
|
734 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Must be a zipcode (either a US or Canadian zipcode).', 's2member-front', 's2member').'</em>';
|
735 |
+
break;
|
736 |
+
|
737 |
+
default: // Handle others dynamically here.
|
738 |
+
|
739 |
+
if(preg_match('/^alphanumerics\-spaces\-punctuation\-[0-9]+(?:\-e)?$/', $_field_expects) && !preg_match('/^[a-z 0-9\/\\\\,.?:;"\'{}[\]\^|+=_()*&%$#@!`~\-]+$/i', $input[$_field_var]))
|
740 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please use alphanumerics, spaces & punctuation only.', 's2member-front', 's2member').'</em>';
|
741 |
+
|
742 |
+
else if(preg_match('/^alphanumerics\-spaces\-[0-9]+(?:\-e)?$/', $_field_expects) && !preg_match('/^[a-z 0-9]+$/i', $input[$_field_var]))
|
743 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please use alphanumerics & spaces only.', 's2member-front', 's2member').'</em>';
|
744 |
+
|
745 |
+
else if(preg_match('/^alphanumerics\-punctuation\-[0-9]+(?:\-e)?$/', $_field_expects) && !preg_match('/^[a-z0-9\/\\\\,.?:;"\'{}[\]\^|+=_()*&%$#@!`~\-]+$/i', $input[$_field_var]))
|
746 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please use alphanumerics & punctuation only (no spaces).', 's2member-front', 's2member').'</em>';
|
747 |
+
|
748 |
+
else if(preg_match('/^alphanumerics\-[0-9]+(?:\-e)?$/', $_field_expects) && !preg_match('/^[a-z0-9]+$/i', $input[$_field_var]))
|
749 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please use alphanumerics only (no spaces/punctuation).', 's2member-front', 's2member').'</em>';
|
750 |
+
|
751 |
+
else if(preg_match('/^alphabetics\-[0-9]+(?:\-e)?$/', $_field_expects) && !preg_match('/^[a-z]+$/i', $input[$_field_var]))
|
752 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please use alphabetics only (no digits/spaces/punctuation).', 's2member-front', 's2member').'</em>';
|
753 |
+
|
754 |
+
else if(preg_match('/^numerics\-[0-9]+(?:\-e)?$/', $_field_expects) && !preg_match('/^[0-9]+$/i', $input[$_field_var]))
|
755 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'._x('Please use numeric digits only.', 's2member-front', 's2member').'</em>';
|
756 |
+
|
757 |
+
else if(preg_match('/^(?:any|alphanumerics\-spaces\-punctuation|alphanumerics\-spaces|alphanumerics\-punctuation|alphanumerics|alphabetics|numerics)\-[0-9]+(?:\-e)?$/', $_field_expects))
|
758 |
+
{
|
759 |
+
$_field_expects_split = explode('-', $_field_expects);
|
760 |
+
$_field_expects_length = (integer)$_field_expects_split[1];
|
761 |
+
$_field_expects_exact_length = !empty($_field_expects_split[2]) && $_field_expects_split[2] === 'e';
|
762 |
+
|
763 |
+
if($_field_expects_exact_length && strlen($input[$_field_var]) !== $_field_expects_length)
|
764 |
+
{
|
765 |
+
if($_field_expects_split[0] === 'numerics')
|
766 |
+
{
|
767 |
+
if($_field_expects_length === 1)
|
768 |
+
$_field_expects_digits_chars = _x('digit', 's2member-front', 's2member');
|
769 |
+
else $_field_expects_digits_chars = _x('digits', 's2member-front', 's2member');
|
770 |
+
}
|
771 |
+
else if($_field_expects_length === 1)
|
772 |
+
$_field_expects_digits_chars = _x('character', 's2member-front', 's2member');
|
773 |
+
else $_field_expects_digits_chars = _x('characters', 's2member-front', 's2member');
|
774 |
+
|
775 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'.sprintf(_x('Must be exactly %s %s.', 's2member-front', 's2member'), $_field_expects_length, $_field_expects_digits_chars).'</em>';
|
776 |
+
}
|
777 |
+
else if(strlen($input[$_field_var]) < $_field_expects_length)
|
778 |
+
{
|
779 |
+
if($_field_expects_split[0] === 'numerics')
|
780 |
+
{
|
781 |
+
if($_field_expects_length === 1)
|
782 |
+
$_field_expects_digits_chars = _x('digit', 's2member-front', 's2member');
|
783 |
+
else $_field_expects_digits_chars = _x('digits', 's2member-front', 's2member');
|
784 |
+
}
|
785 |
+
else if($_field_expects_length === 1)
|
786 |
+
$_field_expects_digits_chars = _x('character', 's2member-front', 's2member');
|
787 |
+
else $_field_expects_digits_chars = _x('characters', 's2member-front', 's2member');
|
788 |
+
|
789 |
+
$errors[$_field_var] = '<strong>'.$_field_label.'</strong><br /> <em>'.sprintf(_x('Must be at least %s %s.', 's2member-front', 's2member'), $_field_expects_length, $_field_expects_digits_chars).'</em>';
|
790 |
+
}
|
791 |
+
}
|
792 |
+
break;
|
793 |
+
}
|
794 |
+
break;
|
795 |
+
}
|
796 |
+
}
|
797 |
+
unset($_field, $_field_type, $_field_var, $_field_id_class, $_field_required, $_field_label, $_field_expects, $_field_expects_split, $_field_expects_length, $_field_expects_exact_length, $_field_expects_digits_chars);
|
798 |
+
|
799 |
+
return apply_filters('c_ws_plugin__s2member_custom_reg_field_validation_errors', $errors, get_defined_vars());
|
800 |
+
}
|
801 |
}
|
802 |
+
}
|
|
includes/classes/profile-mods-4bp-in.inc.php
CHANGED
@@ -56,6 +56,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_mods_4bp_in"))
|
|
56 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
57 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "profile"))
|
58 |
{
|
|
|
59 |
$_existing_fields = get_user_option ("s2member_custom_fields", $user_id);
|
60 |
|
61 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
@@ -70,7 +71,13 @@ if (!class_exists ("c_ws_plugin__s2member_profile_mods_4bp_in"))
|
|
70 |
else // Else ``unset()``.
|
71 |
unset($fields[$field_var]);
|
72 |
}
|
73 |
-
else if (
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
{
|
75 |
if (isset ($_existing_fields[$field_var]) && ((is_array ($_existing_fields[$field_var]) && !empty ($_existing_fields[$field_var])) || (is_string ($_existing_fields[$field_var]) && strlen ($_existing_fields[$field_var]))))
|
76 |
$fields[$field_var] = $_existing_fields[$field_var];
|
@@ -79,7 +86,9 @@ if (!class_exists ("c_ws_plugin__s2member_profile_mods_4bp_in"))
|
|
79 |
}
|
80 |
else if (isset ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))
|
81 |
{
|
82 |
-
if ((is_array ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && !empty ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))
|
|
|
|
|
83 |
$fields[$field_var] = $_p["ws_plugin__s2member_profile_4bp_" . $field_var];
|
84 |
else // Else ``unset()``.
|
85 |
unset($fields[$field_var]);
|
56 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
57 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "profile"))
|
58 |
{
|
59 |
+
$fields = array(); // Initialize the array of fields.
|
60 |
$_existing_fields = get_user_option ("s2member_custom_fields", $user_id);
|
61 |
|
62 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
71 |
else // Else ``unset()``.
|
72 |
unset($fields[$field_var]);
|
73 |
}
|
74 |
+
else if ( // If the field is required but missing; or it was provided but invalid...
|
75 |
+
($field["required"] === "yes" && (!isset ($_p["ws_plugin__s2member_profile_4bp_" . $field_var])
|
76 |
+
|| (!is_array ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && !is_string ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))
|
77 |
+
|| (is_array ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && empty ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))
|
78 |
+
|| (is_string ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && !strlen ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))))
|
79 |
+
|| (isset ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && c_ws_plugin__s2member_custom_reg_fields::validation_errors(array($field_var => $_p["ws_plugin__s2member_profile_4bp_" . $field_var]), array($field)))
|
80 |
+
)
|
81 |
{
|
82 |
if (isset ($_existing_fields[$field_var]) && ((is_array ($_existing_fields[$field_var]) && !empty ($_existing_fields[$field_var])) || (is_string ($_existing_fields[$field_var]) && strlen ($_existing_fields[$field_var]))))
|
83 |
$fields[$field_var] = $_existing_fields[$field_var];
|
86 |
}
|
87 |
else if (isset ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))
|
88 |
{
|
89 |
+
if (((is_array ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && !empty ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]))
|
90 |
+
|| (is_string ($_p["ws_plugin__s2member_profile_4bp_" . $field_var]) && strlen ($_p["ws_plugin__s2member_profile_4bp_" . $field_var])))
|
91 |
+
&& !c_ws_plugin__s2member_custom_reg_fields::validation_errors(array($field_var => $_p["ws_plugin__s2member_profile_4bp_" . $field_var]), array($field)))
|
92 |
$fields[$field_var] = $_p["ws_plugin__s2member_profile_4bp_" . $field_var];
|
93 |
else // Else ``unset()``.
|
94 |
unset($fields[$field_var]);
|
includes/classes/profile-mods-in.inc.php
CHANGED
@@ -78,6 +78,7 @@ if (!class_exists ("c_ws_plugin__s2member_profile_mods_in"))
|
|
78 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
79 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "profile"))
|
80 |
{
|
|
|
81 |
$_existing_fields = get_user_option ("s2member_custom_fields", $user_id);
|
82 |
|
83 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
@@ -92,7 +93,13 @@ if (!class_exists ("c_ws_plugin__s2member_profile_mods_in"))
|
|
92 |
else // Else ``unset()``.
|
93 |
unset($fields[$field_var]);
|
94 |
}
|
95 |
-
else if (
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
{
|
97 |
if (isset ($_existing_fields[$field_var]) && ((is_array ($_existing_fields[$field_var]) && !empty ($_existing_fields[$field_var])) || (is_string ($_existing_fields[$field_var]) && strlen ($_existing_fields[$field_var]))))
|
98 |
$fields[$field_var] = $_existing_fields[$field_var];
|
@@ -101,7 +108,9 @@ if (!class_exists ("c_ws_plugin__s2member_profile_mods_in"))
|
|
101 |
}
|
102 |
else if (isset ($_p["ws_plugin__s2member_profile_" . $field_var]))
|
103 |
{
|
104 |
-
if ((is_array ($_p["ws_plugin__s2member_profile_" . $field_var]) && !empty ($_p["ws_plugin__s2member_profile_" . $field_var]))
|
|
|
|
|
105 |
$fields[$field_var] = $_p["ws_plugin__s2member_profile_" . $field_var];
|
106 |
else // Else ``unset()``.
|
107 |
unset($fields[$field_var]);
|
78 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
79 |
if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("auto-detection", "profile"))
|
80 |
{
|
81 |
+
$fields = array(); // Initialize the array of fields.
|
82 |
$_existing_fields = get_user_option ("s2member_custom_fields", $user_id);
|
83 |
|
84 |
foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
|
93 |
else // Else ``unset()``.
|
94 |
unset($fields[$field_var]);
|
95 |
}
|
96 |
+
else if ( // If the field is required but missing; or it was provided but invalid...
|
97 |
+
($field["required"] === "yes" && (!isset ($_p["ws_plugin__s2member_profile_" . $field_var])
|
98 |
+
|| (!is_array ($_p["ws_plugin__s2member_profile_" . $field_var]) && !is_string ($_p["ws_plugin__s2member_profile_" . $field_var]))
|
99 |
+
|| (is_array ($_p["ws_plugin__s2member_profile_" . $field_var]) && empty ($_p["ws_plugin__s2member_profile_" . $field_var]))
|
100 |
+
|| (is_string ($_p["ws_plugin__s2member_profile_" . $field_var]) && !strlen ($_p["ws_plugin__s2member_profile_" . $field_var]))))
|
101 |
+
|| (isset ($_p["ws_plugin__s2member_profile_" . $field_var]) && c_ws_plugin__s2member_custom_reg_fields::validation_errors(array($field_var => $_p["ws_plugin__s2member_profile_" . $field_var]), array($field)))
|
102 |
+
)
|
103 |
{
|
104 |
if (isset ($_existing_fields[$field_var]) && ((is_array ($_existing_fields[$field_var]) && !empty ($_existing_fields[$field_var])) || (is_string ($_existing_fields[$field_var]) && strlen ($_existing_fields[$field_var]))))
|
105 |
$fields[$field_var] = $_existing_fields[$field_var];
|
108 |
}
|
109 |
else if (isset ($_p["ws_plugin__s2member_profile_" . $field_var]))
|
110 |
{
|
111 |
+
if (((is_array ($_p["ws_plugin__s2member_profile_" . $field_var]) && !empty ($_p["ws_plugin__s2member_profile_" . $field_var]))
|
112 |
+
|| (is_string ($_p["ws_plugin__s2member_profile_" . $field_var]) && strlen ($_p["ws_plugin__s2member_profile_" . $field_var])))
|
113 |
+
&& !c_ws_plugin__s2member_custom_reg_fields::validation_errors(array($field_var => $_p["ws_plugin__s2member_profile_" . $field_var]), array($field)))
|
114 |
$fields[$field_var] = $_p["ws_plugin__s2member_profile_" . $field_var];
|
115 |
else // Else ``unset()``.
|
116 |
unset($fields[$field_var]);
|
includes/classes/registration-times.inc.php
CHANGED
@@ -18,228 +18,95 @@ if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
|
|
18 |
exit ("Do not access this file directly.");
|
19 |
|
20 |
if(!class_exists("c_ws_plugin__s2member_registration_times"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
{
|
22 |
/**
|
23 |
-
* Registration Times.
|
24 |
*
|
25 |
* @package s2Member\Registrations
|
26 |
* @since 3.5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
*/
|
28 |
-
|
29 |
{
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
*/
|
43 |
-
public static function synchronize_paid_reg_times($user_id = FALSE, $role = FALSE)
|
44 |
-
{
|
45 |
-
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
46 |
-
do_action("ws_plugin__s2member_before_synchronize_paid_reg_times", get_defined_vars());
|
47 |
-
unset($__refs, $__v);
|
48 |
-
|
49 |
-
if($user_id && is_object($user = new WP_User ($user_id)) && !empty ($user->ID) && ($level = c_ws_plugin__s2member_user_access::user_access_level($user)) > 0)
|
50 |
-
{
|
51 |
-
$pr_times = get_user_option("s2member_paid_registration_times", $user_id);
|
52 |
-
$pr_times["level"] = (empty ($pr_times["level"])) ? time() : $pr_times["level"];
|
53 |
-
$pr_times["level".$level] = (empty ($pr_times["level".$level])) ? time() : $pr_times["level".$level];
|
54 |
-
update_user_option($user_id, "s2member_paid_registration_times", $pr_times); // Update now.
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Retrieves a Registration Time.
|
60 |
-
*
|
61 |
-
* @package s2Member\Registrations
|
62 |
-
* @since 3.5
|
63 |
-
*
|
64 |
-
* @param int|str $user_id Optional. A numeric WordPress User ID. Defaults to the current User, if logged-in.
|
65 |
-
*
|
66 |
-
* @return int A Unix timestamp, indicating Registration Time, else `0` on failure.
|
67 |
-
*/
|
68 |
-
public static function registration_time($user_id = FALSE)
|
69 |
-
{
|
70 |
-
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
71 |
-
do_action("ws_plugin__s2member_before_registration_time", get_defined_vars());
|
72 |
-
unset($__refs, $__v);
|
73 |
-
|
74 |
-
$user = ($user_id) ? new WP_User ($user_id) : ((is_user_logged_in()) ? wp_get_current_user() : FALSE);
|
75 |
-
|
76 |
-
if(is_object($user) && !empty ($user->ID) && ($user_id = $user->ID) && $user->user_registered)
|
77 |
-
{
|
78 |
-
return apply_filters("ws_plugin__s2member_registration_time", strtotime($user->user_registered), get_defined_vars());
|
79 |
-
}
|
80 |
-
else // Else we return a default value of 0, because there is insufficient data.
|
81 |
-
return apply_filters("ws_plugin__s2member_registration_time", 0, get_defined_vars());
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Retrieves a Paid Registration Time.
|
86 |
-
*
|
87 |
-
* @package s2Member\Registrations
|
88 |
-
* @since 3.5
|
89 |
-
*
|
90 |
-
* @param int|str $level Optional. Defaults to the first/initial Paid Registration Time, regardless of Level#.
|
91 |
-
* @param int|str $user_id Optional. A numeric WordPress User ID. Defaults to the current User, if logged-in.
|
92 |
-
*
|
93 |
-
* @return int A Unix timestamp, indicating Paid Registration Time, else `0` on failure.
|
94 |
-
*/
|
95 |
-
public static function paid_registration_time($level = FALSE, $user_id = FALSE)
|
96 |
-
{
|
97 |
-
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
98 |
-
do_action("ws_plugin__s2member_before_paid_registration_time", get_defined_vars());
|
99 |
-
unset($__refs, $__v);
|
100 |
-
|
101 |
-
$level = (!is_numeric($level)) ? "level" : "level".preg_replace("/[^0-9]/", "", (string)$level);
|
102 |
-
$user = ($user_id) ? new WP_User ($user_id) : ((is_user_logged_in()) ? wp_get_current_user() : FALSE);
|
103 |
-
|
104 |
-
if($level && is_object($user) && !empty ($user->ID) && ($user_id = $user->ID) && is_array($pr_times = get_user_option("s2member_paid_registration_times", $user_id)))
|
105 |
-
{
|
106 |
-
return apply_filters("ws_plugin__s2member_paid_registration_time", ((isset ($pr_times[$level])) ? (int)$pr_times[$level] : 0), get_defined_vars());
|
107 |
-
}
|
108 |
-
else // Else we return a default value of `0`, because there is insufficient data.
|
109 |
-
return apply_filters("ws_plugin__s2member_paid_registration_time", 0, get_defined_vars());
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Logs capability times.
|
114 |
-
*
|
115 |
-
* @package s2Member\Registrations
|
116 |
-
* @since 140418
|
117 |
-
*
|
118 |
-
* @attaches-to ``add_action("update_user_meta")``
|
119 |
-
*
|
120 |
-
* @param integer $meta_id Meta row ID in database.
|
121 |
-
* @param integer $object_id User ID.
|
122 |
-
* @param string $meta_key Meta key.
|
123 |
-
* @param mixed $meta_value Meta value.
|
124 |
-
*/
|
125 |
-
public static function log_capability_time($meta_id, $object_id, $meta_key, $meta_value)
|
126 |
-
{
|
127 |
-
$wpdb = $GLOBALS["wpdb"];
|
128 |
-
/** @var $wpdb \wpdb For IDEs. */
|
129 |
-
|
130 |
-
if(strpos($meta_key, "capabilities") === FALSE
|
131 |
-
|| $meta_key !== $wpdb->get_blog_prefix()."capabilities"
|
132 |
-
) return; // Not updating caps.
|
133 |
-
|
134 |
-
/*
|
135 |
-
* NOTE: $prev_caps (and $new_caps) both include individual non-role caps (e.g. `access_s2member_ccap_x`).
|
136 |
-
* These arrays ALSO include role names (minus role-specific caps); e.g. `administrator` or `s2member_level1`;
|
137 |
-
* but NOT `delete_users` or `access_s2member_leveln`.
|
138 |
-
*/
|
139 |
-
|
140 |
-
$user_id = $object_id;
|
141 |
-
if(!is_array($new_caps = $meta_value))
|
142 |
-
$new_caps = array(); // All caps removed.
|
143 |
-
|
144 |
-
$user = new WP_User($user_id);
|
145 |
-
if(!$user->ID || !$user->exists())
|
146 |
-
return; // Not a valid user.
|
147 |
-
$prev_caps = $user->caps;
|
148 |
-
|
149 |
-
/*
|
150 |
-
* NOTE: we iterate these arrays so that it's possible to properly analzye boolean flags.
|
151 |
-
* WordPress can enable/disable a cap by adding/removing it; or by flagging it as TRUE|FALSE.
|
152 |
-
*/
|
153 |
-
$caps_added = $caps_removed = array();
|
154 |
-
|
155 |
-
foreach($new_caps as $_new_cap => $_is_enabled)
|
156 |
-
if($_is_enabled && (!array_key_exists($_new_cap, $prev_caps) || !$prev_caps[$_new_cap]))
|
157 |
-
$caps_added[] = $_new_cap;
|
158 |
-
|
159 |
-
foreach($prev_caps as $_prev_cap => $_was_enabled)
|
160 |
-
if(!array_key_exists($_prev_cap, $new_caps) || (!$new_caps[$_prev_cap] && $_was_enabled))
|
161 |
-
$caps_removed[] = $_prev_cap;
|
162 |
-
|
163 |
-
unset($_new_cap, $_is_enabled, $_prev_cap, $_was_enabled);
|
164 |
-
|
165 |
-
/*
|
166 |
-
* Below, we log CAPS that begin with:
|
167 |
-
*
|
168 |
-
* `s2member_level`
|
169 |
-
* or `access_s2member_ccap_`
|
170 |
-
*
|
171 |
-
* This makes it possible for us to get access times for all s2Member Levels, and for CCAPS too.
|
172 |
-
*/
|
173 |
-
foreach(array_unique($caps_added) as $_cap)
|
174 |
-
if(strpos($_cap, "s2member_level") === 0 || strpos($_cap, "access_s2member_ccap_") === 0)
|
175 |
-
c_ws_plugin__s2member_registration_times::_log_capability_time($user_id, $_cap);
|
176 |
-
|
177 |
-
foreach(array_unique($caps_removed) as $_cap)
|
178 |
-
if(strpos($_cap, "s2member_level") === 0 || strpos($_cap, "access_s2member_ccap_") === 0)
|
179 |
-
c_ws_plugin__s2member_registration_times::_log_capability_time($user_id, $_cap, TRUE);
|
180 |
-
|
181 |
-
unset($_cap); // Housekeeping.
|
182 |
-
}
|
183 |
-
|
184 |
-
/**
|
185 |
-
* Records access times.
|
186 |
-
*
|
187 |
-
* @package s2Member\Registrations
|
188 |
-
* @since 140418
|
189 |
-
*
|
190 |
-
* @param integer $user_id WP user ID.
|
191 |
-
* @param integer $access_cap s2Member-related capability.
|
192 |
-
* @param boolean $removed Defaults to a FALSE value. Flag as TRUE if `$access_cap` is being removed instead of being added.
|
193 |
-
*/
|
194 |
-
public static function _log_capability_time($user_id, $access_cap, $removed = FALSE)
|
195 |
-
{
|
196 |
-
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
197 |
-
do_action("ws_plugin__s2member_before_log_capability_time", get_defined_vars());
|
198 |
-
unset($__refs, $__v);
|
199 |
-
|
200 |
-
if($user_id && $access_cap)
|
201 |
-
{
|
202 |
-
$user_id = (integer)$user_id;
|
203 |
-
$ac_times = get_user_option("s2member_capability_times", $user_id);
|
204 |
-
$ac_times[time()] = ($removed ? "-" : "").$access_cap;
|
205 |
-
update_user_option($user_id, "s2member_capability_times", $ac_times);
|
206 |
-
|
207 |
-
do_action("ws_plugin__s2member_during_log_capability_time", get_defined_vars());
|
208 |
-
}
|
209 |
-
do_action("ws_plugin__s2member_after_log_capability_time", get_defined_vars());
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Gets access capability times.
|
214 |
-
*
|
215 |
-
* @package s2Member\Registrations
|
216 |
-
* @since 140418
|
217 |
-
*
|
218 |
-
* @param integer $user_id WP User ID.
|
219 |
-
* @param boolean $access_caps Optional. An array of access capabilities to get the times for.
|
220 |
-
* If removal times are desired, you should add a `-` prefix.
|
221 |
-
*
|
222 |
-
* @return array An array of all access capability times.
|
223 |
-
* Keys are UTC timestamps, values are the capabilities (including `-` prefixed removals).
|
224 |
-
*/
|
225 |
-
public static function get_capability_times($user_id, $access_caps = FALSE)
|
226 |
-
{
|
227 |
-
if(($user_id = (integer)$user_id))
|
228 |
-
{
|
229 |
-
$ac_times = get_user_option("s2member_capability_times", $user_id);
|
230 |
-
|
231 |
-
if(!is_array($ac_times))
|
232 |
-
$ac_times = array();
|
233 |
-
|
234 |
-
else if($access_caps)
|
235 |
-
$ac_times = array_intersect($ac_times, (array)$access_caps);
|
236 |
|
237 |
-
|
238 |
-
|
239 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
|
241 |
-
|
242 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
243 |
}
|
244 |
}
|
245 |
-
|
18 |
exit ("Do not access this file directly.");
|
19 |
|
20 |
if(!class_exists("c_ws_plugin__s2member_registration_times"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* Registration Times.
|
24 |
+
*
|
25 |
+
* @package s2Member\Registrations
|
26 |
+
* @since 3.5
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_registration_times
|
29 |
{
|
30 |
/**
|
31 |
+
* Synchronizes Paid Registration Times with Role assignments.
|
32 |
*
|
33 |
* @package s2Member\Registrations
|
34 |
* @since 3.5
|
35 |
+
*
|
36 |
+
* @attaches-to ``add_action("set_user_role");``
|
37 |
+
*
|
38 |
+
* @param integer|string $user_id A numeric WordPress User ID should be passed in by the Action Hook.
|
39 |
+
* @param string $role A WordPress Role ID/Name should be passed in by the Action Hook.
|
40 |
+
*
|
41 |
+
* @return null
|
42 |
*/
|
43 |
+
public static function synchronize_paid_reg_times($user_id = FALSE, $role = FALSE)
|
44 |
{
|
45 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
46 |
+
do_action("ws_plugin__s2member_before_synchronize_paid_reg_times", get_defined_vars());
|
47 |
+
unset($__refs, $__v);
|
48 |
+
|
49 |
+
if($user_id && is_object($user = new WP_User ($user_id)) && !empty ($user->ID) && ($level = c_ws_plugin__s2member_user_access::user_access_level($user)) > 0)
|
50 |
+
{
|
51 |
+
$pr_times = get_user_option("s2member_paid_registration_times", $user_id);
|
52 |
+
$pr_times["level"] = (empty ($pr_times["level"])) ? time() : $pr_times["level"];
|
53 |
+
$pr_times["level".$level] = (empty ($pr_times["level".$level])) ? time() : $pr_times["level".$level];
|
54 |
+
update_user_option($user_id, "s2member_paid_registration_times", $pr_times); // Update now.
|
55 |
+
}
|
56 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
+
/**
|
59 |
+
* Retrieves a Registration Time.
|
60 |
+
*
|
61 |
+
* @package s2Member\Registrations
|
62 |
+
* @since 3.5
|
63 |
+
*
|
64 |
+
* @param integer|string $user_id Optional. A numeric WordPress User ID. Defaults to the current User, if logged-in.
|
65 |
+
*
|
66 |
+
* @return int A Unix timestamp, indicating Registration Time, else `0` on failure.
|
67 |
+
*/
|
68 |
+
public static function registration_time($user_id = FALSE)
|
69 |
+
{
|
70 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
71 |
+
do_action("ws_plugin__s2member_before_registration_time", get_defined_vars());
|
72 |
+
unset($__refs, $__v);
|
73 |
+
|
74 |
+
$user = ($user_id) ? new WP_User ($user_id) : ((is_user_logged_in()) ? wp_get_current_user() : FALSE);
|
75 |
+
|
76 |
+
if(is_object($user) && !empty ($user->ID) && ($user_id = $user->ID) && $user->user_registered)
|
77 |
+
{
|
78 |
+
return apply_filters("ws_plugin__s2member_registration_time", strtotime($user->user_registered), get_defined_vars());
|
79 |
+
}
|
80 |
+
else // Else we return a default value of 0, because there is insufficient data.
|
81 |
+
return apply_filters("ws_plugin__s2member_registration_time", 0, get_defined_vars());
|
82 |
+
}
|
83 |
|
84 |
+
/**
|
85 |
+
* Retrieves a Paid Registration Time.
|
86 |
+
*
|
87 |
+
* @package s2Member\Registrations
|
88 |
+
* @since 3.5
|
89 |
+
*
|
90 |
+
* @param int|string $level Optional. Defaults to the first/initial Paid Registration Time, regardless of Level#.
|
91 |
+
* @param int|string $user_id Optional. A numeric WordPress User ID. Defaults to the current User, if logged-in.
|
92 |
+
*
|
93 |
+
* @return int A Unix timestamp, indicating Paid Registration Time, else `0` on failure.
|
94 |
+
*/
|
95 |
+
public static function paid_registration_time($level = FALSE, $user_id = FALSE)
|
96 |
+
{
|
97 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
98 |
+
do_action("ws_plugin__s2member_before_paid_registration_time", get_defined_vars());
|
99 |
+
unset($__refs, $__v);
|
100 |
+
|
101 |
+
$level = (!is_numeric($level)) ? "level" : "level".preg_replace("/[^0-9]/", "", (string)$level);
|
102 |
+
$user = ($user_id) ? new WP_User ($user_id) : ((is_user_logged_in()) ? wp_get_current_user() : FALSE);
|
103 |
+
|
104 |
+
if($level && is_object($user) && !empty ($user->ID) && ($user_id = $user->ID) && is_array($pr_times = get_user_option("s2member_paid_registration_times", $user_id)))
|
105 |
+
{
|
106 |
+
return apply_filters("ws_plugin__s2member_paid_registration_time", ((isset ($pr_times[$level])) ? (int)$pr_times[$level] : 0), get_defined_vars());
|
107 |
+
}
|
108 |
+
else // Else we return a default value of `0`, because there is insufficient data.
|
109 |
+
return apply_filters("ws_plugin__s2member_paid_registration_time", 0, get_defined_vars());
|
110 |
}
|
111 |
}
|
112 |
+
}
|
includes/classes/registrations.inc.php
CHANGED
@@ -38,8 +38,8 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
38 |
*
|
39 |
* @attaches-to ``add_filter("random_password");``
|
40 |
*
|
41 |
-
* @param
|
42 |
-
* @return
|
43 |
*/
|
44 |
public static function generate_password ($password = FALSE)
|
45 |
{
|
@@ -60,9 +60,83 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
60 |
$password = $custom; // Yes, use s2Member custom Password supplied by Remote Op.
|
61 |
}
|
62 |
}
|
63 |
-
|
64 |
return apply_filters ("ws_plugin__s2member_generate_password", ($GLOBALS["ws_plugin__s2member_generate_password_return"] = $password), get_defined_vars ());
|
65 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
/**
|
67 |
* Filters Multisite User validation.
|
68 |
*
|
@@ -86,15 +160,17 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
86 |
if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
|
87 |
if (!is_admin () && isset ($result["user_name"], $result["user_email"], $result["errors"]) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", (string)$_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())))
|
88 |
{
|
89 |
-
|
|
|
90 |
if (c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($result["user_name"], $result["user_email"]))
|
91 |
-
|
92 |
-
|
|
|
|
|
93 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
94 |
do_action ("ws_plugin__s2member_during_ms_validate_user_signup", get_defined_vars ());
|
95 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
96 |
}
|
97 |
-
|
98 |
return apply_filters ("ws_plugin__s2member_ms_validate_user_signup", $result, get_defined_vars ());
|
99 |
}
|
100 |
/**
|
@@ -107,8 +183,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
107 |
* @since 3.5
|
108 |
*
|
109 |
* @attaches-to ``add_filter("signup_hidden_fields");``
|
110 |
-
*
|
111 |
-
* @return null
|
112 |
*/
|
113 |
public static function ms_process_signup_hidden_fields ()
|
114 |
{
|
@@ -124,10 +198,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
124 |
|
125 |
do_action ("ws_plugin__s2member_during_ms_process_signup_hidden_fields", get_defined_vars ());
|
126 |
}
|
127 |
-
|
128 |
do_action ("ws_plugin__s2member_after_ms_process_signup_hidden_fields", get_defined_vars ());
|
129 |
-
|
130 |
-
return /* Return for uniformity. */;
|
131 |
}
|
132 |
/**
|
133 |
* Adds Customs Fields to ``$meta`` on signup.
|
@@ -167,7 +238,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
167 |
if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
|
168 |
$meta["s2member_ms_signup_meta"][$key] = maybe_unserialize ($value);
|
169 |
}
|
170 |
-
|
171 |
return apply_filters ("ws_plugin__s2member_ms_process_signup_meta", $meta, get_defined_vars ());
|
172 |
}
|
173 |
/**
|
@@ -184,9 +254,9 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
184 |
*
|
185 |
* @attaches-to ``add_filter("_wpmu_activate_existing_error_");``
|
186 |
*
|
187 |
-
* @param
|
188 |
* @param array $vars Expects the defined variables from the scope of the calling Filter.
|
189 |
-
* @return
|
190 |
* Otherwise we return an array of User details for continued processing by the caller.
|
191 |
*/
|
192 |
public static function ms_activate_existing_user ($_error = FALSE, $vars = FALSE)
|
@@ -212,7 +282,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
212 |
return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", array ("user_id" => $user_id, "password" => $password, "meta" => $meta), get_defined_vars ());
|
213 |
}
|
214 |
}
|
215 |
-
|
216 |
return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", $_error, get_defined_vars ()); // Else, return the standardized error.
|
217 |
}
|
218 |
/**
|
@@ -227,14 +296,13 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
227 |
*
|
228 |
* @attaches-to ``add_action("wpmu_activate_user");``
|
229 |
*
|
230 |
-
* @param int|
|
231 |
-
* @param
|
232 |
* @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
|
233 |
-
* @return null
|
234 |
*/
|
235 |
public static function configure_user_on_ms_user_activation ($user_id = FALSE, $password = FALSE, $meta = FALSE)
|
236 |
{
|
237 |
-
global $pagenow; //
|
238 |
|
239 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
240 |
do_action ("ws_plugin__s2member_before_configure_user_on_ms_user_activation", get_defined_vars ());
|
@@ -248,8 +316,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
248 |
}
|
249 |
|
250 |
do_action ("ws_plugin__s2member_after_configure_user_on_ms_user_activation", get_defined_vars ());
|
251 |
-
|
252 |
-
return /* Return for uniformity. */;
|
253 |
}
|
254 |
/**
|
255 |
* Configures new Users on a Multisite Network installation.
|
@@ -266,12 +332,11 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
266 |
*
|
267 |
* @attaches-to ``add_action("wpmu_activate_blog");``
|
268 |
*
|
269 |
-
* @param int|
|
270 |
-
* @param int|
|
271 |
-
* @param
|
272 |
-
* @param
|
273 |
* @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
|
274 |
-
* @return null
|
275 |
*/
|
276 |
public static function configure_user_on_ms_blog_activation ($blog_id = FALSE, $user_id = FALSE, $password = FALSE, $title = FALSE, $meta = FALSE)
|
277 |
{
|
@@ -285,10 +350,7 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
285 |
c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"]) && is_array ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : array ()));
|
286 |
delete_user_meta ($user_id, "s2member_ms_signup_meta");
|
287 |
}
|
288 |
-
|
289 |
do_action ("ws_plugin__s2member_after_configure_user_on_ms_blog_activation", get_defined_vars ());
|
290 |
-
|
291 |
-
return /* Return for uniformity. */;
|
292 |
}
|
293 |
/**
|
294 |
* Intersects with ``register_new_user()`` through s2Member's Multisite Networking patch.
|
@@ -303,10 +365,10 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
303 |
*
|
304 |
* @attaches-to ``add_filter("registration_errors");``
|
305 |
*
|
306 |
-
* @param
|
307 |
-
* @param
|
308 |
-
* @param
|
309 |
-
* @return
|
310 |
*/
|
311 |
public static function ms_register_existing_user ($errors = FALSE, $user_login = FALSE, $user_email = FALSE)
|
312 |
{
|
@@ -354,10 +416,10 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
354 |
* @package s2Member\Registrations
|
355 |
* @since 3.5
|
356 |
*
|
357 |
-
* @param
|
358 |
-
* @param
|
359 |
-
* @param
|
360 |
-
* @param int|
|
361 |
* If unspecified, a lookup is performed with ``$user_login`` and ``$user_email``.
|
362 |
* @return int|false Returns numeric ``$user_id`` on success, else false on failure.
|
363 |
*/
|
@@ -381,7 +443,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
381 |
return apply_filters ("ws_plugin__s2member_ms_create_existing_user", $user_id, get_defined_vars ());
|
382 |
}
|
383 |
}
|
384 |
-
|
385 |
return apply_filters ("ws_plugin__s2member_ms_create_existing_user", false, get_defined_vars ());
|
386 |
}
|
387 |
/**
|
@@ -398,12 +459,11 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
398 |
*
|
399 |
* @attaches-to ``add_action("user_register");``
|
400 |
*
|
401 |
-
* @param int|
|
402 |
-
* @param
|
403 |
* @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member.
|
404 |
-
* @return null No return value. Returns `null` in possible every scenario.
|
405 |
*
|
406 |
-
* @
|
407 |
*/
|
408 |
public static function configure_user_registration ($user_id = FALSE, $password = FALSE, $meta = FALSE)
|
409 |
{
|
@@ -1043,9 +1103,6 @@ if (!class_exists ("c_ws_plugin__s2member_registrations"))
|
|
1043 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
1044 |
do_action ("ws_plugin__s2member_after_configure_user_registration", get_defined_vars ());
|
1045 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
1046 |
-
|
1047 |
-
return /* Return for uniformity. */;
|
1048 |
}
|
1049 |
}
|
1050 |
-
}
|
1051 |
-
?>
|
38 |
*
|
39 |
* @attaches-to ``add_filter("random_password");``
|
40 |
*
|
41 |
+
* @param string $password Expects a plain text Password passed through by the Filter.
|
42 |
+
* @return string Password, possibly assigned through s2Member Custom Registration/Profile Field input.
|
43 |
*/
|
44 |
public static function generate_password ($password = FALSE)
|
45 |
{
|
60 |
$password = $custom; // Yes, use s2Member custom Password supplied by Remote Op.
|
61 |
}
|
62 |
}
|
|
|
63 |
return apply_filters ("ws_plugin__s2member_generate_password", ($GLOBALS["ws_plugin__s2member_generate_password_return"] = $password), get_defined_vars ());
|
64 |
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Intersects with ``register_new_user()`` in the WordPress core.
|
68 |
+
*
|
69 |
+
* This function Filters registration errors inside `/wp-login.php` via ``register_new_user()``.
|
70 |
+
*
|
71 |
+
* This can ONLY be fired through `/wp-login.php` on the front-side.
|
72 |
+
*
|
73 |
+
* @package s2Member\Registrations
|
74 |
+
* @since 140518
|
75 |
+
*
|
76 |
+
* @attaches-to ``add_filter("registration_errors");``
|
77 |
+
*
|
78 |
+
* @param WP_Error $errors Expects a `WP_Error` object passed in by the Filter.
|
79 |
+
* @param string $user_login Expects the User's Username, passed in by the Filter.
|
80 |
+
* @param string $user_email Expects the User's Email Address, passed in by the Filter.
|
81 |
+
* @return WP_Error A `WP_Error` object instance.
|
82 |
+
*/
|
83 |
+
public static function custom_registration_field_errors($errors = FALSE, $user_login = FALSE, $user_email = FALSE)
|
84 |
+
{
|
85 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
86 |
+
do_action("ws_plugin__s2member_before_custom_registration_field_errors", get_defined_vars());
|
87 |
+
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
88 |
+
|
89 |
+
if (!is_admin () && preg_match ("/\/wp-login\.php/", $_SERVER["REQUEST_URI"]))
|
90 |
+
if (is_wp_error ($errors) && !empty ($_POST) && is_array ($_POST))
|
91 |
+
{
|
92 |
+
foreach(c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)) as $_key => $_value)
|
93 |
+
if(strpos($_key, "ws_plugin__s2member_custom_reg_field_") === 0)
|
94 |
+
$input[str_replace("ws_plugin__s2member_custom_reg_field_", "", $_key)] = $_value;
|
95 |
+
|
96 |
+
$fields_to_validate = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level("auto-detection", "registration", TRUE);
|
97 |
+
$validation_errors = c_ws_plugin__s2member_custom_reg_fields::validation_errors(!empty($input) ? $input : array(), $fields_to_validate);
|
98 |
+
|
99 |
+
if($validation_errors) foreach($validation_errors as $_field_var => $_error)
|
100 |
+
$errors->add("custom_reg_field_".$_field_var, $_error);
|
101 |
+
unset($_field_var, $_error);
|
102 |
+
}
|
103 |
+
return apply_filters ("ws_plugin__s2member_custom_registration_field_errors", $errors, get_defined_vars ());
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Intersects with ``bp_core_screen_signup()`` in the BuddyPress core.
|
108 |
+
*
|
109 |
+
* This can ONLY be fired through `/register` via BuddyPress.
|
110 |
+
*
|
111 |
+
* @package s2Member\Registrations
|
112 |
+
* @since 140518
|
113 |
+
*
|
114 |
+
* @attaches-to ``add_action("bp_signup_validate");``
|
115 |
+
*/
|
116 |
+
public static function custom_registration_field_errors_4bp()
|
117 |
+
{
|
118 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
119 |
+
do_action("ws_plugin__s2member_before_custom_registration_field_errors_4bp", get_defined_vars());
|
120 |
+
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
121 |
+
|
122 |
+
if (!is_admin () && c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())
|
123 |
+
if(in_array ("registration", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"]))
|
124 |
+
if(apply_filters ("ws_plugin__s2member_custom_registration_fields_4bp_display", true, get_defined_vars ()))
|
125 |
+
if (!empty($GLOBALS["bp"]->signup) && is_object($GLOBALS["bp"]->signup) && !empty ($_POST) && is_array ($_POST))
|
126 |
+
{
|
127 |
+
foreach(c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)) as $_key => $_value)
|
128 |
+
if(strpos($_key, "ws_plugin__s2member_custom_reg_field_") === 0)
|
129 |
+
$input[str_replace("ws_plugin__s2member_custom_reg_field_", "", $_key)] = $_value;
|
130 |
+
|
131 |
+
$fields_to_validate = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level("auto-detection", "registration", TRUE);
|
132 |
+
$validation_errors = c_ws_plugin__s2member_custom_reg_fields::validation_errors(!empty($input) ? $input : array(), $fields_to_validate);
|
133 |
+
|
134 |
+
if($validation_errors) foreach($validation_errors as $_field_var => $_error)
|
135 |
+
$GLOBALS["bp"]->signup->errors["custom_reg_field_".$_field_var] = $_error;
|
136 |
+
unset($_field_var, $_error);
|
137 |
+
}
|
138 |
+
}
|
139 |
+
|
140 |
/**
|
141 |
* Filters Multisite User validation.
|
142 |
*
|
160 |
if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
|
161 |
if (!is_admin () && isset ($result["user_name"], $result["user_email"], $result["errors"]) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", (string)$_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())))
|
162 |
{
|
163 |
+
$errors =& $result["errors"]; /** @var $errors WP_Error */
|
164 |
+
if (in_array ($errors->get_error_code (), array ("user_name", "user_email", "user_email_used")))
|
165 |
if (c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($result["user_name"], $result["user_email"]))
|
166 |
+
{
|
167 |
+
unset($errors->errors["user_name"], $errors->errors["user_email"], $errors->errors["user_email_used"]);
|
168 |
+
unset($errors->error_data["user_name"], $errors->error_data["user_email"], $errors->error_data["user_email_used"]);
|
169 |
+
}
|
170 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
171 |
do_action ("ws_plugin__s2member_during_ms_validate_user_signup", get_defined_vars ());
|
172 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
173 |
}
|
|
|
174 |
return apply_filters ("ws_plugin__s2member_ms_validate_user_signup", $result, get_defined_vars ());
|
175 |
}
|
176 |
/**
|
183 |
* @since 3.5
|
184 |
*
|
185 |
* @attaches-to ``add_filter("signup_hidden_fields");``
|
|
|
|
|
186 |
*/
|
187 |
public static function ms_process_signup_hidden_fields ()
|
188 |
{
|
198 |
|
199 |
do_action ("ws_plugin__s2member_during_ms_process_signup_hidden_fields", get_defined_vars ());
|
200 |
}
|
|
|
201 |
do_action ("ws_plugin__s2member_after_ms_process_signup_hidden_fields", get_defined_vars ());
|
|
|
|
|
202 |
}
|
203 |
/**
|
204 |
* Adds Customs Fields to ``$meta`` on signup.
|
238 |
if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
|
239 |
$meta["s2member_ms_signup_meta"][$key] = maybe_unserialize ($value);
|
240 |
}
|
|
|
241 |
return apply_filters ("ws_plugin__s2member_ms_process_signup_meta", $meta, get_defined_vars ());
|
242 |
}
|
243 |
/**
|
254 |
*
|
255 |
* @attaches-to ``add_filter("_wpmu_activate_existing_error_");``
|
256 |
*
|
257 |
+
* @param WP_Error $_error Expects a `WP_Error` object to be passed through by the Filter.
|
258 |
* @param array $vars Expects the defined variables from the scope of the calling Filter.
|
259 |
+
* @return WP_Error|array If unable to add an existing User, the original ``$_error`` obj is returned.
|
260 |
* Otherwise we return an array of User details for continued processing by the caller.
|
261 |
*/
|
262 |
public static function ms_activate_existing_user ($_error = FALSE, $vars = FALSE)
|
282 |
return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", array ("user_id" => $user_id, "password" => $password, "meta" => $meta), get_defined_vars ());
|
283 |
}
|
284 |
}
|
|
|
285 |
return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", $_error, get_defined_vars ()); // Else, return the standardized error.
|
286 |
}
|
287 |
/**
|
296 |
*
|
297 |
* @attaches-to ``add_action("wpmu_activate_user");``
|
298 |
*
|
299 |
+
* @param int|string $user_id A numeric WordPress User ID.
|
300 |
+
* @param string $password Plain text Password should be passed through by the Action Hook.
|
301 |
* @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
|
|
|
302 |
*/
|
303 |
public static function configure_user_on_ms_user_activation ($user_id = FALSE, $password = FALSE, $meta = FALSE)
|
304 |
{
|
305 |
+
global $pagenow; // Detect the current admin page.
|
306 |
|
307 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
308 |
do_action ("ws_plugin__s2member_before_configure_user_on_ms_user_activation", get_defined_vars ());
|
316 |
}
|
317 |
|
318 |
do_action ("ws_plugin__s2member_after_configure_user_on_ms_user_activation", get_defined_vars ());
|
|
|
|
|
319 |
}
|
320 |
/**
|
321 |
* Configures new Users on a Multisite Network installation.
|
332 |
*
|
333 |
* @attaches-to ``add_action("wpmu_activate_blog");``
|
334 |
*
|
335 |
+
* @param int|string $blog_id A numeric WordPress Blog ID.
|
336 |
+
* @param int|string $user_id A numeric WordPress User ID.
|
337 |
+
* @param string $password Plain text Password should be passed through by the Action Hook.
|
338 |
+
* @param string $title The title that a User chose during signup; for their new Blog on the Network.
|
339 |
* @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
|
|
|
340 |
*/
|
341 |
public static function configure_user_on_ms_blog_activation ($blog_id = FALSE, $user_id = FALSE, $password = FALSE, $title = FALSE, $meta = FALSE)
|
342 |
{
|
350 |
c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"]) && is_array ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : array ()));
|
351 |
delete_user_meta ($user_id, "s2member_ms_signup_meta");
|
352 |
}
|
|
|
353 |
do_action ("ws_plugin__s2member_after_configure_user_on_ms_blog_activation", get_defined_vars ());
|
|
|
|
|
354 |
}
|
355 |
/**
|
356 |
* Intersects with ``register_new_user()`` through s2Member's Multisite Networking patch.
|
365 |
*
|
366 |
* @attaches-to ``add_filter("registration_errors");``
|
367 |
*
|
368 |
+
* @param WP_Error $errors Expects a `WP_Error` object passed in by the Filter.
|
369 |
+
* @param string $user_login Expects the User's Username, passed in by the Filter.
|
370 |
+
* @param string $user_email Expects the User's Email Address, passed in by the Filter.
|
371 |
+
* @return WP_Error A `WP_Error` object, or exits script execution after handling registration redirection.
|
372 |
*/
|
373 |
public static function ms_register_existing_user ($errors = FALSE, $user_login = FALSE, $user_email = FALSE)
|
374 |
{
|
416 |
* @package s2Member\Registrations
|
417 |
* @since 3.5
|
418 |
*
|
419 |
+
* @param string $user_login Expects the User's Username.
|
420 |
+
* @param string $user_email Expects the User's Email Address.
|
421 |
+
* @param string $user_pass Expects the User's plain text Password.
|
422 |
+
* @param int|string $user_id Optional. A numeric WordPress User ID.
|
423 |
* If unspecified, a lookup is performed with ``$user_login`` and ``$user_email``.
|
424 |
* @return int|false Returns numeric ``$user_id`` on success, else false on failure.
|
425 |
*/
|
443 |
return apply_filters ("ws_plugin__s2member_ms_create_existing_user", $user_id, get_defined_vars ());
|
444 |
}
|
445 |
}
|
|
|
446 |
return apply_filters ("ws_plugin__s2member_ms_create_existing_user", false, get_defined_vars ());
|
447 |
}
|
448 |
/**
|
459 |
*
|
460 |
* @attaches-to ``add_action("user_register");``
|
461 |
*
|
462 |
+
* @param int|string $user_id A numeric WordPress User ID.
|
463 |
+
* @param string $password Optional in most cases. A User's plain text Password. If unspecified, attempts are made to collect the plain text Password from other sources.
|
464 |
* @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member.
|
|
|
465 |
*
|
466 |
+
* @TODO Impossible to delete cookies when fired inside: `/wp-activate.php`?
|
467 |
*/
|
468 |
public static function configure_user_registration ($user_id = FALSE, $password = FALSE, $meta = FALSE)
|
469 |
{
|
1103 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
1104 |
do_action ("ws_plugin__s2member_after_configure_user_registration", get_defined_vars ());
|
1105 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
|
|
|
|
1106 |
}
|
1107 |
}
|
1108 |
+
}
|
|
includes/classes/return-templates.inc.php
CHANGED
@@ -36,7 +36,7 @@ if (!class_exists ("c_ws_plugin__s2member_return_templates"))
|
|
36 |
* @param str $template Optional A Subscr. Gateway code should be used as the template name, or `default` is a multipurpose template. Defaults to `default`. Used in template selection.
|
37 |
* @param str $response Optional. Response message to fill template with, using the Replacement Code `%%response%%` inside the template file. Defaults to: `Thank you. Please click the link below.`.
|
38 |
* @param str $continue_html Optional. The HTML value of the continuation link presented within the template using Replacement Code `%%continue%%`. Defaults to: `Continue`.
|
39 |
-
* @param str $continue_link Optional. The HREF value for the continuation link presented within the template using Replacement Code `%%continue%%`. Defaults to: ``home_url ("/")``.
|
40 |
* @return str The full HTML code of the template. All Replacement Codes inside the template file will have already been filled by this routine.
|
41 |
*/
|
42 |
public static function return_template ($template = FALSE, $response = FALSE, $continue_html = FALSE, $continue_link = FALSE)
|
@@ -46,7 +46,7 @@ if (!class_exists ("c_ws_plugin__s2member_return_templates"))
|
|
46 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
47 |
|
48 |
$template = ($template) ? $template : "default";
|
49 |
-
$continue_link = ($continue_link) ? $continue_link : home_url ("/");
|
50 |
$continue_html = ($continue_html) ? $continue_html : _x ("Continue", "s2member-front", "s2member");
|
51 |
$response = ($response) ? $response : _x ("Thank you. Please click the link below.", "s2member-front", "s2member");
|
52 |
|
36 |
* @param str $template Optional A Subscr. Gateway code should be used as the template name, or `default` is a multipurpose template. Defaults to `default`. Used in template selection.
|
37 |
* @param str $response Optional. Response message to fill template with, using the Replacement Code `%%response%%` inside the template file. Defaults to: `Thank you. Please click the link below.`.
|
38 |
* @param str $continue_html Optional. The HTML value of the continuation link presented within the template using Replacement Code `%%continue%%`. Defaults to: `Continue`.
|
39 |
+
* @param str $continue_link Optional. The HREF value for the continuation link presented within the template using Replacement Code `%%continue%%`. Defaults to: ``home_url ("/", "http")``.
|
40 |
* @return str The full HTML code of the template. All Replacement Codes inside the template file will have already been filled by this routine.
|
41 |
*/
|
42 |
public static function return_template ($template = FALSE, $response = FALSE, $continue_html = FALSE, $continue_link = FALSE)
|
46 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
47 |
|
48 |
$template = ($template) ? $template : "default";
|
49 |
+
$continue_link = ($continue_link) ? $continue_link : home_url ("/", "http");
|
50 |
$continue_html = ($continue_html) ? $continue_html : _x ("Continue", "s2member-front", "s2member");
|
51 |
$response = ($response) ? $response : _x ("Thank you. Please click the link below.", "s2member-front", "s2member");
|
52 |
|
includes/classes/user-deletions.inc.php
CHANGED
@@ -118,7 +118,7 @@ if (!class_exists ("c_ws_plugin__s2member_user_deletions"))
|
|
118 |
|
119 |
delete_user_option ($user_id, "s2member_ipn_signup_vars");
|
120 |
delete_user_option ($user_id, "s2member_paid_registration_times");
|
121 |
-
delete_user_option ($user_id, "
|
122 |
delete_user_option ($user_id, "s2member_sp_references");
|
123 |
|
124 |
delete_user_option ($user_id, "s2member_last_status_scan");
|
118 |
|
119 |
delete_user_option ($user_id, "s2member_ipn_signup_vars");
|
120 |
delete_user_option ($user_id, "s2member_paid_registration_times");
|
121 |
+
delete_user_option ($user_id, "s2member_access_cap_times");
|
122 |
delete_user_option ($user_id, "s2member_sp_references");
|
123 |
|
124 |
delete_user_option ($user_id, "s2member_last_status_scan");
|
includes/classes/user-drip-access.inc.php
ADDED
@@ -0,0 +1,147 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* User drip access routines.
|
4 |
+
*
|
5 |
+
* Copyright: © 2009-2014 (coded in the USA)
|
6 |
+
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
|
7 |
+
*
|
8 |
+
* Released under the terms of the GNU General Public License.
|
9 |
+
* You should have received a copy of the GNU General Public License,
|
10 |
+
* along with this software. In the main directory, see: /licensing/
|
11 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
12 |
+
*
|
13 |
+
* @package s2Member\User_Drip_Access
|
14 |
+
* @since 140514
|
15 |
+
*/
|
16 |
+
if(realpath(__FILE__) === realpath($_SERVER['SCRIPT_FILENAME']))
|
17 |
+
exit ('Do not access this file directly.');
|
18 |
+
|
19 |
+
if(!class_exists('c_ws_plugin__s2member_user_drip_access'))
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* User drip access routines.
|
23 |
+
*
|
24 |
+
* @package s2Member\User_Drip_Access
|
25 |
+
* @since 140514
|
26 |
+
*
|
27 |
+
* @note MUST use `self::` instead of `static::` for PHP v5.2 compat.
|
28 |
+
*/
|
29 |
+
class c_ws_plugin__s2member_user_drip_access
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
33 |
+
* @var integer Current `$from_day`; used by callback.
|
34 |
+
*/
|
35 |
+
protected static $from_day = 0;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
39 |
+
* @var integer Current `$to_day`; used by callback.
|
40 |
+
*/
|
41 |
+
protected static $to_day = 0;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
45 |
+
* @var integer Current `$user_id`; used by callback.
|
46 |
+
*/
|
47 |
+
protected static $user_id = 0;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
51 |
+
* @var array Current array of paid times for {@link $user_id}.
|
52 |
+
*/
|
53 |
+
protected static $all_paid_reg_times = array();
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
57 |
+
* @var array Current array of access capability times for {@link $user_id}.
|
58 |
+
*/
|
59 |
+
protected static $all_access_cap_times = array();
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Conditional check for drip access.
|
63 |
+
*
|
64 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
65 |
+
*
|
66 |
+
* @param string $access Required; conditional expression with access_s2member_ capabilities
|
67 |
+
* (i.e. leveln, ccap_name), e.g. `level2` or `level3 and (ccap_music or ccap_videos)`.
|
68 |
+
* Note that `and`, `or` MUST be used in place of `&&`, `||` due to sanitation routines.
|
69 |
+
* The `$access` string may contain only `[A-Za-z0-9 _()]`.
|
70 |
+
*
|
71 |
+
* @param integer $from_day Optional. Defaults to `0`. Any value greater than or equal to `0`.
|
72 |
+
* @param integer $to_day Optional. Defaults to `0`. Any value greater than or equal to `0`.
|
73 |
+
*
|
74 |
+
* @param null|integer $user_id Optional. A `NULL` value indicates the current user.
|
75 |
+
*
|
76 |
+
* @return boolean `TRUE` if user can `$access`; and dripping should occur; based on `$from_day` & `$to_day`.
|
77 |
+
*
|
78 |
+
* @triggers `E_USER_ERROR` if an invalid `$access` syntax is detected; with invalid chars.
|
79 |
+
* @triggers `E_USER_ERROR` if an invalid `$access` syntax is detected; without any word chars.
|
80 |
+
*/
|
81 |
+
public static function user_can_access_drip($access, $from_day = 0, $to_day = 0, $user_id = NULL)
|
82 |
+
{
|
83 |
+
$drip = FALSE;
|
84 |
+
$access = trim((string)$access);
|
85 |
+
$from_day = self::$from_day = (integer)$from_day;
|
86 |
+
$to_day = self::$to_day = (integer)$to_day;
|
87 |
+
|
88 |
+
if(!isset($user_id))
|
89 |
+
$user_id = get_current_user_id();
|
90 |
+
$user_id = self::$user_id = (integer)$user_id;
|
91 |
+
|
92 |
+
if(user_can($user_id, 'administrator'))
|
93 |
+
$drip = TRUE;
|
94 |
+
|
95 |
+
else if($access && $user_id)
|
96 |
+
{
|
97 |
+
if(!is_array($all_access_cap_times = self::$all_access_cap_times = c_ws_plugin__s2member_access_cap_times::get_access_cap_times($user_id)))
|
98 |
+
$all_access_cap_times = self::$all_access_cap_times = array();
|
99 |
+
|
100 |
+
$access_expression = strtolower($access); // e.g. 'level1 and ccap_music'
|
101 |
+
$access_expression = trim(preg_replace('/[^a-z0-9 _()]/', '', $access_expression, -1, $invalid_chars));
|
102 |
+
$access_expression = str_replace(array(' and ', ' or '), array(' && ', ' || '), $access_expression);
|
103 |
+
|
104 |
+
if($invalid_chars)
|
105 |
+
trigger_error('Syntax error: invalid chars. Please use only `A-Za-z0-9 _()` in the `access` parameter of s2Drip.', E_USER_ERROR);
|
106 |
+
|
107 |
+
if(!$access_expression || !preg_match('/\w+/', $access_expression))
|
108 |
+
trigger_error('Syntax error: no word chars in `access` parameter of s2Drip. Valid example: `level1 and ccap_music`.', E_USER_ERROR);
|
109 |
+
|
110 |
+
$access_expression = preg_replace_callback('/\w+/', 'self::_user_can_access_drip_cb', $access_expression);
|
111 |
+
$drip = eval('return ('.$access_expression.');');
|
112 |
+
}
|
113 |
+
return apply_filters('ws_plugin__s2member_user_can_access_drip', $drip, get_defined_vars());
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Conditional check for drip access (callback).
|
118 |
+
*
|
119 |
+
* @since 140514 Enhancing `[s2Drip]` shortcode.
|
120 |
+
*
|
121 |
+
* @param array $cap Regex matches passed via {@link \preg_replace_callback()}.
|
122 |
+
*
|
123 |
+
* @return string One of `TRUE` or `FALSE`; as a string value.
|
124 |
+
*/
|
125 |
+
protected static function _user_can_access_drip_cb($cap)
|
126 |
+
{
|
127 |
+
$drip = 'FALSE';
|
128 |
+
$cap = (string)$cap[0];
|
129 |
+
|
130 |
+
if($cap && user_can(self::$user_id, 'access_s2member_'.$cap))
|
131 |
+
{
|
132 |
+
$time = time();
|
133 |
+
$cap_times = array_keys(self::$all_access_cap_times, $cap, TRUE);
|
134 |
+
$cap_time_latest = $cap_times ? max($cap_times) : 0;
|
135 |
+
|
136 |
+
if($cap_time_latest && $time > ($cap_time_latest + (max(0, (self::$from_day - 1)) * 86400)))
|
137 |
+
{
|
138 |
+
$drip = 'TRUE'; // At/after $from_day.
|
139 |
+
if(self::$to_day > 0 && $time > ($cap_time_latest + (self::$to_day * 86400)))
|
140 |
+
$drip = 'FALSE'; // After $to_day.
|
141 |
+
}
|
142 |
+
}
|
143 |
+
|
144 |
+
return apply_filters('ws_plugin__s2member_user_can_access_drip_cb', $drip, get_defined_vars());
|
145 |
+
}
|
146 |
+
}
|
147 |
+
}
|
includes/classes/users-list.inc.php
CHANGED
@@ -36,7 +36,7 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
36 |
* @attaches-to ``add_action("edit_user_profile");``
|
37 |
* @attaches-to ``add_action("show_user_profile");``
|
38 |
*
|
39 |
-
* @param
|
40 |
* @return inner Return-value of inner routine.
|
41 |
*/
|
42 |
public static function users_list_edit_cols ($user = FALSE)
|
@@ -52,7 +52,7 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
52 |
* @attaches-to ``add_action("edit_user_profile_update");``
|
53 |
* @attaches-to ``add_action("personal_options_update");``
|
54 |
*
|
55 |
-
* @param int|
|
56 |
* @return inner Return-value of inner routine.
|
57 |
*/
|
58 |
public static function users_list_update_cols ($user_id = FALSE)
|
@@ -69,12 +69,11 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
69 |
*
|
70 |
* @attaches-to ``add_action("pre_user_query");``
|
71 |
*
|
72 |
-
* @param
|
73 |
-
* @return null After possibly modifying the ``$query`` object.
|
74 |
*/
|
75 |
public static function users_list_query (&$query = FALSE)
|
76 |
{
|
77 |
-
global $wpdb;
|
78 |
|
79 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
80 |
do_action ("ws_plugin__s2member_before_users_list_search", get_defined_vars ());
|
@@ -106,8 +105,6 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
106 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
107 |
do_action ("ws_plugin__s2member_after_users_list_search", get_defined_vars ());
|
108 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
109 |
-
|
110 |
-
return /* Return for uniformity. */;
|
111 |
}
|
112 |
/**
|
113 |
* Adds columns to the list of Users.
|
@@ -165,10 +162,10 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
165 |
*
|
166 |
* @attaches-to ``add_filter ("manage_users_custom_column");``
|
167 |
*
|
168 |
-
* @param
|
169 |
-
* @param
|
170 |
-
* @param int|
|
171 |
-
* @return
|
172 |
*/
|
173 |
public static function users_list_display_cols ($val = FALSE, $col = FALSE, $user_id = FALSE)
|
174 |
{
|
@@ -198,7 +195,6 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
198 |
$val .= (($val) ? "<br />" : "") . '<small><em>@Level ' . esc_html ($level) . ': <span title="' . esc_attr (date ("D M jS, Y", $time)) . ' @ precisely ' . esc_attr (date ("g:i a", $time)) . '">' . esc_html (date ("D M jS, Y", $time)) . '</span></em></small>';
|
199 |
}
|
200 |
}
|
201 |
-
|
202 |
else if ($col === "s2member_subscr_id")
|
203 |
$val = ($v = get_user_option ("s2member_subscr_id", $user_id)) ? esc_html ($v) : "—";
|
204 |
|
@@ -231,7 +227,6 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
231 |
|
232 |
$last_fields_id = $user_id; // Record this.
|
233 |
}
|
234 |
-
|
235 |
else if ($col === "s2member_login_counter")
|
236 |
$val = ($v = get_user_option ("s2member_login_counter", $user_id)) ? esc_html ($v) : "—";
|
237 |
|
@@ -248,6 +243,61 @@ if (!class_exists ("c_ws_plugin__s2member_users_list"))
|
|
248 |
|
249 |
return apply_filters ("ws_plugin__s2member_users_list_display_cols", ((strlen ($val)) ? $val : "—"), get_defined_vars ());
|
250 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
}
|
252 |
-
}
|
253 |
-
?>
|
36 |
* @attaches-to ``add_action("edit_user_profile");``
|
37 |
* @attaches-to ``add_action("show_user_profile");``
|
38 |
*
|
39 |
+
* @param WP_User $user Expects a `WP_User` object passed in by the Action Hook.
|
40 |
* @return inner Return-value of inner routine.
|
41 |
*/
|
42 |
public static function users_list_edit_cols ($user = FALSE)
|
52 |
* @attaches-to ``add_action("edit_user_profile_update");``
|
53 |
* @attaches-to ``add_action("personal_options_update");``
|
54 |
*
|
55 |
+
* @param int|string $user_id Expects a numeric WordPress User ID passed in by the Action Hook.
|
56 |
* @return inner Return-value of inner routine.
|
57 |
*/
|
58 |
public static function users_list_update_cols ($user_id = FALSE)
|
69 |
*
|
70 |
* @attaches-to ``add_action("pre_user_query");``
|
71 |
*
|
72 |
+
* @param WP_User_Query $query Expects a `WP_User_Query` object, by reference.
|
|
|
73 |
*/
|
74 |
public static function users_list_query (&$query = FALSE)
|
75 |
{
|
76 |
+
global $wpdb; /** @var $wpdb wpdb */
|
77 |
|
78 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
79 |
do_action ("ws_plugin__s2member_before_users_list_search", get_defined_vars ());
|
105 |
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
106 |
do_action ("ws_plugin__s2member_after_users_list_search", get_defined_vars ());
|
107 |
unset /* Unset defined __refs, __v. */ ($__refs, $__v);
|
|
|
|
|
108 |
}
|
109 |
/**
|
110 |
* Adds columns to the list of Users.
|
162 |
*
|
163 |
* @attaches-to ``add_filter ("manage_users_custom_column");``
|
164 |
*
|
165 |
+
* @param string $val A value for this column, passed through by the Filter.
|
166 |
+
* @param string $col The name of the column for which we might need to supply data for.
|
167 |
+
* @param int|string $user_id Expects a WordPress User ID, passed through by the Filter.
|
168 |
+
* @return string A column value introduced by this routine, or existing value, or, if empty, a dash.
|
169 |
*/
|
170 |
public static function users_list_display_cols ($val = FALSE, $col = FALSE, $user_id = FALSE)
|
171 |
{
|
195 |
$val .= (($val) ? "<br />" : "") . '<small><em>@Level ' . esc_html ($level) . ': <span title="' . esc_attr (date ("D M jS, Y", $time)) . ' @ precisely ' . esc_attr (date ("g:i a", $time)) . '">' . esc_html (date ("D M jS, Y", $time)) . '</span></em></small>';
|
196 |
}
|
197 |
}
|
|
|
198 |
else if ($col === "s2member_subscr_id")
|
199 |
$val = ($v = get_user_option ("s2member_subscr_id", $user_id)) ? esc_html ($v) : "—";
|
200 |
|
227 |
|
228 |
$last_fields_id = $user_id; // Record this.
|
229 |
}
|
|
|
230 |
else if ($col === "s2member_login_counter")
|
231 |
$val = ($v = get_user_option ("s2member_login_counter", $user_id)) ? esc_html ($v) : "—";
|
232 |
|
243 |
|
244 |
return apply_filters ("ws_plugin__s2member_users_list_display_cols", ((strlen ($val)) ? $val : "—"), get_defined_vars ());
|
245 |
}
|
246 |
+
|
247 |
+
/**
|
248 |
+
* Tells WordPress certain fields s2Member adds are sortable
|
249 |
+
*
|
250 |
+
* @package s2Member\Users_List
|
251 |
+
* @since 140518
|
252 |
+
*
|
253 |
+
* @attaches-to ``add_filter ("manage_users_sortable_columns");``
|
254 |
+
*
|
255 |
+
* @param array $columns An Array of sortable User List Columns
|
256 |
+
*/
|
257 |
+
public static function users_list_add_sortable($columns)
|
258 |
+
{
|
259 |
+
$columns['s2member_registration_time'] = 's2member_registration_time';
|
260 |
+
$columns['s2member_subscr_id'] = 's2member_subscr_id';
|
261 |
+
$columns['s2member_auto_eot_time'] = 's2member_auto_eot_time';
|
262 |
+
$columns['s2member_login_counter'] = 's2member_login_counter';
|
263 |
+
$columns['s2member_last_login_time'] = 's2member_last_login_time';
|
264 |
+
return $columns;
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* Alters WP_Query object to make custom columns sortable
|
269 |
+
*
|
270 |
+
* @package s2Member\Users_List
|
271 |
+
* @since 140518
|
272 |
+
*
|
273 |
+
* @attaches-to ``add_filter ("pre_user_query");``
|
274 |
+
*
|
275 |
+
* @param WP_User_Query $query `WP_Query` Object passed from WordPress
|
276 |
+
*/
|
277 |
+
public static function users_list_make_sortable($query)
|
278 |
+
{
|
279 |
+
if (!is_admin()
|
280 |
+
|| empty($GLOBALS['pagenow']) || $GLOBALS['pagenow'] !== 'users.php'
|
281 |
+
|| !isset ($query->query_vars))
|
282 |
+
return;
|
283 |
+
|
284 |
+
global $wpdb; /** @var $wpdb wpdb */
|
285 |
+
$vars = $query->query_vars;
|
286 |
+
|
287 |
+
switch($vars['orderby'])
|
288 |
+
{
|
289 |
+
case 's2member_registration_time':
|
290 |
+
$query->query_orderby = "ORDER BY `user_registered` " . $vars['order'];
|
291 |
+
break;
|
292 |
+
|
293 |
+
case 's2member_subscr_id':
|
294 |
+
case 's2member_auto_eot_time':
|
295 |
+
case 's2member_login_counter':
|
296 |
+
case 's2member_last_login_time':
|
297 |
+
$query->query_from .= " LEFT JOIN `" . $wpdb->usermeta . "` `m` ON (" . $wpdb->users . ".`ID` = `m`.`user_id` AND `m`.`meta_key` = '" . esc_sql($wpdb->prefix . $vars['orderby']) . "')";
|
298 |
+
$query->query_orderby = "ORDER BY `m`.`meta_value` " . $vars['order'];
|
299 |
+
break;
|
300 |
+
}
|
301 |
+
}
|
302 |
}
|
303 |
+
}
|
|
includes/classes/utils-users.inc.php
CHANGED
@@ -37,7 +37,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
37 |
*/
|
38 |
public static function users_in_database ()
|
39 |
{
|
40 |
-
global
|
41 |
|
42 |
$q1 = mysql_query ("SELECT SQL_CALC_FOUND_ROWS `" . $wpdb->users . "`.`ID` FROM `" . $wpdb->users . "`, `" . $wpdb->usermeta . "` WHERE `" . $wpdb->users . "`.`ID` = `" . $wpdb->usermeta . "`.`user_id` AND `" . $wpdb->usermeta . "`.`meta_key` = '" . esc_sql ($wpdb->prefix . "capabilities") . "' LIMIT 1", $wpdb->dbh);
|
43 |
$q2 = mysql_query ("SELECT FOUND_ROWS()", $wpdb->dbh);
|
@@ -63,7 +63,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
63 |
*/
|
64 |
public static function get_user_custom_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
|
65 |
{
|
66 |
-
global
|
67 |
|
68 |
if /* This case includes some additional routines that can use the ``$os0`` value. */ ($subscr_or_txn_id && $os0)
|
69 |
{
|
@@ -94,7 +94,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
94 |
*/
|
95 |
public static function get_user_id_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
|
96 |
{
|
97 |
-
global
|
98 |
|
99 |
if /* This case includes some additional routines that can use the ``$os0`` value. */($subscr_or_txn_id && $os0)
|
100 |
{
|
@@ -123,7 +123,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
123 |
*/
|
124 |
public static function get_user_email_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
|
125 |
{
|
126 |
-
global
|
127 |
|
128 |
if /* This case includes some additional routines that can use the ``$os0`` value. */($subscr_or_txn_id && $os0)
|
129 |
{
|
@@ -228,7 +228,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
228 |
*/
|
229 |
public static function user_login_email_exists ($user_login = FALSE, $user_email = FALSE)
|
230 |
{
|
231 |
-
global
|
232 |
|
233 |
if /* Only if we have both of these. */ ($user_login && $user_email)
|
234 |
if (($user_id = $wpdb->get_var ("SELECT `ID` FROM `" . $wpdb->users . "` WHERE `user_login` LIKE '" . esc_sql (like_escape ($user_login)) . "' AND `user_email` LIKE '" . esc_sql (like_escape ($user_email)) . "' LIMIT 1")))
|
@@ -295,7 +295,7 @@ if (!class_exists ("c_ws_plugin__s2member_utils_users"))
|
|
295 |
*/
|
296 |
public static function get_user_field ($field_id = FALSE, $user_id = FALSE) // Very powerful function here.
|
297 |
{
|
298 |
-
global
|
299 |
|
300 |
$current_user = /* Current User's object (used when/if `$user_id` is empty). */ wp_get_current_user ();
|
301 |
|
37 |
*/
|
38 |
public static function users_in_database ()
|
39 |
{
|
40 |
+
global $wpdb; /** @var $wpdb \wpdb */
|
41 |
|
42 |
$q1 = mysql_query ("SELECT SQL_CALC_FOUND_ROWS `" . $wpdb->users . "`.`ID` FROM `" . $wpdb->users . "`, `" . $wpdb->usermeta . "` WHERE `" . $wpdb->users . "`.`ID` = `" . $wpdb->usermeta . "`.`user_id` AND `" . $wpdb->usermeta . "`.`meta_key` = '" . esc_sql ($wpdb->prefix . "capabilities") . "' LIMIT 1", $wpdb->dbh);
|
43 |
$q2 = mysql_query ("SELECT FOUND_ROWS()", $wpdb->dbh);
|
63 |
*/
|
64 |
public static function get_user_custom_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
|
65 |
{
|
66 |
+
global $wpdb; /** @var $wpdb \wpdb */
|
67 |
|
68 |
if /* This case includes some additional routines that can use the ``$os0`` value. */ ($subscr_or_txn_id && $os0)
|
69 |
{
|
94 |
*/
|
95 |
public static function get_user_id_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
|
96 |
{
|
97 |
+
global $wpdb; /** @var $wpdb \wpdb */
|
98 |
|
99 |
if /* This case includes some additional routines that can use the ``$os0`` value. */($subscr_or_txn_id && $os0)
|
100 |
{
|
123 |
*/
|
124 |
public static function get_user_email_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
|
125 |
{
|
126 |
+
global $wpdb; /** @var $wpdb \wpdb */
|
127 |
|
128 |
if /* This case includes some additional routines that can use the ``$os0`` value. */($subscr_or_txn_id && $os0)
|
129 |
{
|
228 |
*/
|
229 |
public static function user_login_email_exists ($user_login = FALSE, $user_email = FALSE)
|
230 |
{
|
231 |
+
global $wpdb; /** @var $wpdb \wpdb */
|
232 |
|
233 |
if /* Only if we have both of these. */ ($user_login && $user_email)
|
234 |
if (($user_id = $wpdb->get_var ("SELECT `ID` FROM `" . $wpdb->users . "` WHERE `user_login` LIKE '" . esc_sql (like_escape ($user_login)) . "' AND `user_email` LIKE '" . esc_sql (like_escape ($user_email)) . "' LIMIT 1")))
|
295 |
*/
|
296 |
public static function get_user_field ($field_id = FALSE, $user_id = FALSE) // Very powerful function here.
|
297 |
{
|
298 |
+
global $wpdb; /** @var $wpdb \wpdb */
|
299 |
|
300 |
$current_user = /* Current User's object (used when/if `$user_id` is empty). */ wp_get_current_user ();
|
301 |
|
includes/functions/api-functions.inc.php
CHANGED
@@ -2245,13 +2245,36 @@ if(!function_exists("s2member_paid_registration_time"))
|
|
2245 |
return c_ws_plugin__s2member_registration_times::paid_registration_time($level, $user_id);
|
2246 |
}
|
2247 |
}
|
2248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2249 |
{
|
2250 |
-
function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2251 |
{
|
2252 |
if(!$user_id) $user_id = get_current_user_id();
|
2253 |
|
2254 |
-
return
|
2255 |
}
|
2256 |
}
|
2257 |
/**
|
2245 |
return c_ws_plugin__s2member_registration_times::paid_registration_time($level, $user_id);
|
2246 |
}
|
2247 |
}
|
2248 |
+
/**
|
2249 |
+
* Gets access capability times.
|
2250 |
+
*
|
2251 |
+
* @package s2Member\API_Functions
|
2252 |
+
* @since 140514
|
2253 |
+
*
|
2254 |
+
* @param integer $user_id WP User ID.
|
2255 |
+
* @param array $access_caps Optional. If not passed, this returns all times for all caps.
|
2256 |
+
* If passed, please pass an array of specific access capabilities to get the times for.
|
2257 |
+
* If removal times are desired, you should add a `-` prefix.
|
2258 |
+
* e.g. `array('ccap_music','level2','-ccap_video')`
|
2259 |
+
*
|
2260 |
+
* @return array An array of all access capability times.
|
2261 |
+
* Keys are UTC timestamps (w/ microtime precision), values are the capabilities (including `-` prefixed removals).
|
2262 |
+
* e.g. `array('1234567890.0001' => 'ccap_music', '1234567890.0002' => 'level2', '1234567890.0003' => '-ccap_video')`
|
2263 |
+
*/
|
2264 |
+
if(!function_exists("s2member_access_cap_times") && !function_exists("s2member_capability_times"))
|
2265 |
{
|
2266 |
+
function s2member_access_cap_times($user_id = NULL, $access_caps = array())
|
2267 |
+
{
|
2268 |
+
if(!$user_id) $user_id = get_current_user_id();
|
2269 |
+
|
2270 |
+
return c_ws_plugin__s2member_access_cap_times::get_access_cap_times($user_id, $access_caps);
|
2271 |
+
}
|
2272 |
+
/* Deprecated in favor of `s2member_access_cap_times()`. */
|
2273 |
+
function s2member_capability_times($user_id = NULL, $access_caps = array())
|
2274 |
{
|
2275 |
if(!$user_id) $user_id = get_current_user_id();
|
2276 |
|
2277 |
+
return c_ws_plugin__s2member_access_cap_times::get_access_cap_times($user_id, $access_caps);
|
2278 |
}
|
2279 |
}
|
2280 |
/**
|
includes/hooks.inc.php
CHANGED
@@ -94,6 +94,7 @@ add_filter("bp_core_get_site_options", "c_ws_plugin__s2member_option_forces::che
|
|
94 |
add_filter("random_password", "c_ws_plugin__s2member_registrations::generate_password");
|
95 |
add_action("user_register", "c_ws_plugin__s2member_registrations::configure_user_registration");
|
96 |
add_action("register_form", "c_ws_plugin__s2member_custom_reg_fields::custom_registration_fields");
|
|
|
97 |
|
98 |
add_filter("add_signup_meta", "c_ws_plugin__s2member_registrations::ms_process_signup_meta");
|
99 |
add_filter("bp_signup_usermeta", "c_ws_plugin__s2member_registrations::ms_process_signup_meta");
|
@@ -107,6 +108,7 @@ add_action("wpmu_activate_blog", "c_ws_plugin__s2member_registrations::configure
|
|
107 |
add_action("signup_extra_fields", "c_ws_plugin__s2member_custom_reg_fields::ms_custom_registration_fields");
|
108 |
|
109 |
add_action("bp_after_signup_profile_fields", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_registration_fields_4bp");
|
|
|
110 |
add_action("bp_after_profile_field_content", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_fields_4bp");
|
111 |
add_action("bp_profile_field_item", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_field_items_4bp");
|
112 |
|
@@ -154,14 +156,22 @@ add_action("network_admin_notices", "c_ws_plugin__s2member_admin_notices::admin_
|
|
154 |
add_action("pre_user_query", "c_ws_plugin__s2member_users_list::users_list_query");
|
155 |
add_filter("manage_users_columns", "c_ws_plugin__s2member_users_list::users_list_cols");
|
156 |
add_filter("manage_users_custom_column", "c_ws_plugin__s2member_users_list::users_list_display_cols", 10, 3);
|
|
|
|
|
157 |
add_action("edit_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
158 |
add_action("show_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
159 |
add_action("edit_user_profile_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
160 |
add_action("personal_options_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
161 |
add_action("set_user_role", "c_ws_plugin__s2member_registration_times::synchronize_paid_reg_times", 10, 2);
|
162 |
-
add_action("update_user_meta", "c_ws_plugin__s2member_registration_times::log_capability_time", 10, 4);
|
163 |
add_filter("show_password_fields", "c_ws_plugin__s2member_user_securities::hide_password_fields", 10, 2);
|
164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
add_filter("cron_schedules", "c_ws_plugin__s2member_cron_jobs::extend_cron_schedules");
|
166 |
add_action("ws_plugin__s2member_auto_eot_system__schedule", "c_ws_plugin__s2member_auto_eots::auto_eot_system");
|
167 |
|
94 |
add_filter("random_password", "c_ws_plugin__s2member_registrations::generate_password");
|
95 |
add_action("user_register", "c_ws_plugin__s2member_registrations::configure_user_registration");
|
96 |
add_action("register_form", "c_ws_plugin__s2member_custom_reg_fields::custom_registration_fields");
|
97 |
+
add_filter("registration_errors", "c_ws_plugin__s2member_registrations::custom_registration_field_errors", 10, 3);
|
98 |
|
99 |
add_filter("add_signup_meta", "c_ws_plugin__s2member_registrations::ms_process_signup_meta");
|
100 |
add_filter("bp_signup_usermeta", "c_ws_plugin__s2member_registrations::ms_process_signup_meta");
|
108 |
add_action("signup_extra_fields", "c_ws_plugin__s2member_custom_reg_fields::ms_custom_registration_fields");
|
109 |
|
110 |
add_action("bp_after_signup_profile_fields", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_registration_fields_4bp");
|
111 |
+
add_action("bp_signup_validate", "c_ws_plugin__s2member_registrations::custom_registration_field_errors_4bp");
|
112 |
add_action("bp_after_profile_field_content", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_fields_4bp");
|
113 |
add_action("bp_profile_field_item", "c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_field_items_4bp");
|
114 |
|
156 |
add_action("pre_user_query", "c_ws_plugin__s2member_users_list::users_list_query");
|
157 |
add_filter("manage_users_columns", "c_ws_plugin__s2member_users_list::users_list_cols");
|
158 |
add_filter("manage_users_custom_column", "c_ws_plugin__s2member_users_list::users_list_display_cols", 10, 3);
|
159 |
+
add_filter("manage_users_sortable_columns", "c_ws_plugin__s2member_users_list::users_list_add_sortable");
|
160 |
+
add_filter("pre_user_query", "c_ws_plugin__s2member_users_list::users_list_make_sortable");
|
161 |
add_action("edit_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
162 |
add_action("show_user_profile", "c_ws_plugin__s2member_users_list::users_list_edit_cols");
|
163 |
add_action("edit_user_profile_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
164 |
add_action("personal_options_update", "c_ws_plugin__s2member_users_list::users_list_update_cols");
|
165 |
add_action("set_user_role", "c_ws_plugin__s2member_registration_times::synchronize_paid_reg_times", 10, 2);
|
|
|
166 |
add_filter("show_password_fields", "c_ws_plugin__s2member_user_securities::hide_password_fields", 10, 2);
|
167 |
|
168 |
+
add_action("add_user_meta", "c_ws_plugin__s2member_access_cap_times::get_user_caps_before_update_on_add", 10, 3);
|
169 |
+
add_action("update_user_meta", "c_ws_plugin__s2member_access_cap_times::get_user_caps_before_update", 10, 4);
|
170 |
+
|
171 |
+
add_action("added_user_meta", "c_ws_plugin__s2member_access_cap_times::log_access_cap_times", 10, 4);
|
172 |
+
add_action("updated_user_meta", "c_ws_plugin__s2member_access_cap_times::log_access_cap_times", 10, 4);
|
173 |
+
add_action("deleted_user_meta", "c_ws_plugin__s2member_access_cap_times::log_access_cap_times_on_delete", 10, 3);
|
174 |
+
|
175 |
add_filter("cron_schedules", "c_ws_plugin__s2member_cron_jobs::extend_cron_schedules");
|
176 |
add_action("ws_plugin__s2member_auto_eot_system__schedule", "c_ws_plugin__s2member_auto_eots::auto_eot_system");
|
177 |
|
includes/jquery/.htaccess
CHANGED
@@ -1 +1,6 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
<IfModule authz_core_module>
|
2 |
+
Require all granted
|
3 |
+
</IfModule>
|
4 |
+
<IfModule !authz_core_module>
|
5 |
+
allow from all
|
6 |
+
</IfModule>
|
includes/menu-pages/menu-pages-s-min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function($){var esc_attr=esc_html=function(str){return String(str).replace(/"/g,""").replace(/\</g,"<").replace(/\>/g,">")};if(location.href.match(/page\=ws-plugin--s2member/)){$("input.ws-plugin--s2member-update-roles-button, input.ws-plugin--s2member-reset-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");var levels='<?php echo (int)$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; ?>';var resetUpdate=($this.hasClass("ws-plugin--s2member-reset-roles-button"))?"Reset":"Update";$.post(ajaxurl,{action:"ws_plugin__s2member_update_roles_via_ajax",ws_plugin__s2member_update_roles_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="1"){alert("s2Member's Roles/Capabilities "+((resetUpdate.toLowerCase()==="reset")?"have been successfully reset":"updated successfully")+".\nYour installation of s2Member has Membership Levels 0-"+levels+"."),$this.val(resetUpdate+" Roles/Capabilities")}else{if(response==="l"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val(resetUpdate+" Roles/Capabilities")}else{alert("Sorry, your request failed.\nAccess denied. Do you have the ability to `create_users`?"),$this.val(resetUpdate+" Roles/Capabilities")}}});return false})}if(location.href.match(/page\=ws-plugin--s2member-logs/)){$("input#ws-plugin--s2member-gateway-debug-logs-extensive-1").click(function(){var $this=$(this),thisChecked=(this.checked)?true:false;if(thisChecked){$("input#ws-plugin--s2member-gateway-debug-logs-1").attr("checked","checked")}});var $toggles=$("a.ws-plugin--s2member-log-file-viewport-toggle");$toggles.click(function(){$("textarea#ws-plugin--s2member-log-file-viewer").each(function(){var $viewer=$(this);if($viewer.attr("data-state")!=="expanded"){$viewer.css({height:($viewer.prop("scrollHeight")+50)+"px","overflow-y":"auto"});$toggles.html("⇑ normalize viewport ❙");$viewer.attr("data-state","expanded")}else{$viewer.css({height:"auto","overflow-y":"scroll"});$toggles.html("⇓ expand viewport ⇓");$viewer.attr("data-state","scrolling")}});return false})}if(location.href.match(/page\=ws-plugin--s2member-mms-ops/)){$("select#ws-plugin--s2member-mms-registration-file").change(function(){if($(this).val()==="wp-signup"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((gv==="all")?"show":"hide")]();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((gv==="all")?((l0v>0)?l0v:"1"):"0"))}else{if($(this).val()==="wp-login"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0").hide();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val("0")}}}).trigger("change");$("select#ws-plugin--s2member-mms-registration-grants").change(function(){$("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_generateSecurityKey=function(){var mt_rand=function(min,max){min=(arguments.length<1)?0:min;max=(arguments.length<2)?2147483647:max;return Math.floor(Math.random()*(max-min+1))+min};var chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";for(var i=0,key="";i<64;i++){key+=chars.substr(mt_rand(0,chars.length-1),1)}$("input#ws-plugin--s2member-sec-encryption-key").val(key);return false};ws_plugin__s2member_enableSecurityKey=function(){if(confirm("Edit Key? Are you sure?\nThis could break your installation!\n\n*Note* If you've been testing s2Member, feel free to change this Key before you go live. Just don't go live, and then change it. You'll have unhappy Customers. Data corruption WILL occur! For your safety, s2Member keeps a history of the last 10 Keys that you've used. If you get yourself into a real situation, s2Member will let you revert back to a previous Key.")){$("input#ws-plugin--s2member-sec-encryption-key").removeAttr("disabled")}return false};ws_plugin__s2member_securityKeyHistory=function(){$("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};$("select#ws-plugin--s2member-new-user-emails-enabled").change(function(){var $pluggable=$("input#ws-plugin--s2member-pluggables-wp-new-user-notification"),$this=$(this),$newUserEmails=$("div#ws-plugin--s2member-new-user-emails");if($pluggable.val()==="0"||$this.val()==="0"){($pluggable.val()==="0")?$this.attr("disabled","disabled"):$this.removeAttr("disabled");$(":input",$newUserEmails).attr("disabled","disabled"),$newUserEmails.css("opacity","0.5")}else{$this.removeAttr("disabled"),$(":input",$newUserEmails).removeAttr("disabled"),$newUserEmails.css("opacity","")}}).trigger("change");$("select#ws-plugin--s2member-login-reg-design-enabled").change(function(){var $this=$(this),$loginRegDesign=$("div#ws-plugin--s2member-login-reg-design");if($this.val()==="0"){$(":input",$loginRegDesign).attr("disabled","disabled"),$loginRegDesign.css("opacity","0.5"),$loginRegDesign.hide()}else{$(":input",$loginRegDesign).removeAttr("disabled"),$loginRegDesign.css("opacity",""),$loginRegDesign.show()}}).trigger("change");if($("input#ws-plugin--s2member-custom-reg-fields").length&&$("div#ws-plugin--s2member-custom-reg-field-configuration").length){(function(){var i,fieldDefaults,tools,table,$tools,$table;var $fields=$("input#ws-plugin--s2member-custom-reg-fields");var $configuration=$("div#ws-plugin--s2member-custom-reg-field-configuration");var fields=($fields.val())?$.JSON.parse($fields.val()):[];fields=(fields instanceof Array)?fields:[];fieldDefaults={section:"no",sectitle:"",id:"",label:"",type:"text",deflt:"",options:"",expected:"",required:"yes",levels:"all",editable:"yes",classes:"",styles:"",attrs:""};for(i=0;i<fields.length;i++){fields[i]=$.extend(true,{},fieldDefaults,fields[i])}tools='<div id="ws-plugin--s2member-custom-reg-field-configuration-tools"></div>',table='<table id="ws-plugin--s2member-custom-reg-field-configuration-table"></table>';$configuration.html(tools+table);$tools=$("div#ws-plugin--s2member-custom-reg-field-configuration-tools"),$table=$("table#ws-plugin--s2member-custom-reg-field-configuration-table");ws_plugin__s2member_customRegFieldSectionChange=function(select){var section=$(select).val();var sectitle_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle";(section==="yes")?$(sectitle_trs).css("display",""):$(sectitle_trs).css("display","none")};ws_plugin__s2member_customRegFieldTypeChange=function(select){var type=$(select).val();var deflt_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt",options_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-options",expected_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected";(type.match(/^(text|textarea)$/))?$(deflt_trs).css("display",""):$(deflt_trs).css("display","none");(type.match(/^(select|selects|checkboxes|radios)$/))?$(options_trs).css("display",""):$(options_trs).css("display","none");(type.match(/^(text|textarea)$/))?$(expected_trs).css("display",""):$(expected_trs).css("display","none")};ws_plugin__s2member_customRegFieldDelete=function(index){var newFields=new Array();for(var i=0;i<fields.length;i++){if(i!==index){newFields.push(fields[i])}}fields=newFields,updateFields(),buildTable()};ws_plugin__s2member_customRegFieldMoveUp=function(index){if(typeof fields[index]==="object"&&typeof fields[index-1]==="object"){var prevFieldObj=fields[index-1],thisFieldObj=fields[index];fields[index-1]=thisFieldObj,fields[index]=prevFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldMoveDown=function(index){if(typeof fields[index]==="object"&&typeof fields[index+1]==="object"){var nextFieldObj=fields[index+1],thisFieldObj=fields[index];fields[index+1]=thisFieldObj,fields[index]=nextFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldCreate=function(){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field))){fields.push(field),updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+(fields.length-1);alert('Field created successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldUpdate=function(index){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field,index))){fields[index]=field,updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+index;alert('Field updated successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldAdd=function(){buildTools(true)};ws_plugin__s2member_customRegFieldEdit=function(index){buildTools(false,index),scrollReset()};ws_plugin__s2member_customRegFieldCancel=function(){buildTools(),scrollReset()};var validateField=function(field,index){var editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,errors=[],options,i;if(typeof field!=="object"||typeof(field=$.extend(true,{},fieldDefaults,field))!=="object"){alert("Invalid field object. Please try again.");return false}field.sectitle=(field.section==="yes")?field.sectitle:"";field.deflt=(field.type.match(/^(text|textarea)$/))?field.deflt:"";field.deflt=(field.type.match(/^(text)$/))?field.deflt.replace(/[\r\n\t ]+/g," "):field.deflt;field.options=(field.type.match(/^(select|selects|checkboxes|radios)$/))?field.options:"";field.expected=(field.type.match(/^(text|textarea)$/))?field.expected:"";if(!field.id){errors.push("Unique Field ID:\nThis is required. Please try again.")}else{if(fieldIdExists(field.id)&&(!editing||field.id!==fields[index].id)){errors.push("Unique Field ID:\nThat Field ID already exists. Please try again.")}}if(!field.label){errors.push("Field Label/Description:\nThis is required. Please try again.")}if(field.type.match(/^(select|selects|checkboxes|radios)$/)&&!field.options){errors.push("Option Configuration File:\nThis is required. Please try again.")}else{if(field.type.match(/^(select|selects|checkboxes|radios)$/)){for(i=0;i<(options=field.options.split(/[\r\n]+/)).length;i++){if(!(options[i]=$.trim(options[i])).match(/^([^\|]*)(\|)([^\|]*)(\|default)?$/)){errors.push("Option Configuration File:\nInvalid configuration at line #"+(i+1)+".");break}}field.options=$.trim(options.join("\n"))}}if(!(field.levels=field.levels.replace(/ /g,""))){errors.push("Applicable Levels:\nThis is required. Please try again.")}else{if(!field.levels.match(/^(all|[0-9,]+)$/)){errors.push("Applicable Levels:\nShould be comma-delimited Levels, or just type: all.\n(examples: 0,1,2,3,4 or type the word: all)")}}if(field.classes&&field.classes.match(/[^a-z 0-9 _ \-]/i)){errors.push("CSS Classes:\nContains invalid characters. Please try again.\n(only: alphanumerics, underscores, hyphens, spaces)")}if(field.styles&&field.styles.match(/["\=\>\<]/)){errors.push('CSS Styles:\nContains invalid characters. Please try again.\n(do NOT use these characters: = " < >)')}if(field.attrs&&field.attrs.match(/[\>\<]/)){errors.push("Other Attributes:\nContains invalid characters. Please try again.\n(do NOT use these characters: < >)")}if(errors.length>0){alert(errors.join("\n\n"));return false}else{return field}};var updateFields=function(){$fields.val(((fields.length>0)?$.JSON.stringify(fields):""))};var fieldId2Var=function(fieldId){return(typeof fieldId==="string")?$.trim(fieldId).toLowerCase().replace(/[^a-z0-9]/g,"_"):""};var fieldTypeDesc=function(type){var types={text:"Text (single line)",textarea:"Textarea (multi-line)",select:"Select Menu (drop-down)",selects:"Select Menu (multi-option)",checkbox:"Checkbox (single)",pre_checkbox:"Checkbox (pre-checked)",checkboxes:"Checkboxes (multi-option)",radios:"Radio Buttons (multi-option)"};if(typeof types[type]==="string"){return types[type]}return""};var fieldIdExists=function(fieldId){for(var i=0;i<fields.length;i++){if(fields[i].id===fieldId){return true}}};var scrollReset=function(){scrollTo(0,$("div.ws-plugin--s2member-custom-reg-fields-section").offset()["top"]-100)};var buildTools=function(adding,index){var i=0,html="",form="",w=0,h=0,editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,displayForm=(adding||editing)?true:false,field=(editing)?$.extend(true,{},fieldDefaults,fields[index]):fieldDefaults;html+='<a href="#" onclick="ws_plugin__s2member_customRegFieldAdd(); return false;">Add New Field</a>';tb_remove(),$("div#ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form").remove();if(displayForm){form+='<div id="ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form">';form+='<table id="ws-plugin--s2member-custom-reg-field-configuration-tools-form">';form+="<tbody>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">Starts A New Section?</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<select property="section" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);">';form+='<option value="no"'+((field.section==="no")?' selected="selected"':"")+'">No (this Field flows normally)</option>';form+='<option value="yes"'+((field.section==="yes")?' selected="selected"':"")+'">Yes (this Field begins a new section)</option>';form+="</select><br />";form+="<small>Optional. Allows Fields to be grouped into sections.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+'><td colspan="2"><hr /></td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+">";form+='<td colspan="2">';form+="Title for this new section? (optional)<br />";form+='<input type="text" property="sectitle" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle" value="'+esc_attr(field.sectitle)+'" /><br />';form+="<small>If empty, a simple divider will be used by default.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-type"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">Form Field Type: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<select property="type" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);">';form+='<option value="text"'+((field.type==="text")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("text"))+"</option>";form+='<option value="textarea"'+((field.type==="textarea")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("textarea"))+"</option>";form+='<option value="select"'+((field.type==="select")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("select"))+"</option>";form+='<option value="selects"'+((field.type==="selects")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("selects"))+"</option>";form+='<option value="checkbox"'+((field.type==="checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkbox"))+"</option>";form+='<option value="pre_checkbox"'+((field.type==="pre_checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("pre_checkbox"))+"</option>";form+='<option value="checkboxes"'+((field.type==="checkboxes")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkboxes"))+"</option>";form+='<option value="radios"'+((field.type==="radios")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("radios"))+"</option>";form+="</select><br />";form+="<small>The options below may change, based on the Field Type you choose here.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-label"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">Field Label/Desc: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<input type="text" property="label" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label" value="'+esc_attr(field.label)+'" /><br />';form+="<small>Examples: <code>Choose Country</code>, <code>Street Address</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-id"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">Unique Field ID: *</label></label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<input type="text" property="id" maxlength="25" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id" value="'+esc_attr(field.id)+'" /><br />';form+="<small>Examples: <code>country_code</code>, <code>street_address</code></small><br />";form+='<small>e.g. <code>[s2Get user_field="country_code" /]</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-required"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">Field Required: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<select property="required" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<option value="yes"'+((field.required==="yes")?' selected="selected"':"")+'">Yes (required)</option>';form+='<option value="no"'+((field.required==="no")?' selected="selected"':"")+'">No (optional)</option>';form+="</select><br />";form+='<small>If <code>yes</code>, only Users/Members will be "required" to enter this field.</small><br />';form+="<small>* Administrators are exempt from this requirement.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt">Default Text Value: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="deflt" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt" rows="1">'+esc_html(field.deflt)+"</textarea><br />";form+="<small>Default value before user input is received.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">Option Configuration File: * (one option per line)</label><br />';form+="<small>Use a pipe <code>|</code> delimited format: <code>option value|option label</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="options" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options" rows="3">'+esc_html(field.options)+"</textarea><br />";form+="Here is a quick example:<br />";form+="<small>You can also specify a <em>default</em> option:</small><br />";form+="<code>US|United States|default</code><br />";form+="<code>CA|Canada</code><br />";form+="<code>VI|Virgin Islands (U.S.)</code>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">Expected Format: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<select property="expected" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">';form+='<option value=""'+((field.expected==="")?' selected="selected"':"")+'">Anything Goes</option>';form+='<option disabled="disabled"></option>';form+='<optgroup label="Specific Input Types">';form+='<option value="numeric-wp-commas"'+((field.expected==="numeric-wp-commas")?' selected="selected"':"")+'">Numeric (with or without decimals, commas allowed)</option>';form+='<option value="numeric"'+((field.expected==="numeric")?' selected="selected"':"")+'">Numeric (with or without decimals, no commas)</option>';form+='<option value="integer"'+((field.expected==="integer")?' selected="selected"':"")+'">Integer (whole number, without any decimals)</option>';form+='<option value="integer-gt-0"'+((field.expected==="integer-gt-0")?' selected="selected"':"")+'">Integer > 0 (whole number, no decimals, greater than 0)</option>';form+='<option value="float"'+((field.expected==="float")?' selected="selected"':"")+'">Float (floating point number, decimals required)</option>';form+='<option value="float-gt-0"'+((field.expected==="float-gt-0")?' selected="selected"':"")+'">Float > 0 (floating point number, decimals required, greater than 0)</option>';form+='<option value="date"'+((field.expected==="date")?' selected="selected"':"")+'">Date (required date format: dd/mm/yyyy)</option>';form+='<option value="email"'+((field.expected==="email")?' selected="selected"':"")+'">Email (require valid email)</option>';form+='<option value="url"'+((field.expected==="url")?' selected="selected"':"")+'">Full URL (starting with http or https)</option>';form+='<option value="domain"'+((field.expected==="domain")?' selected="selected"':"")+'">Domain Name (domain name only, without http)</option>';form+='<option value="phone"'+((field.expected==="phone")?' selected="selected"':"")+'">Phone # (10 digits w/possible hyphens,spaces,brackets)</option>';form+='<option value="uszip"'+((field.expected==="uszip")?' selected="selected"':"")+'">US Zipcode (5-9 digits w/possible hyphen)</option>';form+='<option value="cazip"'+((field.expected==="cazip")?' selected="selected"':"")+'">Canadian Zipcode (6 alpha-numerics w/possible space)</option>';form+='<option value="uczip"'+((field.expected==="uczip")?' selected="selected"':"")+'">US/Canadian Zipcode (either a US or Canadian zipcode)</option>';form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Any Character Combination">';for(i=1;i<=25;i++){form+='<option value="any-'+i+'"'+((field.expected==="any-"+i)?' selected="selected"':"")+'">Any Character Combination ( '+i+" character minimum )</option>";form+='<option value="any-'+i+'-e"'+((field.expected==="any-"+i+"-e")?' selected="selected"':"")+'">Any Character Combination ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics, Spaces & Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-punctuation-'+i+'"'+((field.expected==="alphanumerics-spaces-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics, Spaces & Punctuation ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-spaces-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics, Spaces & Punctuation ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Spaces Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-'+i+'"'+((field.expected==="alphanumerics-spaces-"+i)?' selected="selected"':"")+'">Alphanumerics & Spaces ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected==="alphanumerics-spaces-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & Spaces ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-punctuation-'+i+'"'+((field.expected==="alphanumerics-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics & Punctuation ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & Punctuation ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-'+i+'"'+((field.expected==="alphanumerics-"+i)?' selected="selected"':"")+'">Alphanumerics ( '+i+" character minimum )</option>";form+='<option value="alphanumerics-'+i+'-e"'+((field.expected==="alphanumerics-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphabetics Only">';for(i=1;i<=25;i++){form+='<option value="alphabetics-'+i+'"'+((field.expected==="alphabetics-"+i)?' selected="selected"':"")+'">Alphabetics ( '+i+" character minimum )</option>";form+='<option value="alphabetics-'+i+'-e"'+((field.expected==="alphabetics-"+i+"-e")?' selected="selected"':"")+'">Alphabetics ( exactly '+i+" character"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Numeric Digits Only">';for(i=1;i<=25;i++){form+='<option value="numerics-'+i+'"'+((field.expected==="numerics-"+i)?' selected="selected"':"")+'">Numeric Digits ( '+i+" digit minimum )</option>";form+='<option value="numerics-'+i+'-e"'+((field.expected==="numerics-"+i+"-e")?' selected="selected"':"")+'">Numeric Digits ( exactly '+i+" digit"+((i>1)?"s":"")+" )</option>"}form+="</optgroup>";form+="</select><br />";form+="<small>Only Users/Members will be required to meet this criteria.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">Applicable Membership Levels: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<input type="text" property="levels" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels" value="'+esc_attr(field.levels)+'" /><br />';form+="<small>Please use comma-delimited Level #'s: <code>0,1,2,3,4</code> or type: <code>all</code>.</small><br />";form+="<small>This allows you to enable this field - only at specific Membership Levels.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">Allow Profile Edits: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<select property="editable" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<option value="yes"'+((field.editable==="yes")?' selected="selected"':"")+'">Yes (editable)</option>';form+='<option value="no"'+((field.editable==="no")?' selected="selected"':"")+'">No (uneditable after registration)</option>';form+='<option value="no-invisible"'+((field.editable==="no-invisible")?' selected="selected"':"")+'">No (uneditable & totally invisible after registration)</option>';form+='<option value="no-always-invisible"'+((field.editable==="no-always-invisible")?' selected="selected"':"")+'">No (uneditable & totally invisible, both during & after registration)</option>';form+='<option value="yes-invisible"'+((field.editable==="yes-invisible")?' selected="selected"':"")+'">Yes (editable after registration / invisible during registration)</option>';form+="</select><br />";form+="<small>If <code>No</code>, this field will be un-editable after registration.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">CSS Classes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<input type="text" property="classes" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes" value="'+esc_attr(field.classes)+'" /><br />';form+="<small>Example: <code>my-style-1 my-style-2</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">CSS Styles: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<input type="text" property="styles" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles" value="'+esc_attr(field.styles)+'" /><br />';form+="<small>Example: <code>color:#000000; background:#FFFFFF;</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">Other Attributes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<input type="text" property="attrs" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs" value="'+esc_attr(field.attrs)+'" /><br />';form+='<small>Example: <code>onkeyup="" onblur=""</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons">';form+='<td align="left">';form+='<input type="button" value="Cancel" onclick="ws_plugin__s2member_customRegFieldCancel();" />';form+="</td>";form+='<td align="right">';form+='<input type="button" value="'+((editing)?"Update This Field":"Create Registration Field")+'" onclick="'+((editing)?"ws_plugin__s2member_customRegFieldUpdate("+index+");":"ws_plugin__s2member_customRegFieldCreate();")+'" />';form+="</td>";form+="</tr>";form+="</tbody>";form+="</table>";form+="<div>";$("body").append(form);tb_show(((editing)?"Editing Registration/Profile Field":"New Custom Registration/Profile Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var buildTable=function(){var l=fields.length,i=0,html="",eo="o";html+="<tbody>";html+="<tr>";html+="<th>Order</th>";html+="<th>Field Type</th>";html+="<th>Unique ID</th>";html+="<th>Required</th>";html+="<th>Levels</th>";html+="<th>- Tools -</th>";html+="</tr>";if(fields.length>0){for(i=0;i<fields.length;i++){html+='<tr class="'+esc_attr((eo=(eo==="o")?"e":"o"))+((fields[i].section==="yes")?" s":"")+" ws-plugin--s2member-custom-reg-field-configuration-table-row-"+i+'">';html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-move-up" href="#" onclick="ws_plugin__s2member_customRegFieldMoveUp('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-move-down" href="#" onclick="ws_plugin__s2member_customRegFieldMoveDown('+i+'); return false;"></a></td>';html+='<td nowrap="nowrap">'+esc_html(fieldTypeDesc(fields[i].type))+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].id)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].required)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].levels)+"</td>";html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-edit" href="#" onclick="ws_plugin__s2member_customRegFieldEdit('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-delete" href="#" onclick="ws_plugin__s2member_customRegFieldDelete('+i+'); return false;"></a></td>';html+="</tr>"}}else{html+="<tr>";html+='<td colspan="6">No Custom Fields are configured.</td>';html+="</tr>"}html+="</tbody>";$table.html(html)};buildTools(),buildTable()})()}}if(location.href.match(/page\=ws-plugin--s2member-res-ops/)){$("input#ws-plugin--s2member-brute-force-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's Brute Force Restriction Logs have all been reset."),$this.val("Reset Brute Force Logs")});return false});$("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's IP Restriction Logs have all been reset."),$this.val("Reset IP Restriction Logs")});return false});$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').change(function(){var thisChange=$(this).val();$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="all"&&this.checked){$this.nextAll(checkboxes).attr({checked:"checked",disabled:"disabled"})}else{if(val==="all"&&!this.checked){$this.nextAll(checkboxes).removeAttr("disabled");(thisChange==="all")?$this.nextAll(checkboxes).removeAttr("checked"):null}}})}).last().trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-down-ops/)){var updateCloudFrontPrivateKey=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyEntry=$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry");var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyEntryValue=$.trim($visiblePrivateKeyEntry.val());if((hiddenPrivateKeyValue&&!visiblePrivateKeyEntryValue)||visiblePrivateKeyEntryValue.match(/[^\r\n\u25CF]/)){$hiddenPrivateKey.val(visiblePrivateKeyEntryValue),$visiblePrivateKeyEntry.val(visiblePrivateKeyEntryValue.replace(/[^\r\n]/g,String.fromCharCode(9679)))}};$("form#ws-plugin--s2member-options-form").submit(updateCloudFrontPrivateKey);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontPrivateKey).trigger("change");var updateCloudFrontDistroCfgs=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyId=$("input#ws-plugin--s2member-amazon-cf-files-private-key-id");var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistrosStatus=$("input#ws-plugin--s2member-amazon-cf-files-distros-auto-config-status");var autoConfigDistrosStatusValue=$.trim($autoConfigDistrosStatus.val());var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyIdValue=$.trim($visiblePrivateKeyId.val());var hiddenPrivateKeyPrevConfigValue=$.trim($hiddenPrivateKey.attr("data-s-prev-config-value")),visiblePrivateKeyIdPrevConfigValue=$.trim($visiblePrivateKeyId.attr("data-s-prev-config-value"));if(autoConfigDistrosStatusValue==="configured"&&((visiblePrivateKeyIdPrevConfigValue&&visiblePrivateKeyIdValue!==visiblePrivateKeyIdPrevConfigValue)||(hiddenPrivateKeyPrevConfigValue&&hiddenPrivateKeyValue!==hiddenPrivateKeyPrevConfigValue))){alert("s2Member will need to delete and re-configure your Amazon CloudFront distributions if you change this. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}else{if(autoConfigDistrosStatusValue!=="configured"&&visiblePrivateKeyIdValue&&hiddenPrivateKeyValue){alert("s2Member will need to auto-configure your Amazon CloudFront distributions for you. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}}};$("input#ws-plugin--s2member-amazon-cf-files-private-key-id").change(updateCloudFrontDistroCfgs);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontDistroCfgs);$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros-w-cnames").change(function(){var $this=$(this),thisChecked=(this.checked)?true:false;var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistroCnames=$("div#ws-plugin--s2member-amazon-cf-files-auto-configure-distro-cnames");(thisChecked)?$autoConfigDistroCnames.show():$autoConfigDistroCnames.hide();(thisChecked)?$autoConfigDistros.attr("checked","checked"):null}).trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){$("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var $this=$(this),val=$this.val();var $viaCron=$("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(val==2){$viaCron.show()}else{$viaCron.hide()}})}if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){$("div.ws-menu-page select[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification)-term$/)}).change(function(){var button=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var trialDisabled=($(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;$("p#ws-plugin--s2member-"+button+"-trial-line").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-trial-then").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-20p-rule").css("display",(trialDisabled?"none":""));(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-period").val(0):null;(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-amount").val("0.00"):null});$("div.ws-menu-page input[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification|ccap)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^(-all|-al|-a|-)[;,]*/gi,""),_all=(this.value.match(/^(-all|-al|-a|-)[;,]*/i))?"-all,":"";if(value.match(/[^a-z_0-9,]/)){this.value=_all+$.trim($.trim(value).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(button){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="",labels={};eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");var shortCode=$("input#ws-plugin--s2member-"+button+"-shortcode");var code=$("textarea#ws-plugin--s2member-"+button+"-button");var modLevel=$("select#ws-plugin--s2member-modification-level");var level=(button==="modification")?modLevel.val().split(":",2)[1]:button.replace(/^level/,"");var label=labels["level"+level].replace(/"/g,"");var desc=$.trim($("input#ws-plugin--s2member-"+button+"-desc").val().replace(/"/g,""));var trialAmount=$("input#ws-plugin--s2member-"+button+"-trial-amount").val().replace(/[^0-9\.]/g,"");var trialPeriod=$("input#ws-plugin--s2member-"+button+"-trial-period").val().replace(/[^0-9]/g,"");var trialTerm=$("select#ws-plugin--s2member-"+button+"-trial-term").val().replace(/[^A-Z]/g,"");var regAmount=$("input#ws-plugin--s2member-"+button+"-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var regRecurTimes="",regRecurRetry="1";var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-"+button+"-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-"+button+"-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&®Term!=="L")?level+":"+cCaps+":"+regPeriod+" "+regTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(trialAmount!=="0"&&(isNaN(trialAmount)||trialAmount<0)){alert("— Oops, a slight problem: —\n\nWhen provided, Trial Amount must be >= 0.00");return false}else{if(trialAmount!=="0"&&trialAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00");return false}else{if(trialTerm==="D"&&trialPeriod>90){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 90.\nIf you want to offer more than 90 days, please choose Weeks or Months from the drop-down.");return false}else{if(trialTerm==="W"&&trialPeriod>52){alert("— Oops, a slight problem: —\n\nMaximum Trial Weeks is: 52.\nIf you want to offer more than 52 weeks, please choose Months from the drop-down.");return false}else{if(trialTerm==="M"&&trialPeriod>24){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 24.\nIf you want to offer more than 24 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>5){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 5.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}}}}}}code.html(code.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(trialPeriod)<=0)?code.html(code.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="(src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;shortCodeTemplateAttrs+=(button==="modification")?'modify="1" ':"";shortCodeTemplateAttrs+='level="'+esc_attr(level)+'" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'" custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"';shortCodeTemplateAttrs+=' ta="'+esc_attr(trialAmount)+'" tp="'+esc_attr(trialPeriod)+'" tt="'+esc_attr(trialTerm)+'" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'" rrt="'+esc_attr(regRecurTimes)+'" rra="'+esc_attr(regRecurRetry)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((button==="modification")?"1":"0")+'"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+esc_attr(regRecur)+'"'));code.html(code.val().replace(/ name\="srt" value\="(.*?)"/,' name="srt" value="'+esc_attr(regRecurTimes)+'"'));code.html(code.val().replace(/ name\="sra" value\="(.*?)"/,' name="sra" value="'+esc_attr(regRecurRetry)+'"'));code.html(code.val().replace(/ name\="a1" value\="(.*?)"/,' name="a1" value="'+esc_attr(trialAmount)+'"'));code.html(code.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+esc_attr(trialPeriod)+'"'));code.html(code.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+esc_attr(trialTerm)+'"'));code.html(code.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+esc_attr(regPeriod)+'"'));code.html(code.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+esc_attr(regTerm)+'"'));$("div#ws-plugin--s2member-"+button+"-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Modification Buttons should be displayed to existing Users/Members, and they should be logged-in, BEFORE clicking this Button."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalCcapButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-ccap-shortcode");var code=$("textarea#ws-plugin--s2member-ccap-button");var desc=$.trim($("input#ws-plugin--s2member-ccap-desc").val().replace(/"/g,""));var regAmount=$("input#ws-plugin--s2member-ccap-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-ccap-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-ccap-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-ccap-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-ccap-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-ccap-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();var levelCcapsPer=(regRecur==="BN"&®Term!=="L")?"*:"+cCaps+":"+regPeriod+" "+regTerm:"*:"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!cCaps||cCaps==="-all"){alert("— Oops, a slight problem: —\n\nPlease provide at least one Custom Capability.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}shortCodeTemplateAttrs+='level="*" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-ccap-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-sp-shortcode");var code=$("textarea#ws-plugin--s2member-sp-button");var leading=$("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var regAmount=$("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var desc=$.trim($("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -› Restriction Options -› Specific Post/Page Access.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}var spIdsHours="sp:"+ids+":"+hours;shortCodeTemplateAttrs+='sp="1" ids="'+esc_attr(ids)+'" exp="'+esc_attr(hours)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(spIdsHours)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-sp-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your WordPress Editor.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalRegLinkGenerate=function(){var level=$("select#ws-plugin--s2member-reg-link-level").val().replace(/[^0-9]/g,"");var subscrID=$.trim($("input#ws-plugin--s2member-reg-link-subscr-id").val());var custom=$.trim($("input#ws-plugin--s2member-reg-link-custom").val());var cCaps=$.trim($.trim($("input#ws-plugin--s2member-reg-link-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());var fixedTerm=$.trim($("input#ws-plugin--s2member-reg-link-fixed-term").val().replace(/[^A-Z 0-9]/gi,"").toUpperCase());var $link=$("p#ws-plugin--s2member-reg-link"),$loading=$("img#ws-plugin--s2member-reg-link-loading");var levelCcapsPer=(fixedTerm&&!fixedTerm.match(/L$/))?level+":"+cCaps+":"+fixedTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!subscrID){alert("— Oops, a slight problem: —\n\nPaid Subscr. ID is a required value.");return false}else{if(!custom||custom.indexOf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq ($_SERVER["HTTP_HOST"]); ?>')!==0){alert("— Oops, a slight problem: —\n\nThe Custom Value MUST start with your domain name.");return false}else{if(fixedTerm&&!fixedTerm.match(/^[1-9]+ (D|W|M|Y|L)$/)){alert("— Oops, a slight problem: —\n\nThe Fixed Term Length is not formatted properly.");return false}}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_reg_access_link_via_ajax",ws_plugin__s2member_reg_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-reg-access-link-via-ajax")); ?>',s2member_reg_access_link_subscr_gateway:"paypal",s2member_reg_access_link_subscr_id:subscrID,s2member_reg_access_link_custom:custom,s2member_reg_access_link_item_number:levelCcapsPer},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var leading=$("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var $link=$("p#ws-plugin--s2member-sp-link"),$loading=$("img#ws-plugin--s2member-sp-link-loading");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -› Restriction Options -› Specific Post/Page Access.");return false}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:ids,s2member_sp_access_link_hours:hours},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false}}if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){$("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var $this=$(this),val=$this.val();var $rows=$("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var $prevImg=$("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(val<=0){$rows.css("display","none"),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(val==1){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(val==2){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}});$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').change(function(){var thisChange=$(this).val(),checkedIndexes=[];$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="removal-deletion"&&this.checked){$this.nextAll(checkboxes).slice(0,2).attr({checked:"checked",disabled:"disabled"})}else{if(val==="removal-deletion"&&!this.checked){$this.nextAll(checkboxes).slice(0,2).removeAttr("disabled");(thisChange==="removal-deletion")?$this.nextAll(checkboxes).slice(0,2).removeAttr("checked"):null}else{if(val==="modification"&&this.checked){$this.nextAll(checkboxes).slice(0,3).attr({checked:"checked",disabled:"disabled"})}else{if(val==="modification"&&!this.checked){(thisChange==="modification")?$this.nextAll(checkboxes).slice(0,3).removeAttr("checked"):null;$this.nextAll(checkboxes).slice(0,3).removeAttr("disabled")}}}}}).each(function(index){(this.checked)?checkedIndexes.push(index):null});$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").removeAttr("disabled");if($.inArray(3,checkedIndexes)===-1&&$.inArray(4,checkedIndexes)===-1&&$.inArray(5,checkedIndexes)===-1&&$.inArray(6,checkedIndexes)===-1){$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").attr("disabled","disabled")}}).last().trigger("change")}});
|
1 |
+
jQuery(document).ready(function($){var esc_attr=esc_html=function(str){return String(str).replace(/"/g,""").replace(/\</g,"<").replace(/\>/g,">")};if(location.href.match(/page\=ws-plugin--s2member/)){$("input.ws-plugin--s2member-update-roles-button, input.ws-plugin--s2member-reset-roles-button").click(function(){var $this=$(this);$this.val("one moment please ...");var levels='<?php echo (int)$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; ?>';var resetUpdate=($this.hasClass("ws-plugin--s2member-reset-roles-button"))?"Reset":"Update";$.post(ajaxurl,{action:"ws_plugin__s2member_update_roles_via_ajax",ws_plugin__s2member_update_roles_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-update-roles-via-ajax")); ?>'},function(response){if(response==="1"){alert("s2Member's Roles/Capabilities "+((resetUpdate.toLowerCase()==="reset")?"have been successfully reset":"updated successfully")+".\nYour installation of s2Member has Membership Levels 0-"+levels+"."),$this.val(resetUpdate+" Roles/Capabilities")}else{if(response==="l"){alert("Sorry, your request failed.\ns2Member's Roles/Capabilities are locked by Filter:\nws_plugin__s2member_lock_roles_caps"),$this.val(resetUpdate+" Roles/Capabilities")}else{alert("Sorry, your request failed.\nAccess denied. Do you have the ability to `create_users`?"),$this.val(resetUpdate+" Roles/Capabilities")}}});return false})}if(location.href.match(/page\=ws-plugin--s2member-logs/)){$("input#ws-plugin--s2member-gateway-debug-logs-extensive-1").click(function(){var $this=$(this),thisChecked=(this.checked)?true:false;if(thisChecked){$("input#ws-plugin--s2member-gateway-debug-logs-1").attr("checked","checked")}});var $toggles=$("a.ws-plugin--s2member-log-file-viewport-toggle");$toggles.click(function(){$("textarea#ws-plugin--s2member-log-file-viewer").each(function(){var $viewer=$(this);if($viewer.attr("data-state")!=="expanded"){$viewer.css({height:($viewer.prop("scrollHeight")+50)+"px","overflow-y":"auto"});$toggles.html("⇑ normalize viewport ❙");$viewer.attr("data-state","expanded")}else{$viewer.css({height:"auto","overflow-y":"scroll"});$toggles.html("⇓ expand viewport ⇓");$viewer.attr("data-state","scrolling")}});return false})}if(location.href.match(/page\=ws-plugin--s2member-mms-ops/)){$("select#ws-plugin--s2member-mms-registration-file").change(function(){if($(this).val()==="wp-signup"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((gv==="all")?"show":"hide")]();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((gv==="all")?((l0v>0)?l0v:"1"):"0"))}else{if($(this).val()==="wp-login"){var gv=$("select#ws-plugin--s2member-mms-registration-grants").val(),l0v=$("input#ws-plugin--s2member-mms-registration-blogs-level0").val();$("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),$("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),$("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide();$("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0").hide();$("input#ws-plugin--s2member-mms-registration-blogs-level0").val("0")}}}).trigger("change");$("select#ws-plugin--s2member-mms-registration-grants").change(function(){$("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}if(location.href.match(/page\=ws-plugin--s2member-gen-ops/)){ws_plugin__s2member_generateSecurityKey=function(){var mt_rand=function(min,max){min=(arguments.length<1)?0:min;max=(arguments.length<2)?2147483647:max;return Math.floor(Math.random()*(max-min+1))+min};var chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";for(var i=0,key="";i<64;i++){key+=chars.substr(mt_rand(0,chars.length-1),1)}$("input#ws-plugin--s2member-sec-encryption-key").val(key);return false};ws_plugin__s2member_enableSecurityKey=function(){if(confirm("Edit Key? Are you sure?\nThis could break your installation!\n\n*Note* If you've been testing s2Member, feel free to change this Key before you go live. Just don't go live, and then change it. You'll have unhappy Customers. Data corruption WILL occur! For your safety, s2Member keeps a history of the last 10 Keys that you've used. If you get yourself into a real situation, s2Member will let you revert back to a previous Key.")){$("input#ws-plugin--s2member-sec-encryption-key").removeAttr("disabled")}return false};ws_plugin__s2member_securityKeyHistory=function(){$("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};$("select#ws-plugin--s2member-new-user-emails-enabled").change(function(){var $pluggable=$("input#ws-plugin--s2member-pluggables-wp-new-user-notification"),$this=$(this),$newUserEmails=$("div#ws-plugin--s2member-new-user-emails");if($pluggable.val()==="0"||$this.val()==="0"){($pluggable.val()==="0")?$this.attr("disabled","disabled"):$this.removeAttr("disabled");$(":input",$newUserEmails).attr("disabled","disabled"),$newUserEmails.css("opacity","0.5")}else{$this.removeAttr("disabled"),$(":input",$newUserEmails).removeAttr("disabled"),$newUserEmails.css("opacity","")}}).trigger("change");$("select#ws-plugin--s2member-login-reg-design-enabled").change(function(){var $this=$(this),$loginRegDesign=$("div#ws-plugin--s2member-login-reg-design");if($this.val()==="0"){$(":input",$loginRegDesign).attr("disabled","disabled"),$loginRegDesign.css("opacity","0.5"),$loginRegDesign.hide()}else{$(":input",$loginRegDesign).removeAttr("disabled"),$loginRegDesign.css("opacity",""),$loginRegDesign.show()}}).trigger("change");if($("input#ws-plugin--s2member-custom-reg-fields").length&&$("div#ws-plugin--s2member-custom-reg-field-configuration").length){(function(){var i,fieldDefaults,tools,table,$tools,$table;var $fields=$("input#ws-plugin--s2member-custom-reg-fields");var $configuration=$("div#ws-plugin--s2member-custom-reg-field-configuration");var fields=($fields.val())?$.JSON.parse($fields.val()):[];fields=(fields instanceof Array)?fields:[];fieldDefaults={section:"no",sectitle:"",id:"",label:"",type:"text",deflt:"",options:"",expected:"",required:"yes",levels:"all",editable:"yes",classes:"",styles:"",attrs:""};for(i=0;i<fields.length;i++){fields[i]=$.extend(true,{},fieldDefaults,fields[i])}tools='<div id="ws-plugin--s2member-custom-reg-field-configuration-tools"></div>',table='<table id="ws-plugin--s2member-custom-reg-field-configuration-table"></table>';$configuration.html(tools+table);$tools=$("div#ws-plugin--s2member-custom-reg-field-configuration-tools"),$table=$("table#ws-plugin--s2member-custom-reg-field-configuration-table");ws_plugin__s2member_customRegFieldSectionChange=function(select){var section=$(select).val();var sectitle_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle";(section==="yes")?$(sectitle_trs).css("display",""):$(sectitle_trs).css("display","none")};ws_plugin__s2member_customRegFieldTypeChange=function(select){var type=$(select).val();var deflt_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt",options_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-options",expected_trs="tr.ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected";(type.match(/^(text|textarea)$/))?$(deflt_trs).css("display",""):$(deflt_trs).css("display","none");(type.match(/^(select|selects|checkboxes|radios)$/))?$(options_trs).css("display",""):$(options_trs).css("display","none");(type.match(/^(text|textarea)$/))?$(expected_trs).css("display",""):$(expected_trs).css("display","none")};ws_plugin__s2member_customRegFieldDelete=function(index){var newFields=new Array();for(var i=0;i<fields.length;i++){if(i!==index){newFields.push(fields[i])}}fields=newFields,updateFields(),buildTable()};ws_plugin__s2member_customRegFieldMoveUp=function(index){if(typeof fields[index]==="object"&&typeof fields[index-1]==="object"){var prevFieldObj=fields[index-1],thisFieldObj=fields[index];fields[index-1]=thisFieldObj,fields[index]=prevFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldMoveDown=function(index){if(typeof fields[index]==="object"&&typeof fields[index+1]==="object"){var nextFieldObj=fields[index+1],thisFieldObj=fields[index];fields[index+1]=thisFieldObj,fields[index]=nextFieldObj;updateFields(),buildTable()}};ws_plugin__s2member_customRegFieldCreate=function(){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field))){fields.push(field),updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+(fields.length-1);alert('Field created successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldUpdate=function(index){var $table=$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form"),field={};$(":input[property]",$table).each(function(){var $this=$(this),property=$this.attr("property"),val=$.trim($this.val());field[property]=val});if((field=validateField(field,index))){fields[index]=field,updateFields(),buildTools(),buildTable(),scrollReset();setTimeout(function(){var row="tr.ws-plugin--s2member-custom-reg-field-configuration-table-row-"+index;alert('Field updated successfully.\n* Remember to "Save All Changes".')},500)}};ws_plugin__s2member_customRegFieldAdd=function(){buildTools(true)};ws_plugin__s2member_customRegFieldEdit=function(index){buildTools(false,index),scrollReset()};ws_plugin__s2member_customRegFieldCancel=function(){buildTools(),scrollReset()};var validateField=function(field,index){var editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,errors=[],options,i;if(typeof field!=="object"||typeof(field=$.extend(true,{},fieldDefaults,field))!=="object"){alert("Invalid field object. Please try again.");return false}field.sectitle=(field.section==="yes")?field.sectitle:"";field.deflt=(field.type.match(/^(text|textarea)$/))?field.deflt:"";field.deflt=(field.type.match(/^(text)$/))?field.deflt.replace(/[\r\n\t ]+/g," "):field.deflt;field.options=(field.type.match(/^(select|selects|checkboxes|radios)$/))?field.options:"";field.expected=(field.type.match(/^(text|textarea)$/))?field.expected:"";if(!field.id){errors.push("Unique Field ID:\nThis is required. Please try again.")}else{if(fieldIdExists(field.id)&&(!editing||field.id!==fields[index].id)){errors.push("Unique Field ID:\nThat Field ID already exists. Please try again.")}}if(!field.label){errors.push("Field Label/Description:\nThis is required. Please try again.")}if(field.type.match(/^(select|selects|checkboxes|radios)$/)&&!field.options){errors.push("Option Configuration File:\nThis is required. Please try again.")}else{if(field.type.match(/^(select|selects|checkboxes|radios)$/)){for(i=0;i<(options=field.options.split(/[\r\n]+/)).length;i++){if(!(options[i]=$.trim(options[i])).match(/^([^\|]*)(\|)([^\|]*)(\|default)?$/)){errors.push("Option Configuration File:\nInvalid configuration at line #"+(i+1)+".");break}}field.options=$.trim(options.join("\n"))}}if(!(field.levels=field.levels.replace(/ /g,""))){errors.push("Applicable Levels:\nThis is required. Please try again.")}else{if(!field.levels.match(/^(all|[0-9,]+)$/)){errors.push("Applicable Levels:\nShould be comma-delimited Levels, or just type: all.\n(examples: 0,1,2,3,4 or type the word: all)")}}if(field.classes&&field.classes.match(/[^a-z 0-9 _ \-]/i)){errors.push("CSS Classes:\nContains invalid characters. Please try again.\n(only: alphanumerics, underscores, hyphens, spaces)")}if(field.styles&&field.styles.match(/["\=\>\<]/)){errors.push('CSS Styles:\nContains invalid characters. Please try again.\n(do NOT use these characters: = " < >)')}if(field.attrs&&field.attrs.match(/[\>\<]/)){errors.push("Other Attributes:\nContains invalid characters. Please try again.\n(do NOT use these characters: < >)")}if(errors.length>0){alert(errors.join("\n\n"));return false}else{return field}};var updateFields=function(){$fields.val(((fields.length>0)?$.JSON.stringify(fields):""))};var fieldId2Var=function(fieldId){return(typeof fieldId==="string")?$.trim(fieldId).toLowerCase().replace(/[^a-z0-9]/g,"_"):""};var fieldTypeDesc=function(type){var types={text:"Text (single line)",textarea:"Textarea (multi-line)",select:"Select Menu (drop-down)",selects:"Select Menu (multi-option)",checkbox:"Checkbox (single)",pre_checkbox:"Checkbox (pre-checked)",checkboxes:"Checkboxes (multi-option)",radios:"Radio Buttons (multi-option)"};if(typeof types[type]==="string"){return types[type]}return""};var fieldIdExists=function(fieldId){for(var i=0;i<fields.length;i++){if(fields[i].id===fieldId){return true}}};var scrollReset=function(){scrollTo(0,$("div.ws-plugin--s2member-custom-reg-fields-section").offset()["top"]-100)};var buildTools=function(adding,index){var i=0,html="",form="",w=0,h=0,editing=(typeof index==="number"&&typeof fields[index]==="object")?true:false,displayForm=(adding||editing)?true:false,field=(editing)?$.extend(true,{},fieldDefaults,fields[index]):fieldDefaults;html+='<a href="#" onclick="ws_plugin__s2member_customRegFieldAdd(); return false;">Add New Field</a>';tb_remove(),$("div#ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form").remove();if(displayForm){form+='<div id="ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form">';form+='<table id="ws-plugin--s2member-custom-reg-field-configuration-tools-form">';form+="<tbody>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">Starts A New Section?</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section">';form+='<td colspan="2">';form+='<select property="section" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-section" onchange="ws_plugin__s2member_customRegFieldSectionChange(this);">';form+='<option value="no"'+((field.section==="no")?' selected="selected"':"")+'">No (this Field flows normally)</option>';form+='<option value="yes"'+((field.section==="yes")?' selected="selected"':"")+'">Yes (this Field begins a new section)</option>';form+="</select><br />";form+="<small>Optional. Allows Fields to be grouped into sections.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+'><td colspan="2"><hr /></td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle ws-plugin--s2member-custom-reg-field-configuration-tools-form-section"'+((field.section==="yes")?"":' style="display:none;"')+">";form+='<td colspan="2">';form+="Title for this new section? (optional)<br />";form+='<input type="text" property="sectitle" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-sectitle" value="'+esc_attr(field.sectitle)+'" /><br />';form+="<small>If empty, a simple divider will be used by default.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-type"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">Form Field Type: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type">';form+='<td colspan="2">';form+='<select property="type" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-type" onchange="ws_plugin__s2member_customRegFieldTypeChange(this);">';form+='<option value="text"'+((field.type==="text")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("text"))+"</option>";form+='<option value="textarea"'+((field.type==="textarea")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("textarea"))+"</option>";form+='<option value="select"'+((field.type==="select")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("select"))+"</option>";form+='<option value="selects"'+((field.type==="selects")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("selects"))+"</option>";form+='<option value="checkbox"'+((field.type==="checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkbox"))+"</option>";form+='<option value="pre_checkbox"'+((field.type==="pre_checkbox")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("pre_checkbox"))+"</option>";form+='<option value="checkboxes"'+((field.type==="checkboxes")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("checkboxes"))+"</option>";form+='<option value="radios"'+((field.type==="radios")?' selected="selected"':"")+'">'+esc_html(fieldTypeDesc("radios"))+"</option>";form+="</select><br />";form+="<small>The options below may change, based on the Field Type you choose here.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-label"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">Field Label/Desc: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label">';form+='<td colspan="2">';form+='<input type="text" property="label" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-label" value="'+esc_attr(field.label)+'" /><br />';form+="<small>Examples: <code>Choose Country</code>, <code>Street Address</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-id"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">Unique Field ID: *</label></label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id">';form+='<td colspan="2">';form+='<input type="text" property="id" maxlength="25" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-id" value="'+esc_attr(field.id)+'" /><br />';form+="<small>Examples: <code>country_code</code>, <code>street_address</code></small><br />";form+='<small>e.g. <code>[s2Get user_field="country_code" /]</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-required"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">Field Required: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<td colspan="2">';form+='<select property="required" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-required">';form+='<option value="yes"'+((field.required==="yes")?' selected="selected"':"")+'">Yes (required)</option>';form+='<option value="no"'+((field.required==="no")?' selected="selected"':"")+'">No (optional)</option>';form+="</select><br />";form+='<small>If <code>yes</code>, only Users/Members will be "required" to enter this field.</small><br />';form+="<small>* Administrators are exempt from this requirement.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt">Default Text Value: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="deflt" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-deflt" rows="1">'+esc_html(field.deflt)+"</textarea><br />";form+="<small>Default value before user input is received.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options">Option Configuration File: * (one option per line)</label><br />';form+="<small>Use a pipe <code>|</code> delimited format: <code>option value|option label</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options"'+((field.type.match(/^(select|selects|checkboxes|radios)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<textarea property="options" wrap="off" spellcheck="false" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-options" rows="3">'+esc_html(field.options)+"</textarea><br />";form+="Here is a quick example:<br />";form+="<small>You can also specify a <em>default</em> option:</small><br />";form+="<code>US|United States|default</code><br />";form+="<code>CA|Canada</code><br />";form+="<code>VI|Virgin Islands (U.S.)</code>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+'><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">Expected Format: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected"'+((field.type.match(/^(text|textarea)$/))?"":' style="display:none;"')+">";form+='<td colspan="2">';form+='<select property="expected" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-expected">';form+='<option value=""'+((field.expected==="")?' selected="selected"':"")+'">Anything Goes</option>';form+='<option disabled="disabled"></option>';form+='<optgroup label="Specific Input Types">';form+='<option value="numeric-wp-commas"'+((field.expected==="numeric-wp-commas")?' selected="selected"':"")+'">Numeric (with or without decimals, commas allowed)</option>';form+='<option value="numeric"'+((field.expected==="numeric")?' selected="selected"':"")+'">Numeric (with or without decimals, no commas)</option>';form+='<option value="integer"'+((field.expected==="integer")?' selected="selected"':"")+'">Integer (whole number, without any decimals)</option>';form+='<option value="integer-gt-0"'+((field.expected==="integer-gt-0")?' selected="selected"':"")+'">Integer > 0 (whole number, no decimals, greater than 0)</option>';form+='<option value="float"'+((field.expected==="float")?' selected="selected"':"")+'">Float (floating point number, decimals required)</option>';form+='<option value="float-gt-0"'+((field.expected==="float-gt-0")?' selected="selected"':"")+'">Float > 0 (floating point number, decimals required, greater than 0)</option>';form+='<option value="date"'+((field.expected==="date")?' selected="selected"':"")+'">Date (required date format: dd/mm/yyyy)</option>';form+='<option value="email"'+((field.expected==="email")?' selected="selected"':"")+'">Email (require valid email)</option>';form+='<option value="url"'+((field.expected==="url")?' selected="selected"':"")+'">Full URL (starting with http or https)</option>';form+='<option value="domain"'+((field.expected==="domain")?' selected="selected"':"")+'">Domain Name (domain name only, without http)</option>';form+='<option value="phone"'+((field.expected==="phone")?' selected="selected"':"")+'">Phone # (10 digits w/possible hyphens,spaces,brackets)</option>';form+='<option value="uszip"'+((field.expected==="uszip")?' selected="selected"':"")+'">US Zipcode (5-9 digits w/possible hyphen)</option>';form+='<option value="cazip"'+((field.expected==="cazip")?' selected="selected"':"")+'">Canadian Zipcode (6 alpha-numerics w/possible space)</option>';form+='<option value="uczip"'+((field.expected==="uczip")?' selected="selected"':"")+'">US/Canadian Zipcode (either a US or Canadian zipcode)</option>';form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Any Character Combination">';for(i=1;i<=25;i++){form+='<option value="any-'+i+'"'+((field.expected==="any-"+i)?' selected="selected"':"")+'">Any Character Combination ('+i+" character minimum)</option>";form+='<option value="any-'+i+'-e"'+((field.expected==="any-"+i+"-e")?' selected="selected"':"")+'">Any Character Combination (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics, Spaces & Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-punctuation-'+i+'"'+((field.expected==="alphanumerics-spaces-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics, Spaces & Punctuation ('+i+" character minimum)</option>";form+='<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-spaces-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics, Spaces & Punctuation (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Spaces Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-spaces-'+i+'"'+((field.expected==="alphanumerics-spaces-"+i)?' selected="selected"':"")+'">Alphanumerics & Spaces ('+i+" character minimum)</option>";form+='<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected==="alphanumerics-spaces-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & Spaces (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics & Punctuation Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-punctuation-'+i+'"'+((field.expected==="alphanumerics-punctuation-"+i)?' selected="selected"':"")+'">Alphanumerics & Punctuation ('+i+" character minimum)</option>";form+='<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected==="alphanumerics-punctuation-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics & Punctuation (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphanumerics Only">';for(i=1;i<=25;i++){form+='<option value="alphanumerics-'+i+'"'+((field.expected==="alphanumerics-"+i)?' selected="selected"':"")+'">Alphanumerics ('+i+" character minimum)</option>";form+='<option value="alphanumerics-'+i+'-e"'+((field.expected==="alphanumerics-"+i+"-e")?' selected="selected"':"")+'">Alphanumerics (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Alphabetics Only">';for(i=1;i<=25;i++){form+='<option value="alphabetics-'+i+'"'+((field.expected==="alphabetics-"+i)?' selected="selected"':"")+'">Alphabetics ('+i+" character minimum)</option>";form+='<option value="alphabetics-'+i+'-e"'+((field.expected==="alphabetics-"+i+"-e")?' selected="selected"':"")+'">Alphabetics (exactly '+i+" character"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+='<option disabled="disabled"></option>';form+='<optgroup label="Numeric Digits Only">';for(i=1;i<=25;i++){form+='<option value="numerics-'+i+'"'+((field.expected==="numerics-"+i)?' selected="selected"':"")+'">Numeric Digits ('+i+" digit minimum)</option>";form+='<option value="numerics-'+i+'-e"'+((field.expected==="numerics-"+i+"-e")?' selected="selected"':"")+'">Numeric Digits (exactly '+i+" digit"+((i>1)?"s":"")+")</option>"}form+="</optgroup>";form+="</select><br />";form+="<small>Only Users/Members will be required to meet this criteria.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">Applicable Membership Levels: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels">';form+='<td colspan="2">';form+='<input type="text" property="levels" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-levels" value="'+esc_attr(field.levels)+'" /><br />';form+="<small>Please use comma-delimited Level #'s: <code>0,1,2,3,4</code> or type: <code>all</code>.</small><br />";form+="<small>This allows you to enable this field - only at specific Membership Levels.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">Allow Profile Edits: *</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<td colspan="2">';form+='<select property="editable" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-editable">';form+='<option value="yes"'+((field.editable==="yes")?' selected="selected"':"")+'">Yes (editable)</option>';form+='<option value="no"'+((field.editable==="no")?' selected="selected"':"")+'">No (uneditable after registration)</option>';form+='<option value="no-invisible"'+((field.editable==="no-invisible")?' selected="selected"':"")+'">No (uneditable & totally invisible after registration)</option>';form+='<option value="no-always-invisible"'+((field.editable==="no-always-invisible")?' selected="selected"':"")+'">No (uneditable & totally invisible, both during & after registration)</option>';form+='<option value="yes-invisible"'+((field.editable==="yes-invisible")?' selected="selected"':"")+'">Yes (editable after registration / invisible during registration)</option>';form+="</select><br />";form+="<small>If <code>No</code>, this field will be un-editable after registration.</small><br />";form+="<small>* Administrators are exempt from this.</small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">CSS Classes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes">';form+='<td colspan="2">';form+='<input type="text" property="classes" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-classes" value="'+esc_attr(field.classes)+'" /><br />';form+="<small>Example: <code>my-style-1 my-style-2</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">CSS Styles: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles">';form+='<td colspan="2">';form+='<input type="text" property="styles" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-styles" value="'+esc_attr(field.styles)+'" /><br />';form+="<small>Example: <code>color:#000000; background:#FFFFFF;</code></small>";form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<label for="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">Other Attributes: (optional)</label>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs">';form+='<td colspan="2">';form+='<input type="text" property="attrs" autocomplete="off" id="ws-plugin--s2member-custom-reg-field-configuration-tools-form-attrs" value="'+esc_attr(field.attrs)+'" /><br />';form+='<small>Example: <code>onkeyup="" onblur=""</code></small>';form+="</td>";form+="</tr>";form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-spacer ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons"><td colspan="2"> </td></tr>';form+='<tr class="ws-plugin--s2member-custom-reg-field-configuration-tools-form-buttons">';form+='<td align="left">';form+='<input type="button" value="Cancel" onclick="ws_plugin__s2member_customRegFieldCancel();" />';form+="</td>";form+='<td align="right">';form+='<input type="button" value="'+((editing)?"Update This Field":"Create Registration Field")+'" onclick="'+((editing)?"ws_plugin__s2member_customRegFieldUpdate("+index+");":"ws_plugin__s2member_customRegFieldCreate();")+'" />';form+="</td>";form+="</tr>";form+="</tbody>";form+="</table>";form+="<div>";$("body").append(form);tb_show(((editing)?"Editing Registration/Profile Field":"New Custom Registration/Profile Field"),"#TB_inline?inlineId=ws-plugin--s2member-custom-reg-field-configuration-thickbox-tools-form");$("table#ws-plugin--s2member-custom-reg-field-configuration-tools-form").show()}$tools.html(html)};var buildTable=function(){var l=fields.length,i=0,html="",eo="o";html+="<tbody>";html+="<tr>";html+="<th>Order</th>";html+="<th>Field Type</th>";html+="<th>Unique ID</th>";html+="<th>Required</th>";html+="<th>Levels</th>";html+="<th>- Tools -</th>";html+="</tr>";if(fields.length>0){for(i=0;i<fields.length;i++){html+='<tr class="'+esc_attr((eo=(eo==="o")?"e":"o"))+((fields[i].section==="yes")?" s":"")+" ws-plugin--s2member-custom-reg-field-configuration-table-row-"+i+'">';html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-move-up" href="#" onclick="ws_plugin__s2member_customRegFieldMoveUp('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-move-down" href="#" onclick="ws_plugin__s2member_customRegFieldMoveDown('+i+'); return false;"></a></td>';html+='<td nowrap="nowrap">'+esc_html(fieldTypeDesc(fields[i].type))+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].id)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].required)+"</td>";html+='<td nowrap="nowrap">'+esc_html(fields[i].levels)+"</td>";html+='<td nowrap="nowrap"><a class="ws-plugin--s2member-custom-reg-field-configuration-edit" href="#" onclick="ws_plugin__s2member_customRegFieldEdit('+i+'); return false;"></a><a class="ws-plugin--s2member-custom-reg-field-configuration-delete" href="#" onclick="ws_plugin__s2member_customRegFieldDelete('+i+'); return false;"></a></td>';html+="</tr>"}}else{html+="<tr>";html+='<td colspan="6">No Custom Fields are configured.</td>';html+="</tr>"}html+="</tbody>";$table.html(html)};buildTools(),buildTable()})()}}if(location.href.match(/page\=ws-plugin--s2member-res-ops/)){$("input#ws-plugin--s2member-brute-force-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's Brute Force Restriction Logs have all been reset."),$this.val("Reset Brute Force Logs")});return false});$("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var $this=$(this);$this.val("one moment please ...");$.post(ajaxurl,{action:"ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax",ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(response){alert("s2Member's IP Restriction Logs have all been reset."),$this.val("Reset IP Restriction Logs")});return false});$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').change(function(){var thisChange=$(this).val();$('div.ws-plugin--s2member-query-level-access-section input[type="checkbox"][name="ws_plugin__s2member_filter_wp_query[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="all"&&this.checked){$this.nextAll(checkboxes).attr({checked:"checked",disabled:"disabled"})}else{if(val==="all"&&!this.checked){$this.nextAll(checkboxes).removeAttr("disabled");(thisChange==="all")?$this.nextAll(checkboxes).removeAttr("checked"):null}}})}).last().trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-down-ops/)){var updateCloudFrontPrivateKey=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyEntry=$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry");var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyEntryValue=$.trim($visiblePrivateKeyEntry.val());if((hiddenPrivateKeyValue&&!visiblePrivateKeyEntryValue)||visiblePrivateKeyEntryValue.match(/[^\r\n\u25CF]/)){$hiddenPrivateKey.val(visiblePrivateKeyEntryValue),$visiblePrivateKeyEntry.val(visiblePrivateKeyEntryValue.replace(/[^\r\n]/g,String.fromCharCode(9679)))}};$("form#ws-plugin--s2member-options-form").submit(updateCloudFrontPrivateKey);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontPrivateKey).trigger("change");var updateCloudFrontDistroCfgs=function(){var $hiddenPrivateKey=$("input#ws-plugin--s2member-amazon-cf-files-private-key");var $visiblePrivateKeyId=$("input#ws-plugin--s2member-amazon-cf-files-private-key-id");var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistrosStatus=$("input#ws-plugin--s2member-amazon-cf-files-distros-auto-config-status");var autoConfigDistrosStatusValue=$.trim($autoConfigDistrosStatus.val());var hiddenPrivateKeyValue=$.trim($hiddenPrivateKey.val()),visiblePrivateKeyIdValue=$.trim($visiblePrivateKeyId.val());var hiddenPrivateKeyPrevConfigValue=$.trim($hiddenPrivateKey.attr("data-s-prev-config-value")),visiblePrivateKeyIdPrevConfigValue=$.trim($visiblePrivateKeyId.attr("data-s-prev-config-value"));if(autoConfigDistrosStatusValue==="configured"&&((visiblePrivateKeyIdPrevConfigValue&&visiblePrivateKeyIdValue!==visiblePrivateKeyIdPrevConfigValue)||(hiddenPrivateKeyPrevConfigValue&&hiddenPrivateKeyValue!==hiddenPrivateKeyPrevConfigValue))){alert("s2Member will need to delete and re-configure your Amazon CloudFront distributions if you change this. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}else{if(autoConfigDistrosStatusValue!=="configured"&&visiblePrivateKeyIdValue&&hiddenPrivateKeyValue){alert("s2Member will need to auto-configure your Amazon CloudFront distributions for you. When you're done editing, click (Save All Changes) below.");$autoConfigDistros.attr("checked","checked")}}};$("input#ws-plugin--s2member-amazon-cf-files-private-key-id").change(updateCloudFrontDistroCfgs);$("textarea#ws-plugin--s2member-amazon-cf-files-private-key-entry").change(updateCloudFrontDistroCfgs);$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros-w-cnames").change(function(){var $this=$(this),thisChecked=(this.checked)?true:false;var $autoConfigDistros=$("input#ws-plugin--s2member-amazon-cf-files-auto-configure-distros");var $autoConfigDistroCnames=$("div#ws-plugin--s2member-amazon-cf-files-auto-configure-distro-cnames");(thisChecked)?$autoConfigDistroCnames.show():$autoConfigDistroCnames.hide();(thisChecked)?$autoConfigDistros.attr("checked","checked"):null}).trigger("change")}if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){$("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var $this=$(this),val=$this.val();var $viaCron=$("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(val==2){$viaCron.show()}else{$viaCron.hide()}})}if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){$("div.ws-menu-page select[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification)-term$/)}).change(function(){var button=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var trialDisabled=($(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;$("p#ws-plugin--s2member-"+button+"-trial-line").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-trial-then").css("display",(trialDisabled?"none":""));$("span#ws-plugin--s2member-"+button+"-20p-rule").css("display",(trialDisabled?"none":""));(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-period").val(0):null;(trialDisabled)?$("input#ws-plugin--s2member-"+button+"-trial-amount").val("0.00"):null});$("div.ws-menu-page input[id]").filter(function(){return this.id.match(/^ws-plugin--s2member-(level[1-9][0-9]*|modification|ccap)-ccaps$/)}).keyup(function(){var value=this.value.replace(/^(-all|-al|-a|-)[;,]*/gi,""),_all=(this.value.match(/^(-all|-al|-a|-)[;,]*/i))?"-all,":"";if(value.match(/[^a-z_0-9,]/)){this.value=_all+$.trim($.trim(value).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(button){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="",labels={};eval("<?php echo c_ws_plugin__s2member_utils_strings::esc_dq($labels); ?>");var shortCode=$("input#ws-plugin--s2member-"+button+"-shortcode");var code=$("textarea#ws-plugin--s2member-"+button+"-button");var modLevel=$("select#ws-plugin--s2member-modification-level");var level=(button==="modification")?modLevel.val().split(":",2)[1]:button.replace(/^level/,"");var label=labels["level"+level].replace(/"/g,"");var desc=$.trim($("input#ws-plugin--s2member-"+button+"-desc").val().replace(/"/g,""));var trialAmount=$("input#ws-plugin--s2member-"+button+"-trial-amount").val().replace(/[^0-9\.]/g,"");var trialPeriod=$("input#ws-plugin--s2member-"+button+"-trial-period").val().replace(/[^0-9]/g,"");var trialTerm=$("select#ws-plugin--s2member-"+button+"-trial-term").val().replace(/[^A-Z]/g,"");var regAmount=$("input#ws-plugin--s2member-"+button+"-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-"+button+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var regRecurTimes="",regRecurRetry="1";var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-"+button+"-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-"+button+"-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-"+button+"-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();trialPeriod=(regRecur==="BN")?"0":trialPeriod;trialAmount=(!trialAmount||isNaN(trialAmount)||trialAmount<0.01||trialPeriod<=0)?"0":trialAmount;var levelCcapsPer=(regRecur==="BN"&®Term!=="L")?level+":"+cCaps+":"+regPeriod+" "+regTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(trialAmount!=="0"&&(isNaN(trialAmount)||trialAmount<0)){alert("— Oops, a slight problem: —\n\nWhen provided, Trial Amount must be >= 0.00");return false}else{if(trialAmount!=="0"&&trialAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Trial Amount is: 10000.00");return false}else{if(trialTerm==="D"&&trialPeriod>90){alert("— Oops, a slight problem: —\n\nMaximum Trial Days is: 90.\nIf you want to offer more than 90 days, please choose Weeks or Months from the drop-down.");return false}else{if(trialTerm==="W"&&trialPeriod>52){alert("— Oops, a slight problem: —\n\nMaximum Trial Weeks is: 52.\nIf you want to offer more than 52 weeks, please choose Months from the drop-down.");return false}else{if(trialTerm==="M"&&trialPeriod>24){alert("— Oops, a slight problem: —\n\nMaximum Trial Months is: 24.\nIf you want to offer more than 24 months, please choose Years from the drop-down.");return false}else{if(trialTerm==="Y"&&trialPeriod>5){alert("— Oops, a slight problem: —\n\nMax Trial Period Years is: 5.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}}}}}}code.html(code.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(trialPeriod)<=0)?code.html(code.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(regRecur==="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="(src|srt|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(regRecur!=="BN")?code.html(code.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;shortCodeTemplateAttrs+=(button==="modification")?'modify="1" ':"";shortCodeTemplateAttrs+='level="'+esc_attr(level)+'" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'" custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"';shortCodeTemplateAttrs+=' ta="'+esc_attr(trialAmount)+'" tp="'+esc_attr(trialPeriod)+'" tt="'+esc_attr(trialTerm)+'" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'" rrt="'+esc_attr(regRecurTimes)+'" rra="'+esc_attr(regRecurRetry)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((button==="modification")?"1":"0")+'"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+esc_attr(regRecur)+'"'));code.html(code.val().replace(/ name\="srt" value\="(.*?)"/,' name="srt" value="'+esc_attr(regRecurTimes)+'"'));code.html(code.val().replace(/ name\="sra" value\="(.*?)"/,' name="sra" value="'+esc_attr(regRecurRetry)+'"'));code.html(code.val().replace(/ name\="a1" value\="(.*?)"/,' name="a1" value="'+esc_attr(trialAmount)+'"'));code.html(code.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+esc_attr(trialPeriod)+'"'));code.html(code.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+esc_attr(trialTerm)+'"'));code.html(code.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+esc_attr(regAmount)+'"'));code.html(code.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+esc_attr(regPeriod)+'"'));code.html(code.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+esc_attr(regTerm)+'"'));$("div#ws-plugin--s2member-"+button+"-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));(button==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Modification Buttons should be displayed to existing Users/Members, and they should be logged-in, BEFORE clicking this Button."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalCcapButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-ccap-shortcode");var code=$("textarea#ws-plugin--s2member-ccap-button");var desc=$.trim($("input#ws-plugin--s2member-ccap-desc").val().replace(/"/g,""));var regAmount=$("input#ws-plugin--s2member-ccap-amount").val().replace(/[^0-9\.]/g,"");var regPeriod=$("select#ws-plugin--s2member-ccap-term").val().split("-")[0].replace(/[^0-9]/g,"");var regTerm=$("select#ws-plugin--s2member-ccap-term").val().split("-")[1].replace(/[^A-Z]/g,"");var regRecur=$("select#ws-plugin--s2member-ccap-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-ccap-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-ccap-currency").val().replace(/[^A-Z]/g,"");var cCaps=$.trim($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).replace(/^(-all|-al|-a|-)[;,]*/gi,"").replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());cCaps=($.trim($("input#ws-plugin--s2member-ccap-ccaps").val()).match(/^(-all|-al|-a|-)[;,]*/i))?((cCaps)?"-all,":"-all")+cCaps.toLowerCase():cCaps.toLowerCase();var levelCcapsPer=(regRecur==="BN"&®Term!=="L")?"*:"+cCaps+":"+regPeriod+" "+regTerm:"*:"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!cCaps||cCaps==="-all"){alert("— Oops, a slight problem: —\n\nPlease provide at least one Custom Capability.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}shortCodeTemplateAttrs+='level="*" ccaps="'+esc_attr(cCaps)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'" rp="'+esc_attr(regPeriod)+'" rt="'+esc_attr(regTerm)+'" rr="'+esc_attr(regRecur)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(levelCcapsPer)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-ccap-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your Login Welcome Page, or wherever you feel it would be most appropriate.\n\n* Remember, Independent Custom Capability Buttons should ONLY be displayed to existing Users/Members, and they MUST be logged-in, BEFORE clicking this Button.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var shortCodeTemplate='[s2Member-PayPal-Button %%attrs%% image="default" output="button" /]',shortCodeTemplateAttrs="";var shortCode=$("input#ws-plugin--s2member-sp-shortcode");var code=$("textarea#ws-plugin--s2member-sp-button");var leading=$("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var regAmount=$("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var desc=$.trim($("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var localeCode="",digital="0",noShipping="1";var pageStyle=$.trim($("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var currencyCode=$("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -› Restriction Options -› Specific Post/Page Access.");return false}else{if(!regAmount||isNaN(regAmount)||regAmount<0.01){alert("— Oops, a slight problem: —\n\nAmount must be >= 0.01");return false}else{if(regAmount>10000&¤cyCode.toUpperCase()==="USD"){alert("— Oops, a slight problem: —\n\nMaximum Amount is: 10000.00");return false}else{if(!desc){alert("— Oops, a slight problem: —\n\nPlease type a Description for this Button.");return false}}}}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}var spIdsHours="sp:"+ids+":"+hours;shortCodeTemplateAttrs+='sp="1" ids="'+esc_attr(ids)+'" exp="'+esc_attr(hours)+'" desc="'+esc_attr(desc)+'" ps="'+esc_attr(pageStyle)+'" lc="'+esc_attr(localeCode)+'" cc="'+esc_attr(currencyCode)+'" dg="'+esc_attr(digital)+'" ns="'+esc_attr(noShipping)+'"';shortCodeTemplateAttrs+=' custom="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>" ra="'+esc_attr(regAmount)+'"';shortCode.val(shortCodeTemplate.replace(/%%attrs%%/,shortCodeTemplateAttrs));code.html(code.val().replace(/ name\="lc" value\="(.*?)"/,' name="lc" value="'+esc_attr(localeCode)+'"'));code.html(code.val().replace(/ name\="no_shipping" value\="(.*?)"/,' name="no_shipping" value="'+esc_attr(noShipping)+'"'));code.html(code.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+esc_attr(desc)+'"'));code.html(code.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+esc_attr(spIdsHours)+'"'));code.html(code.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+esc_attr(pageStyle)+'"'));code.html(code.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+esc_attr(currencyCode)+'"'));code.html(code.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"])); ?>"'));code.html(code.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+esc_attr(regAmount)+'"'));$("div#ws-plugin--s2member-sp-button-prev").html(code.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_VALUE_FOR_PP_INV\(\); \?\>/g,Math.round(new Date().getTime())+'~<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["REMOTE_ADDR"])); ?>').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0|ON1|OS1); \?\>/g,""));alert("Your Button has been generated.\nPlease copy/paste the Shortcode into your WordPress Editor.");shortCode.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalRegLinkGenerate=function(){var level=$("select#ws-plugin--s2member-reg-link-level").val().replace(/[^0-9]/g,"");var subscrID=$.trim($("input#ws-plugin--s2member-reg-link-subscr-id").val());var custom=$.trim($("input#ws-plugin--s2member-reg-link-custom").val());var cCaps=$.trim($.trim($("input#ws-plugin--s2member-reg-link-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^a-z_0-9,]/gi,"").toLowerCase());var fixedTerm=$.trim($("input#ws-plugin--s2member-reg-link-fixed-term").val().replace(/[^A-Z 0-9]/gi,"").toUpperCase());var $link=$("p#ws-plugin--s2member-reg-link"),$loading=$("img#ws-plugin--s2member-reg-link-loading");var levelCcapsPer=(fixedTerm&&!fixedTerm.match(/L$/))?level+":"+cCaps+":"+fixedTerm:level+":"+cCaps;levelCcapsPer=levelCcapsPer.replace(/\:+$/g,"");if(!subscrID){alert("— Oops, a slight problem: —\n\nPaid Subscr. ID is a required value.");return false}else{if(!custom||custom.indexOf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq ($_SERVER["HTTP_HOST"]); ?>')!==0){alert("— Oops, a slight problem: —\n\nThe Custom Value MUST start with your domain name.");return false}else{if(fixedTerm&&!fixedTerm.match(/^[1-9]+ (D|W|M|Y|L)$/)){alert("— Oops, a slight problem: —\n\nThe Fixed Term Length is not formatted properly.");return false}}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_reg_access_link_via_ajax",ws_plugin__s2member_reg_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-reg-access-link-via-ajax")); ?>',s2member_reg_access_link_subscr_gateway:"paypal",s2member_reg_access_link_subscr_id:subscrID,s2member_reg_access_link_custom:custom,s2member_reg_access_link_item_number:levelCcapsPer},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var leading=$("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var additionals=$("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var hours=$("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var $link=$("p#ws-plugin--s2member-sp-link"),$loading=$("img#ws-plugin--s2member-sp-link-loading");if(!leading){alert("— Oops, a slight problem: —\n\nPlease select a Leading Post/Page.\n\n*Tip* If there are no Posts/Pages in the menu, it's because you've not configured s2Member for Specific Post/Page Access yet. See: s2Member -› Restriction Options -› Specific Post/Page Access.");return false}for(var i=0,ids=leading;i<additionals.length;i++){if(additionals[i]&&additionals[i]!==leading){ids+=","+additionals[i]}}$link.hide(),$loading.show(),$.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:ids,s2member_sp_access_link_hours:hours},function(response){$link.show().html('<a href="'+esc_attr(response)+'" target="_blank" rel="external">'+esc_html(response)+"</a>"),$loading.hide()});return false}}if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){$("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var $this=$(this),val=$this.val();var $rows=$("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var $prevImg=$("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(val<=0){$rows.css("display","none"),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(val==1){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(val==2){$rows.css("display",""),$prevImg.attr("src",$prevImg.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}});$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').change(function(){var thisChange=$(this).val(),checkedIndexes=[];$('div.ws-plugin--s2member-opt-out-section input[type="checkbox"][name="ws_plugin__s2member_custom_reg_auto_opt_outs[]"]').each(function(){var $this=$(this),val=$this.val(),checkboxes='input[type="checkbox"]';if(val==="removal-deletion"&&this.checked){$this.nextAll(checkboxes).slice(0,2).attr({checked:"checked",disabled:"disabled"})}else{if(val==="removal-deletion"&&!this.checked){$this.nextAll(checkboxes).slice(0,2).removeAttr("disabled");(thisChange==="removal-deletion")?$this.nextAll(checkboxes).slice(0,2).removeAttr("checked"):null}else{if(val==="modification"&&this.checked){$this.nextAll(checkboxes).slice(0,3).attr({checked:"checked",disabled:"disabled"})}else{if(val==="modification"&&!this.checked){(thisChange==="modification")?$this.nextAll(checkboxes).slice(0,3).removeAttr("checked"):null;$this.nextAll(checkboxes).slice(0,3).removeAttr("disabled")}}}}}).each(function(index){(this.checked)?checkedIndexes.push(index):null});$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").removeAttr("disabled");if($.inArray(3,checkedIndexes)===-1&&$.inArray(4,checkedIndexes)===-1&&$.inArray(5,checkedIndexes)===-1&&$.inArray(6,checkedIndexes)===-1){$("select#ws-plugin--s2member-custom-reg-auto-opt-out-transitions").attr("disabled","disabled")}}).last().trigger("change")}});
|
includes/menu-pages/menu-pages-s.js
CHANGED
@@ -579,8 +579,8 @@ jQuery(document).ready(function($)
|
|
579 |
form += '<optgroup label="Any Character Combination">';
|
580 |
for(i = 1; i <= 25; i++)
|
581 |
{
|
582 |
-
form += '<option value="any-'+i+'"'+((field.expected === 'any-'+i) ? ' selected="selected"' : '')+'">Any Character Combination (
|
583 |
-
form += '<option value="any-'+i+'-e"'+((field.expected === 'any-'+i+'-e') ? ' selected="selected"' : '')+'">Any Character Combination (
|
584 |
}
|
585 |
form += '</optgroup>';
|
586 |
|
@@ -589,8 +589,8 @@ jQuery(document).ready(function($)
|
|
589 |
form += '<optgroup label="Alphanumerics, Spaces & Punctuation Only">';
|
590 |
for(i = 1; i <= 25; i++)
|
591 |
{
|
592 |
-
form += '<option value="alphanumerics-spaces-punctuation-'+i+'"'+((field.expected === 'alphanumerics-spaces-punctuation-'+i) ? ' selected="selected"' : '')+'">Alphanumerics, Spaces & Punctuation (
|
593 |
-
form += '<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected === 'alphanumerics-spaces-punctuation-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics, Spaces & Punctuation (
|
594 |
}
|
595 |
form += '</optgroup>';
|
596 |
|
@@ -599,8 +599,8 @@ jQuery(document).ready(function($)
|
|
599 |
form += '<optgroup label="Alphanumerics & Spaces Only">';
|
600 |
for(i = 1; i <= 25; i++)
|
601 |
{
|
602 |
-
form += '<option value="alphanumerics-spaces-'+i+'"'+((field.expected === 'alphanumerics-spaces-'+i) ? ' selected="selected"' : '')+'">Alphanumerics & Spaces (
|
603 |
-
form += '<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected === 'alphanumerics-spaces-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics & Spaces (
|
604 |
}
|
605 |
form += '</optgroup>';
|
606 |
|
@@ -609,8 +609,8 @@ jQuery(document).ready(function($)
|
|
609 |
form += '<optgroup label="Alphanumerics & Punctuation Only">';
|
610 |
for(i = 1; i <= 25; i++)
|
611 |
{
|
612 |
-
form += '<option value="alphanumerics-punctuation-'+i+'"'+((field.expected === 'alphanumerics-punctuation-'+i) ? ' selected="selected"' : '')+'">Alphanumerics & Punctuation (
|
613 |
-
form += '<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected === 'alphanumerics-punctuation-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics & Punctuation (
|
614 |
}
|
615 |
form += '</optgroup>';
|
616 |
|
@@ -619,8 +619,8 @@ jQuery(document).ready(function($)
|
|
619 |
form += '<optgroup label="Alphanumerics Only">';
|
620 |
for(i = 1; i <= 25; i++)
|
621 |
{
|
622 |
-
form += '<option value="alphanumerics-'+i+'"'+((field.expected === 'alphanumerics-'+i) ? ' selected="selected"' : '')+'">Alphanumerics (
|
623 |
-
form += '<option value="alphanumerics-'+i+'-e"'+((field.expected === 'alphanumerics-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics (
|
624 |
}
|
625 |
form += '</optgroup>';
|
626 |
|
@@ -629,8 +629,8 @@ jQuery(document).ready(function($)
|
|
629 |
form += '<optgroup label="Alphabetics Only">';
|
630 |
for(i = 1; i <= 25; i++)
|
631 |
{
|
632 |
-
form += '<option value="alphabetics-'+i+'"'+((field.expected === 'alphabetics-'+i) ? ' selected="selected"' : '')+'">Alphabetics (
|
633 |
-
form += '<option value="alphabetics-'+i+'-e"'+((field.expected === 'alphabetics-'+i+'-e') ? ' selected="selected"' : '')+'">Alphabetics (
|
634 |
}
|
635 |
form += '</optgroup>';
|
636 |
|
@@ -639,8 +639,8 @@ jQuery(document).ready(function($)
|
|
639 |
form += '<optgroup label="Numeric Digits Only">';
|
640 |
for(i = 1; i <= 25; i++)
|
641 |
{
|
642 |
-
form += '<option value="numerics-'+i+'"'+((field.expected === 'numerics-'+i) ? ' selected="selected"' : '')+'">Numeric Digits (
|
643 |
-
form += '<option value="numerics-'+i+'-e"'+((field.expected === 'numerics-'+i+'-e') ? ' selected="selected"' : '')+'">Numeric Digits (
|
644 |
}
|
645 |
form += '</optgroup>';
|
646 |
|
579 |
form += '<optgroup label="Any Character Combination">';
|
580 |
for(i = 1; i <= 25; i++)
|
581 |
{
|
582 |
+
form += '<option value="any-'+i+'"'+((field.expected === 'any-'+i) ? ' selected="selected"' : '')+'">Any Character Combination ('+i+' character minimum)</option>';
|
583 |
+
form += '<option value="any-'+i+'-e"'+((field.expected === 'any-'+i+'-e') ? ' selected="selected"' : '')+'">Any Character Combination (exactly '+i+' character'+((i > 1) ? 's' : '')+')</option>';
|
584 |
}
|
585 |
form += '</optgroup>';
|
586 |
|
589 |
form += '<optgroup label="Alphanumerics, Spaces & Punctuation Only">';
|
590 |
for(i = 1; i <= 25; i++)
|
591 |
{
|
592 |
+
form += '<option value="alphanumerics-spaces-punctuation-'+i+'"'+((field.expected === 'alphanumerics-spaces-punctuation-'+i) ? ' selected="selected"' : '')+'">Alphanumerics, Spaces & Punctuation ('+i+' character minimum)</option>';
|
593 |
+
form += '<option value="alphanumerics-spaces-punctuation-'+i+'-e"'+((field.expected === 'alphanumerics-spaces-punctuation-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics, Spaces & Punctuation (exactly '+i+' character'+((i > 1) ? 's' : '')+')</option>';
|
594 |
}
|
595 |
form += '</optgroup>';
|
596 |
|
599 |
form += '<optgroup label="Alphanumerics & Spaces Only">';
|
600 |
for(i = 1; i <= 25; i++)
|
601 |
{
|
602 |
+
form += '<option value="alphanumerics-spaces-'+i+'"'+((field.expected === 'alphanumerics-spaces-'+i) ? ' selected="selected"' : '')+'">Alphanumerics & Spaces ('+i+' character minimum)</option>';
|
603 |
+
form += '<option value="alphanumerics-spaces-'+i+'-e"'+((field.expected === 'alphanumerics-spaces-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics & Spaces (exactly '+i+' character'+((i > 1) ? 's' : '')+')</option>';
|
604 |
}
|
605 |
form += '</optgroup>';
|
606 |
|
609 |
form += '<optgroup label="Alphanumerics & Punctuation Only">';
|
610 |
for(i = 1; i <= 25; i++)
|
611 |
{
|
612 |
+
form += '<option value="alphanumerics-punctuation-'+i+'"'+((field.expected === 'alphanumerics-punctuation-'+i) ? ' selected="selected"' : '')+'">Alphanumerics & Punctuation ('+i+' character minimum)</option>';
|
613 |
+
form += '<option value="alphanumerics-punctuation-'+i+'-e"'+((field.expected === 'alphanumerics-punctuation-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics & Punctuation (exactly '+i+' character'+((i > 1) ? 's' : '')+')</option>';
|
614 |
}
|
615 |
form += '</optgroup>';
|
616 |
|
619 |
form += '<optgroup label="Alphanumerics Only">';
|
620 |
for(i = 1; i <= 25; i++)
|
621 |
{
|
622 |
+
form += '<option value="alphanumerics-'+i+'"'+((field.expected === 'alphanumerics-'+i) ? ' selected="selected"' : '')+'">Alphanumerics ('+i+' character minimum)</option>';
|
623 |
+
form += '<option value="alphanumerics-'+i+'-e"'+((field.expected === 'alphanumerics-'+i+'-e') ? ' selected="selected"' : '')+'">Alphanumerics (exactly '+i+' character'+((i > 1) ? 's' : '')+')</option>';
|
624 |
}
|
625 |
form += '</optgroup>';
|
626 |
|
629 |
form += '<optgroup label="Alphabetics Only">';
|
630 |
for(i = 1; i <= 25; i++)
|
631 |
{
|
632 |
+
form += '<option value="alphabetics-'+i+'"'+((field.expected === 'alphabetics-'+i) ? ' selected="selected"' : '')+'">Alphabetics ('+i+' character minimum)</option>';
|
633 |
+
form += '<option value="alphabetics-'+i+'-e"'+((field.expected === 'alphabetics-'+i+'-e') ? ' selected="selected"' : '')+'">Alphabetics (exactly '+i+' character'+((i > 1) ? 's' : '')+')</option>';
|
634 |
}
|
635 |
form += '</optgroup>';
|
636 |
|
639 |
form += '<optgroup label="Numeric Digits Only">';
|
640 |
for(i = 1; i <= 25; i++)
|
641 |
{
|
642 |
+
form += '<option value="numerics-'+i+'"'+((field.expected === 'numerics-'+i) ? ' selected="selected"' : '')+'">Numeric Digits ('+i+' digit minimum)</option>';
|
643 |
+
form += '<option value="numerics-'+i+'-e"'+((field.expected === 'numerics-'+i+'-e') ? ' selected="selected"' : '')+'">Numeric Digits (exactly '+i+' digit'+((i > 1) ? 's' : '')+')</option>';
|
644 |
}
|
645 |
form += '</optgroup>';
|
646 |
|
includes/menu-pages/menu-pages.css
CHANGED
@@ -200,6 +200,14 @@ div.ws-menu-page .ws-menu-page-hilite
|
|
200 |
border-radius : 3px;
|
201 |
padding : 0.2em;
|
202 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
div.ws-menu-page .ws-menu-page-error-hilite
|
204 |
{
|
205 |
color : #FFFFFF;
|
200 |
border-radius : 3px;
|
201 |
padding : 0.2em;
|
202 |
}
|
203 |
+
div.ws-menu-page .ws-menu-page-bright-hilite
|
204 |
+
{
|
205 |
+
font-size : 102%;
|
206 |
+
background : #EBF084;
|
207 |
+
|
208 |
+
border-radius : 3px;
|
209 |
+
padding : 0.2em;
|
210 |
+
}
|
211 |
div.ws-menu-page .ws-menu-page-error-hilite
|
212 |
{
|
213 |
color : #FFFFFF;
|
includes/s2member-min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function(d){var c='<?php echo c_ws_plugin__s2member_utils_conds::bp_is_installed ("query-active-plugins") ? "1" : ""; ?>';var a='<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_dirs::basename_dir_app_data ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"])); ?>';var b=(typeof ws_plugin__s2member_skip_all_file_confirmations!=="undefined"&&ws_plugin__s2member_skip_all_file_confirmations)?true:false;var e=[];if(S2MEMBER_CURRENT_USER_IS_LOGGED_IN&&S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED&&!b){d('a[href*="s2member_file_download="], a[href*="/s2member-files/"], a[href^="s2member-files/"], a[href*="/'+a.replace(/([\:\.\[\]])/g,"\\$1")+'/"], a[href^="'+a.replace(/([\:\.\[\]])/g,"\\$1")+'/"]').click(function(){if(!this.href.match(/s2member[_\-]file[_\-]download[_\-]key[\=\-].+/i)){var f='<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Confirm File Download —", "s2member-front", "s2member")); ?>\n\n';f+=d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("You`ve downloaded %s protected %s in the last %s.", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY,((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("file", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("files", "s2member-front", "s2member")); ?>'),((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("24 hours", "s2member-front", "s2member")); ?>':d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("%s days", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS)))+"\n\n";f+=(S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("You`re entitled to UNLIMITED downloads though (so, no worries).", "s2member-front", "s2member")); ?>':d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("You`re entitled to %s unique %s %s.", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED,((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("download", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("downloads", "s2member-front", "s2member")); ?>'),((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("each day", "s2member-front", "s2member")); ?>':d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("every %s-day period", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS)));if((this.href.match(/s2member[_\-]skip[_\-]confirmation/i)&&!this.href.match(/s2member[_\-]skip[_\-]confirmation[\=\-](0|no|false)/i))||confirm(f)){if(d.inArray(this.href,e)===-1){S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY++,e.push(this.href)}return true}else{return false}}else{return true}})}if(!location.href.match(/\/wp-admin(\/|\?|$)/)){d("input#ws-plugin--s2member-profile-password1, input#ws-plugin--s2member-profile-password2").keyup(function(){ws_plugin__s2member_passwordStrength(d("input#ws-plugin--s2member-profile-login"),d("input#ws-plugin--s2member-profile-password1"),d("input#ws-plugin--s2member-profile-password2"),d("div#ws-plugin--s2member-profile-password-strength"))});d("form#ws-plugin--s2member-profile").submit(function(){var h=this,g="",f="",l="";var j=d("input#ws-plugin--s2member-profile-password1",h);var i=d("input#ws-plugin--s2member-profile-password2",h);var k=d("input#ws-plugin--s2member-profile-submit",h);d(":input",h).each(function(){var m=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(m&&(g=d.trim(d('label[for="'+m+'"]',h).first().children("strong").first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){l+=f+"\n\n"}}});if(l=d.trim(l)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+l);return false}else{if(d.trim(j.val())&&d.trim(j.val())!==d.trim(i.val())){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Passwords do not match up. Please try again.", "s2member-front", "s2member")); ?>');return false}else{if(d.trim(j.val())&&d.trim(j.val()).length<6){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Password MUST be at least 6 characters. Please try again.", "s2member-front", "s2member")); ?>');return false}}}ws_plugin__s2member_animateProcessing(k);return true})}if(location.href.match(/\/wp-signup\.php/)){d("div#content > div.mu_register > form#setupform").submit(function(){var h=this,g="",f="",j="";d("input#user_email",h).attr("data-expected","email");var i=d('p.submit input[type="submit"]',h);d("input#user_name, input#user_email, input#blogname, input#blog_title, input#captcha_code",h).attr({"aria-required":"true"});d(":input",h).each(function(){var k=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(k&&(g=d.trim(d('label[for="'+k+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){j+=f+"\n\n"}}});if(j=d.trim(j)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+j);return false}ws_plugin__s2member_animateProcessing(i);return true})}if(location.href.match(/\/wp-login\.php/)){d("div#login > form#registerform input#user_login").attr("tabindex","10");d("div#login > form#registerform input#user_email").attr("tabindex","20");d("div#login > form#registerform input#wp-submit").attr("tabindex","1000");d("input#ws-plugin--s2member-custom-reg-field-user-pass1, input#ws-plugin--s2member-custom-reg-field-user-pass2").keyup(function(){ws_plugin__s2member_passwordStrength(d("input#user_login"),d("input#ws-plugin--s2member-custom-reg-field-user-pass1"),d("input#ws-plugin--s2member-custom-reg-field-user-pass2"),d("div#ws-plugin--s2member-custom-reg-field-user-pass-strength"))});d("div#login > form#registerform").submit(function(){var h=this,g="",f="",l="";d("input#user_email",h).attr("data-expected","email");var k=d('input#ws-plugin--s2member-custom-reg-field-user-pass1[aria-required="true"]',h);var i=d("input#ws-plugin--s2member-custom-reg-field-user-pass2",h);var j=d("input#wp-submit",h);d("input#user_login, input#user_email, input#captcha_code",h).attr({"aria-required":"true"});d(":input",h).each(function(){var m=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(d.inArray(m,["user_login","user_email","captcha_code"])!==-1){if((g=d.trim(d(this).parent("label").text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){l+=f+"\n\n"}}}else{if(m&&(g=d.trim(d('label[for="'+m+'"]',h).first().children("span").first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){l+=f+"\n\n"}}}});if(l=d.trim(l)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+l);return false}else{if(k.length&&d.trim(k.val())!==d.trim(i.val())){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Passwords do not match up. Please try again.", "s2member-front", "s2member")); ?>');return false}else{if(k.length&&d.trim(k.val()).length<6){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Password MUST be at least 6 characters. Please try again.", "s2member-front", "s2member")); ?>');return false}}}ws_plugin__s2member_animateProcessing(j);return true})}if(location.href.match(/\/wp-admin\/(user\/)?profile\.php/)){d("form#your-profile").submit(function(){var h=this,g="",f="",i="";d("input#email",h).attr("data-expected","email");d(':input[id^="ws-plugin--s2member-profile-"]',h).each(function(){var j=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(j&&(g=d.trim(d('label[for="'+j+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){i+=f+"\n\n"}}});if(i=d.trim(i)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+i);return false}return true})}if(c){d("body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section").closest("form").submit(function(){var h=this,g="",f="",i="";d("input#signup_email",h).attr("data-expected","email");d("input#signup_username, input#signup_email, input#signup_password, input#field_1",h).attr({"aria-required":"true"});d(":input",h).each(function(){var j=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(j&&(g=d.trim(d('label[for="'+j+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){i+=f+"\n\n"}}});if(i=d.trim(i)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+i);return false}return true});d("body.logged-in.profile.profile-edit :input.ws-plugin--s2member-profile-field-4bp").closest("form").submit(function(){var h=this,g="",f="",i="";d("input#field_1",h).attr({"aria-required":"true"});d(":input",h).each(function(){var j=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(j&&(g=d.trim(d('label[for="'+j+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){i+=f+"\n\n"}}});if(i=d.trim(i)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+i);return false}return true})}ws_plugin__s2member_passwordStrengthMeter=function(h,f){var g=0;if((h!=f)&&f.length>0){return"mismatch"}else{if(h.length<1){return"empty"}else{if(h.length<6){return"short"}}}if(h.match(/[0-9]/)){g+=10}if(h.match(/[a-z]/)){g+=10}if(h.match(/[A-Z]/)){g+=10}if(h.match(/[^0-9a-zA-Z]/)){g=(g===30)?g+20:g+10}if(g<30){return"bad"}if(g<50){return"good"}return"strong"};ws_plugin__s2member_passwordStrength=function(h,k,i,g){if(h instanceof jQuery&&k instanceof jQuery&&i instanceof jQuery&&g instanceof jQuery){var j={empty:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strength indicator", "s2member-front", "s2member")); ?>',"short":'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Very weak", "s2member-front", "s2member")); ?>',bad:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Weak", "s2member-front", "s2member")); ?>',good:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Medium", "s2member-front", "s2member")); ?>',strong:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strong", "s2member-front", "s2member")); ?>',mismatch:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Mismatch", "s2member-front", "s2member")); ?>'};g.removeClass("ws-plugin--s2member-password-strength-short");g.removeClass("ws-plugin--s2member-password-strength-bad");g.removeClass("ws-plugin--s2member-password-strength-good");g.removeClass("ws-plugin--s2member-password-strength-strong");g.removeClass("ws-plugin--s2member-password-strength-mismatch");g.removeClass("ws-plugin--s2member-password-strength-empty");var f=ws_plugin__s2member_passwordStrengthMeter(k.val(),i.val());g.addClass("ws-plugin--s2member-password-strength-"+f).html(j[f])}};ws_plugin__s2member_validationErrors=function(r,q,g,m,l){if(typeof r==="string"&&r&&typeof q==="object"&&typeof g==="object"){if(typeof q.tagName==="string"&&q.tagName.match(/^(input|textarea|select)$/i)&&!q.disabled){var t=q.tagName.toLowerCase(),p=d(q),o=d.trim(p.attr("type")).toLowerCase(),f=d.trim(p.attr("name")),s=p.val();var m=(typeof m==="boolean")?m:(p.attr("aria-required")==="true"),l=(typeof l==="string")?l:d.trim(p.attr("data-expected"));var k=('<?php echo strlen($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]); ?>'>0)?true:false;var i=new RegExp('^(<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (implode ("|", preg_split ("/[\r\n\t ;,]+/", preg_quote ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"], "/")))); ?>)@',"i");if(t==="input"&&o==="checkbox"&&f.match(/\[\]$/)){if(typeof q.id==="string"&&q.id.match(/-0$/)){if(m&&!d('input[name="'+f.replace(/([\[\]])/g,"$1")+'"]:checked',g).length){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please check at least one of the boxes.", "s2member-front", "s2member")); ?>'}}}else{if(t==="input"&&o==="checkbox"){if(m&&!q.checked){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Required. This box must be checked.", "s2member-front", "s2member")); ?>'}}else{if(t==="input"&&o==="radio"){if(typeof q.id==="string"&&q.id.match(/-0$/)){if(m&&!d('input[name="'+f.replace(/([\[\]])/g,"$1")+'"]:checked',g).length){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please select one of the options.", "s2member-front", "s2member")); ?>'}}}else{if(t==="select"&&p.attr("multiple")){if(m&&(!(s instanceof Array)||!s.length)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please select at least one of the options.", "s2member-front", "s2member")); ?>'}}else{if(typeof s!=="string"||(m&&!(s=d.trim(s)).length)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("This is a required field, please try again.", "s2member-front", "s2member")); ?>'}else{if((s=d.trim(s)).length&&((t==="input"&&o.match(/^(text|password)$/i))||t==="textarea")&&typeof l==="string"&&l.length){if(l==="numeric-wp-commas"&&(!s.match(/^[0-9\.,]+$/)||isNaN(s.replace(/,/g,"")))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be numeric (with or without decimals, commas allowed).", "s2member-front", "s2member")); ?>'}else{if(l==="numeric"&&(!s.match(/^[0-9\.]+$/)||isNaN(s))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be numeric (with or without decimals, no commas).", "s2member-front", "s2member")); ?>'}else{if(l==="integer"&&(!s.match(/^[0-9]+$/)||isNaN(s))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be an integer (a whole number, without any decimals).", "s2member-front", "s2member")); ?>'}else{if(l==="integer-gt-0"&&(!s.match(/^[0-9]+$/)||isNaN(s)||s<=0)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be an integer > 0 (whole number, no decimals, greater than 0).", "s2member-front", "s2member")); ?>'}else{if(l==="float"&&(!s.match(/^[0-9\.]+$/)||!s.match(/[0-9]/)||!s.match(/\./)||isNaN(s))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a float (floating point number, decimals required).", "s2member-front", "s2member")); ?>'}else{if(l==="float-gt-0"&&(!s.match(/^[0-9\.]+$/)||!s.match(/[0-9]/)||!s.match(/\./)||isNaN(s)||s<=0)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a float > 0 (floating point number, decimals required, greater than 0).", "s2member-front", "s2member")); ?>'}else{if(l==="date"&&!s.match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a date (required date format: dd/mm/yyyy).", "s2member-front", "s2member")); ?>'}else{if(l==="email"&&!s.match(/^([a-z_~0-9\+\-]+)(((\.?)([a-z_~0-9\+\-]+))*)(@)([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a valid email address.", "s2member-front", "s2member")); ?>'}else{if(l==="email"&&k&&s.match(i)){return r+"\n"+d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use a personal email address.\nAddresses like <%s@> are problematic.", "s2member-front", "s2member")); ?>',s.split("@")[0])}else{if(l==="url"&&!s.match(/^http(s?)\:\/\/(.{5,})$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a full URL (starting with http or https).", "s2member-front", "s2member")); ?>'}else{if(l==="domain"&&!s.match(/^([a-z0-9]+)(((-*)([a-z0-9]+))*)(((\.)([a-z0-9]+)(((-*)([a-z0-9]+))*))*)(\.)([a-z]{2,6})$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a domain name (domain name only, without http).", "s2member-front", "s2member")); ?>'}else{if(l==="phone"&&(!s.match(/^[0-9 \(\)\-]+$/)||s.replace(/[^0-9]/g,"").length!==10)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a phone # (10 digits w/possible hyphens,spaces,brackets).", "s2member-front", "s2member")); ?>'}else{if(l==="uszip"&&!s.match(/^[0-9]{5}(-[0-9]{4})?$/)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a US zipcode (5-9 digits w/possible hyphen).", "s2member-front", "s2member")); ?>'}else{if(l==="cazip"&&!s.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a Canadian zipcode (6 alpha-numerics w/possible space).", "s2member-front", "s2member")); ?>'}else{if(l==="uczip"&&!s.match(/^[0-9]{5}(-[0-9]{4})?$/)&&!s.match(/^[0-9A-Z]{3}( ?)[0-9A-Z]{3}$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a zipcode (either a US or Canadian zipcode).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics-spaces-punctuation-([0-9]+)(-e)?$/)&&!s.match(/^[a-z 0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics, spaces & punctuation only.", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics-spaces-([0-9]+)(-e)?$/)&&!s.match(/^[a-z 0-9]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & spaces only.", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics-punctuation-([0-9]+)(-e)?$/)&&!s.match(/^[a-z0-9,\.\/\?\:;"'\{\}\[\]\|\\\+\=_\-\(\)\*&\^%\$#@\!`~]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & punctuation only (no spaces).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics-([0-9]+)(-e)?$/)&&!s.match(/^[a-z0-9]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics only (no spaces/punctuation).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphabetics-([0-9]+)(-e)?$/)&&!s.match(/^[a-z]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphabetics only (no digits/spaces/punctuation).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^numerics-([0-9]+)(-e)?$/)&&!s.match(/^[0-9]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use numeric digits only.", "s2member-front", "s2member")); ?>'}else{if(l.match(/^(any|alphanumerics-spaces-punctuation|alphanumerics-spaces|alphanumerics-punctuation|alphanumerics|alphabetics|numerics)-([0-9]+)(-e)?$/)){var n=l.split("-"),h=Number(n[1]),j=(n.length>2&&n[2]==="e")?true:false;if(j&&s.length!==h){return r+"\n"+d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be exactly %s %s.", "s2member-front", "s2member")); ?>',h,((n[0]==="numerics")?((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digit", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digits", "s2member-front", "s2member")); ?>'):((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("character", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("characters", "s2member-front", "s2member")); ?>')))}else{if(s.length<h){return r+"\n"+d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be at least %s %s.", "s2member-front", "s2member")); ?>',h,((n[0]==="numerics")?((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digit", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digits", "s2member-front", "s2member")); ?>'):((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("character", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("characters", "s2member-front", "s2member")); ?>')))}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return""};ws_plugin__s2member_animateProcessingConfig={originalText:"",interval:null,speed:100},ws_plugin__s2member_animateProcessing=function(g,f){if(g instanceof jQuery){if(f){clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);if(ws_plugin__s2member_animateProcessingConfig.originalText){g.val(ws_plugin__s2member_animateProcessingConfig.originalText)}return}g.first().each(function(){var k=d(this),j=0,h="r",l=[".","..","..."];ws_plugin__s2member_animateProcessingConfig.originalText=k.val();clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);ws_plugin__s2member_animateProcessingConfig.interval=setInterval(function(){if(h==="r"){if(j+1<=l.length-1){j=j+1,h="r"}else{j=j-1,h="l"}}else{if(h==="l"){if(j-1>=0){j=j-1,h="l"}else{j=j+1,h="r"}}}for(var m=l[j],i=l[j].length;i<l.length;i++){m+=" "}k.val('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Processing", "s2member-front", "s2member")); ?>'+m)},ws_plugin__s2member_animateProcessingConfig.speed)})}}});
|
1 |
+
jQuery(document).ready(function(d){var c='<?php echo c_ws_plugin__s2member_utils_conds::bp_is_installed ("query-active-plugins") ? "1" : ""; ?>';var a='<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_dirs::basename_dir_app_data ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"])); ?>';var b=(typeof ws_plugin__s2member_skip_all_file_confirmations!=="undefined"&&ws_plugin__s2member_skip_all_file_confirmations)?true:false;var e=[];if(S2MEMBER_CURRENT_USER_IS_LOGGED_IN&&S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY<S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED&&!b){d('a[href*="s2member_file_download="], a[href*="/s2member-files/"], a[href^="s2member-files/"], a[href*="/'+a.replace(/([\:\.\[\]])/g,"\\$1")+'/"], a[href^="'+a.replace(/([\:\.\[\]])/g,"\\$1")+'/"]').click(function(){if(!this.href.match(/s2member[_\-]file[_\-]download[_\-]key[\=\-].+/i)){var f='<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Confirm File Download —", "s2member-front", "s2member")); ?>\n\n';f+=d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("You`ve downloaded %s protected %s in the last %s.", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY,((S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("file", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("files", "s2member-front", "s2member")); ?>'),((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("24 hours", "s2member-front", "s2member")); ?>':d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("%s days", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS)))+"\n\n";f+=(S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_IS_UNLIMITED)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("You`re entitled to UNLIMITED downloads though (so, no worries).", "s2member-front", "s2member")); ?>':d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("You`re entitled to %s unique %s %s.", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED,((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("download", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("downloads", "s2member-front", "s2member")); ?>'),((S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("each day", "s2member-front", "s2member")); ?>':d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("every %s-day period", "s2member-front", "s2member")); ?>',S2MEMBER_CURRENT_USER_DOWNLOADS_ALLOWED_DAYS)));if((this.href.match(/s2member[_\-]skip[_\-]confirmation/i)&&!this.href.match(/s2member[_\-]skip[_\-]confirmation[\=\-](0|no|false)/i))||confirm(f)){if(d.inArray(this.href,e)===-1){S2MEMBER_CURRENT_USER_DOWNLOADS_CURRENTLY++,e.push(this.href)}return true}else{return false}}else{return true}})}if(!location.href.match(/\/wp-admin(\/|\?|$)/)){d("input#ws-plugin--s2member-profile-password1, input#ws-plugin--s2member-profile-password2").keyup(function(){ws_plugin__s2member_passwordStrength(d("input#ws-plugin--s2member-profile-login"),d("input#ws-plugin--s2member-profile-password1"),d("input#ws-plugin--s2member-profile-password2"),d("div#ws-plugin--s2member-profile-password-strength"))});d("form#ws-plugin--s2member-profile").submit(function(){var h=this,g="",f="",l="";var j=d("input#ws-plugin--s2member-profile-password1",h);var i=d("input#ws-plugin--s2member-profile-password2",h);var k=d("input#ws-plugin--s2member-profile-submit",h);d(":input",h).each(function(){var m=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(m&&(g=d.trim(d('label[for="'+m+'"]',h).first().children("strong").first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){l+=f+"\n\n"}}});if(l=d.trim(l)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+l);return false}else{if(d.trim(j.val())&&d.trim(j.val())!==d.trim(i.val())){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Passwords do not match up. Please try again.", "s2member-front", "s2member")); ?>');return false}else{if(d.trim(j.val())&&d.trim(j.val()).length<6){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Password MUST be at least 6 characters. Please try again.", "s2member-front", "s2member")); ?>');return false}}}ws_plugin__s2member_animateProcessing(k);return true})}if(location.href.match(/\/wp-signup\.php/)){d("div#content > div.mu_register > form#setupform").submit(function(){var h=this,g="",f="",j="";d("input#user_email",h).attr("data-expected","email");var i=d('p.submit input[type="submit"]',h);d("input#user_name, input#user_email, input#blogname, input#blog_title, input#captcha_code",h).attr({"aria-required":"true"});d(":input",h).each(function(){var k=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(k&&(g=d.trim(d('label[for="'+k+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){j+=f+"\n\n"}}});if(j=d.trim(j)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+j);return false}ws_plugin__s2member_animateProcessing(i);return true})}if(location.href.match(/\/wp-login\.php/)){d("div#login > form#registerform input#user_login").attr("tabindex","10");d("div#login > form#registerform input#user_email").attr("tabindex","20");d("div#login > form#registerform input#wp-submit").attr("tabindex","1000");d("input#ws-plugin--s2member-custom-reg-field-user-pass1, input#ws-plugin--s2member-custom-reg-field-user-pass2").keyup(function(){ws_plugin__s2member_passwordStrength(d("input#user_login"),d("input#ws-plugin--s2member-custom-reg-field-user-pass1"),d("input#ws-plugin--s2member-custom-reg-field-user-pass2"),d("div#ws-plugin--s2member-custom-reg-field-user-pass-strength"))});d("div#login > form#registerform").submit(function(){var h=this,g="",f="",l="";d("input#user_email",h).attr("data-expected","email");var k=d('input#ws-plugin--s2member-custom-reg-field-user-pass1[aria-required="true"]',h);var i=d("input#ws-plugin--s2member-custom-reg-field-user-pass2",h);var j=d("input#wp-submit",h);d("input#user_login, input#user_email, input#captcha_code",h).attr({"aria-required":"true"});d(":input",h).each(function(){var m=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(d.inArray(m,["user_login","user_email","captcha_code"])!==-1){if((g=d.trim(d(this).parent("label").text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){l+=f+"\n\n"}}}else{if(m&&(g=d.trim(d('label[for="'+m+'"]',h).first().children("span").first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){l+=f+"\n\n"}}}});if(l=d.trim(l)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+l);return false}else{if(k.length&&d.trim(k.val())!==d.trim(i.val())){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Passwords do not match up. Please try again.", "s2member-front", "s2member")); ?>');return false}else{if(k.length&&d.trim(k.val()).length<6){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Password MUST be at least 6 characters. Please try again.", "s2member-front", "s2member")); ?>');return false}}}ws_plugin__s2member_animateProcessing(j);return true})}if(location.href.match(/\/wp-admin\/(user\/)?profile\.php/)){d("form#your-profile").submit(function(){var h=this,g="",f="",i="";d("input#email",h).attr("data-expected","email");d(':input[id^="ws-plugin--s2member-profile-"]',h).each(function(){var j=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(j&&(g=d.trim(d('label[for="'+j+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){i+=f+"\n\n"}}});if(i=d.trim(i)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+i);return false}return true})}if(c){d("body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section").closest("form").submit(function(){var h=this,g="",f="",i="";d("input#signup_email",h).attr("data-expected","email");d("input#signup_username, input#signup_email, input#signup_password, input#field_1",h).attr({"aria-required":"true"});d(":input",h).each(function(){var j=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(j&&(g=d.trim(d('label[for="'+j+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){i+=f+"\n\n"}}});if(i=d.trim(i)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+i);return false}return true});d("body.logged-in.profile.profile-edit :input.ws-plugin--s2member-profile-field-4bp").closest("form").submit(function(){var h=this,g="",f="",i="";d("input#field_1",h).attr({"aria-required":"true"});d(":input",h).each(function(){var j=d.trim(d(this).attr("id")).replace(/---[0-9]+$/g,"");if(j&&(g=d.trim(d('label[for="'+j+'"]',h).first().text().replace(/[\r\n\t]+/g," ")))){if(f=ws_plugin__s2member_validationErrors(g,this,h)){i+=f+"\n\n"}}});if(i=d.trim(i)){alert('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("— Oops, you missed something: —", "s2member-front", "s2member")); ?>\n\n'+i);return false}return true})}ws_plugin__s2member_passwordStrengthMeter=function(h,f){var g=0;if((h!=f)&&f.length>0){return"mismatch"}else{if(h.length<1){return"empty"}else{if(h.length<6){return"short"}}}if(h.match(/[0-9]/)){g+=10}if(h.match(/[a-z]/)){g+=10}if(h.match(/[A-Z]/)){g+=10}if(h.match(/[^0-9a-zA-Z]/)){g=(g===30)?g+20:g+10}if(g<30){return"bad"}if(g<50){return"good"}return"strong"};ws_plugin__s2member_passwordStrength=function(h,k,i,g){if(h instanceof jQuery&&k instanceof jQuery&&i instanceof jQuery&&g instanceof jQuery){var j={empty:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strength indicator", "s2member-front", "s2member")); ?>',"short":'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Very weak", "s2member-front", "s2member")); ?>',bad:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Weak", "s2member-front", "s2member")); ?>',good:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Medium", "s2member-front", "s2member")); ?>',strong:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Strong", "s2member-front", "s2member")); ?>',mismatch:'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Mismatch", "s2member-front", "s2member")); ?>'};g.removeClass("ws-plugin--s2member-password-strength-short");g.removeClass("ws-plugin--s2member-password-strength-bad");g.removeClass("ws-plugin--s2member-password-strength-good");g.removeClass("ws-plugin--s2member-password-strength-strong");g.removeClass("ws-plugin--s2member-password-strength-mismatch");g.removeClass("ws-plugin--s2member-password-strength-empty");var f=ws_plugin__s2member_passwordStrengthMeter(k.val(),i.val());g.addClass("ws-plugin--s2member-password-strength-"+f).html(j[f])}};ws_plugin__s2member_validationErrors=function(r,q,g,m,l){if(typeof r==="string"&&r&&typeof q==="object"&&typeof g==="object"){if(typeof q.tagName==="string"&&q.tagName.match(/^(input|textarea|select)$/i)&&!q.disabled){var t=q.tagName.toLowerCase(),p=d(q),o=d.trim(p.attr("type")).toLowerCase(),f=d.trim(p.attr("name")),s=p.val();m=(typeof m==="boolean")?m:(p.attr("aria-required")==="true"),l=(typeof l==="string")?l:d.trim(p.attr("data-expected"));var k=('<?php echo strlen($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]); ?>'>0);var i=new RegExp('^(<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (implode ("|", preg_split ("/[\r\n\t ;,]+/", preg_quote ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"], "/")))); ?>)@',"i");if(t==="input"&&o==="checkbox"&&f.match(/\[\]$/)){if(typeof q.id==="string"&&q.id.match(/-0$/)){if(m&&!d('input[name="'+f.replace(/([\[\]])/g,"$1")+'"]:checked',g).length){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please check at least one of the boxes.", "s2member-front", "s2member")); ?>'}}}else{if(t==="input"&&o==="checkbox"){if(m&&!q.checked){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Required. This box must be checked.", "s2member-front", "s2member")); ?>'}}else{if(t==="input"&&o==="radio"){if(typeof q.id==="string"&&q.id.match(/-0$/)){if(m&&!d('input[name="'+f.replace(/([\[\]])/g,"$1")+'"]:checked',g).length){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please select one of the options.", "s2member-front", "s2member")); ?>'}}}else{if(t==="select"&&p.attr("multiple")){if(m&&(!(s instanceof Array)||!s.length)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please select at least one of the options.", "s2member-front", "s2member")); ?>'}}else{if(typeof s!=="string"||(m&&!(s=d.trim(s)).length)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("This is a required field, please try again.", "s2member-front", "s2member")); ?>'}else{if((s=d.trim(s)).length&&((t==="input"&&o.match(/^(text|password)$/i))||t==="textarea")&&typeof l==="string"&&l.length){if(l==="numeric-wp-commas"&&(!s.match(/^[0-9\.,]+$/)||isNaN(s.replace(/,/g,"")))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be numeric (with or without decimals, commas allowed).", "s2member-front", "s2member")); ?>'}else{if(l==="numeric"&&(!s.match(/^[0-9\.]+$/)||isNaN(s))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be numeric (with or without decimals, no commas).", "s2member-front", "s2member")); ?>'}else{if(l==="integer"&&(!s.match(/^[0-9]+$/)||isNaN(s))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be an integer (a whole number, without any decimals).", "s2member-front", "s2member")); ?>'}else{if(l==="integer-gt-0"&&(!s.match(/^[0-9]+$/)||isNaN(s)||s<=0)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be an integer > 0 (whole number, no decimals, greater than 0).", "s2member-front", "s2member")); ?>'}else{if(l==="float"&&(!s.match(/^[0-9\.]+$/)||!s.match(/[0-9]/)||!s.match(/\./)||isNaN(s))){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a float (floating point number, decimals required).", "s2member-front", "s2member")); ?>'}else{if(l==="float-gt-0"&&(!s.match(/^[0-9\.]+$/)||!s.match(/[0-9]/)||!s.match(/\./)||isNaN(s)||s<=0)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a float > 0 (floating point number, decimals required, greater than 0).", "s2member-front", "s2member")); ?>'}else{if(l==="date"&&!s.match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a date (required date format: dd/mm/yyyy).", "s2member-front", "s2member")); ?>'}else{if(l==="email"&&!s.match(/^[a-zA-Z0-9_!#$%&*+=?`{}~|\/\^\'\-]+(?:\.?[a-zA-Z0-9_!#$%&*+=?`{}~|\/\^\'\-]+)*@[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*)*(?:\.[a-zA-Z][a-zA-Z0-9]+)?$/)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a valid email address.", "s2member-front", "s2member")); ?>'}else{if(l==="email"&&k&&s.match(i)){return r+"\n"+d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use a personal email address.\nAddresses like <%s@> are problematic.", "s2member-front", "s2member")); ?>',s.split("@")[0])}else{if(l==="url"&&!s.match(/^https?\:\/\/.+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a full URL (starting with http or https).", "s2member-front", "s2member")); ?>'}else{if(l==="domain"&&!s.match(/^[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*)*(?:\.[a-zA-Z][a-zA-Z0-9]+)?$/)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a domain name (domain name only, without http).", "s2member-front", "s2member")); ?>'}else{if(l==="phone"&&(!s.match(/^[0-9 ()\-]+$/)||s.replace(/[^0-9]+/g,"").length!==10)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a phone # (10 digits w/possible hyphens, spaces, brackets).", "s2member-front", "s2member")); ?>'}else{if(l==="uszip"&&!s.match(/^[0-9]{5}(?:\-[0-9]{4})?$/)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a US zipcode (5-9 digits w/ possible hyphen).", "s2member-front", "s2member")); ?>'}else{if(l==="cazip"&&!s.match(/^[0-9A-Z]{3} ?[0-9A-Z]{3}$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a Canadian zipcode (6 alpha-numerics w/possible space).", "s2member-front", "s2member")); ?>'}else{if(l==="uczip"&&!s.match(/^[0-9]{5}(?:\-[0-9]{4})?$/)&&!s.match(/^[0-9A-Z]{3} ?[0-9A-Z]{3}$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a zipcode (either a US or Canadian zipcode).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics\-spaces\-punctuation\-[0-9]+(?:\-e)?$/)&&!s.match(/^[a-z 0-9\/\\\\,.?:;"\'{}[\]\^|+=_()*&%$#@!`~\-]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics, spaces & punctuation only.", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics\-spaces\-[0-9]+(?:\-e)?$/)&&!s.match(/^[a-z 0-9]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & spaces only.", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics\-punctuation\-[0-9]+(?:\-e)?$/)&&!s.match(/^[a-z0-9\/\\\\,.?:;"\'{}[\]\^|+=_()*&%$#@!`~\-]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & punctuation only (no spaces).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphanumerics\-[0-9]+(?:\-e)?$/)&&!s.match(/^[a-z0-9]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics only (no spaces/punctuation).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^alphabetics\-[0-9]+(?:\-e)?$/)&&!s.match(/^[a-z]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphabetics only (no digits/spaces/punctuation).", "s2member-front", "s2member")); ?>'}else{if(l.match(/^numerics\-[0-9]+(?:\-e)?$/)&&!s.match(/^[0-9]+$/i)){return r+'\n<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use numeric digits only.", "s2member-front", "s2member")); ?>'}else{if(l.match(/^(?:any|alphanumerics\-spaces\-punctuation|alphanumerics\-spaces|alphanumerics\-punctuation|alphanumerics|alphabetics|numerics)\-[0-9]+(?:\-e)?$/)){var n=l.split("-"),h=Number(n[1]),j=(n.length>2&&n[2]==="e");if(j&&s.length!==h){return r+"\n"+d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be exactly %s %s.", "s2member-front", "s2member")); ?>',h,((n[0]==="numerics")?((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digit", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digits", "s2member-front", "s2member")); ?>'):((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("character", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("characters", "s2member-front", "s2member")); ?>')))}else{if(s.length<h){return r+"\n"+d.sprintf('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be at least %s %s.", "s2member-front", "s2member")); ?>',h,((n[0]==="numerics")?((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digit", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digits", "s2member-front", "s2member")); ?>'):((h===1)?'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("character", "s2member-front", "s2member")); ?>':'<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("characters", "s2member-front", "s2member")); ?>')))}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return""};ws_plugin__s2member_animateProcessing=function(g,f){if(f){d(g).removeClass("ws-plugin--s2member-animate-processing")}else{d(g).addClass("ws-plugin--s2member-animate-processing")}}});
|
includes/s2member.css
CHANGED
@@ -15,8 +15,23 @@
|
|
15 |
*/
|
16 |
|
17 |
/*
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
|
|
|
|
20 |
These are basic CSS rules. You can override any of these
|
21 |
through the `/style.css` file for your WordPress theme.
|
22 |
*/
|
@@ -27,8 +42,61 @@ div.ws-plugin--s2member-s-badge
|
|
27 |
}
|
28 |
|
29 |
/*
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
These are basic CSS rules. You can override any of these
|
33 |
through the `/style.css` file for your WordPress theme.
|
34 |
*/
|
@@ -63,7 +131,6 @@ div.ws-plugin--s2member-password-strength-mismatch
|
|
63 |
|
64 |
/*
|
65 |
Structural styles for Multisite Integration Forms.
|
66 |
-
|
67 |
These are basic CSS rules. You can override any of these
|
68 |
through the `/style.css` file for your WordPress theme.
|
69 |
*/
|
@@ -132,7 +199,6 @@ div#content > div.mu_register > div.mu_alert
|
|
132 |
|
133 |
/*
|
134 |
Structural styles for Return Pages.
|
135 |
-
|
136 |
These are basic CSS rules. You can override any of these
|
137 |
through the `/style.css` file for your WordPress theme.
|
138 |
*/
|
@@ -225,7 +291,6 @@ div.s2member-return-support-section div.cc-reminder
|
|
225 |
|
226 |
/*
|
227 |
Structural styles for Shortcode Profile Editing panel.
|
228 |
-
|
229 |
These are basic CSS rules. You can override any of these
|
230 |
through the `/style.css` file for your WordPress theme.
|
231 |
*/
|
@@ -298,7 +363,6 @@ form#ws-plugin--s2member-profile div.ws-plugin--s2member-profile-field-divider-s
|
|
298 |
|
299 |
/*
|
300 |
Structural styles for BuddyPress Profile Field items.
|
301 |
-
|
302 |
These are basic CSS rules. You can override any of these
|
303 |
through the `/style.css` file for your WordPress theme.
|
304 |
*/
|
@@ -319,7 +383,6 @@ body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section-ti
|
|
319 |
|
320 |
/*
|
321 |
Structural styles for BuddyPress Registration Fields.
|
322 |
-
|
323 |
These are basic CSS rules. You can override any of these
|
324 |
through the `/style.css` file for your WordPress theme.
|
325 |
*/
|
@@ -372,7 +435,6 @@ body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section div
|
|
372 |
|
373 |
/*
|
374 |
Structural styles for BuddyPress Profile Field integrations.
|
375 |
-
|
376 |
These are basic CSS rules. You can override any of these
|
377 |
through the `/style.css` file for your WordPress theme.
|
378 |
*/
|
15 |
*/
|
16 |
|
17 |
/*
|
18 |
+
Clearfix styles for s2Member.
|
19 |
+
These are basic CSS rules. You can override any of these
|
20 |
+
through the `/style.css` file for your WordPress theme.
|
21 |
+
*/
|
22 |
+
.ws-plugin--s2member-clearfix:before,
|
23 |
+
.ws-plugin--s2member-clearfix:after
|
24 |
+
{
|
25 |
+
content : ' ';
|
26 |
+
display : table;
|
27 |
+
}
|
28 |
+
.ws-plugin--s2member-clearfix::after
|
29 |
+
{
|
30 |
+
clear : both;
|
31 |
+
}
|
32 |
|
33 |
+
/*
|
34 |
+
Structural styles for s2Member Security Badge.
|
35 |
These are basic CSS rules. You can override any of these
|
36 |
through the `/style.css` file for your WordPress theme.
|
37 |
*/
|
42 |
}
|
43 |
|
44 |
/*
|
45 |
+
Button processing animation.
|
46 |
+
These are basic CSS rules. You can override any of these
|
47 |
+
through the `/style.css` file for your WordPress theme.
|
48 |
+
*/
|
49 |
+
@-moz-keyframes ws-plugin--s2member-spin
|
50 |
+
{
|
51 |
+
from
|
52 |
+
{
|
53 |
+
-moz-transform : rotate(0deg);
|
54 |
+
}
|
55 |
+
to
|
56 |
+
{
|
57 |
+
-moz-transform : rotate(360deg);
|
58 |
+
}
|
59 |
+
}
|
60 |
+
@-webkit-keyframes ws-plugin--s2member-spin
|
61 |
+
{
|
62 |
+
from
|
63 |
+
{
|
64 |
+
-webkit-transform : rotate(0deg);
|
65 |
+
}
|
66 |
+
to
|
67 |
+
{
|
68 |
+
-webkit-transform : rotate(360deg);
|
69 |
+
}
|
70 |
+
}
|
71 |
+
@keyframes ws-plugin--s2member-spin
|
72 |
+
{
|
73 |
+
from
|
74 |
+
{
|
75 |
+
transform : rotate(0deg);
|
76 |
+
}
|
77 |
+
to
|
78 |
+
{
|
79 |
+
transform : rotate(360deg);
|
80 |
+
}
|
81 |
+
}
|
82 |
+
button.ws-plugin--s2member-animate-processing:after
|
83 |
+
{
|
84 |
+
content : '';
|
85 |
+
|
86 |
+
float : right;
|
87 |
+
width : .8em;
|
88 |
+
height : .8em;
|
89 |
+
margin : .25em 0 0 .5em;
|
90 |
|
91 |
+
border-radius : 50%;
|
92 |
+
border : 1px dashed;
|
93 |
+
|
94 |
+
-webkit-animation : ws-plugin--s2member-spin 1s linear infinite;
|
95 |
+
animation : ws-plugin--s2member-spin 1s linear infinite;
|
96 |
+
}
|
97 |
+
|
98 |
+
/*
|
99 |
+
Structural styles for Password strength indicators.
|
100 |
These are basic CSS rules. You can override any of these
|
101 |
through the `/style.css` file for your WordPress theme.
|
102 |
*/
|
131 |
|
132 |
/*
|
133 |
Structural styles for Multisite Integration Forms.
|
|
|
134 |
These are basic CSS rules. You can override any of these
|
135 |
through the `/style.css` file for your WordPress theme.
|
136 |
*/
|
199 |
|
200 |
/*
|
201 |
Structural styles for Return Pages.
|
|
|
202 |
These are basic CSS rules. You can override any of these
|
203 |
through the `/style.css` file for your WordPress theme.
|
204 |
*/
|
291 |
|
292 |
/*
|
293 |
Structural styles for Shortcode Profile Editing panel.
|
|
|
294 |
These are basic CSS rules. You can override any of these
|
295 |
through the `/style.css` file for your WordPress theme.
|
296 |
*/
|
363 |
|
364 |
/*
|
365 |
Structural styles for BuddyPress Profile Field items.
|
|
|
366 |
These are basic CSS rules. You can override any of these
|
367 |
through the `/style.css` file for your WordPress theme.
|
368 |
*/
|
383 |
|
384 |
/*
|
385 |
Structural styles for BuddyPress Registration Fields.
|
|
|
386 |
These are basic CSS rules. You can override any of these
|
387 |
through the `/style.css` file for your WordPress theme.
|
388 |
*/
|
435 |
|
436 |
/*
|
437 |
Structural styles for BuddyPress Profile Field integrations.
|
|
|
438 |
These are basic CSS rules. You can override any of these
|
439 |
through the `/style.css` file for your WordPress theme.
|
440 |
*/
|
includes/s2member.js
CHANGED
@@ -352,9 +352,9 @@ jQuery(document).ready (function($)
|
|
352 |
if (typeof field.tagName === 'string' && field.tagName.match (/^(input|textarea|select)$/i) && !field.disabled)
|
353 |
{
|
354 |
var tag = field.tagName.toLowerCase (), $field = $(field), type = $.trim ($field.attr ('type')).toLowerCase (), name = $.trim ($field.attr ('name')), value = $field.val ();
|
355 |
-
|
356 |
|
357 |
-
var forcePersonalEmails = ('<?php echo strlen($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]); ?>' > 0)
|
358 |
var nonPersonalEmailUsers = new RegExp('^(<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (implode ("|", preg_split ("/[\r\n\t ;,]+/", preg_quote ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"], "/")))); ?>)@', 'i');
|
359 |
|
360 |
if (tag === 'input' && type === 'checkbox' && name.match (/\[\]$/))
|
@@ -413,7 +413,7 @@ jQuery(document).ready (function($)
|
|
413 |
{
|
414 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a date (required date format: dd/mm/yyyy).", "s2member-front", "s2member")); ?>';
|
415 |
}
|
416 |
-
else if (expected === 'email' && !value.match (/^
|
417 |
{
|
418 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a valid email address.", "s2member-front", "s2member")); ?>';
|
419 |
}
|
@@ -421,57 +421,57 @@ jQuery(document).ready (function($)
|
|
421 |
{
|
422 |
return label + '\n' + $.sprintf ('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use a personal email address.\nAddresses like <%s@> are problematic.", "s2member-front", "s2member")); ?>', value.split ('@')[0]);
|
423 |
}
|
424 |
-
else if (expected === 'url' && !value.match (/^
|
425 |
{
|
426 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a full URL (starting with http or https).", "s2member-front", "s2member")); ?>';
|
427 |
}
|
428 |
-
else if (expected === 'domain' && !value.match (/^
|
429 |
{
|
430 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a domain name (domain name only, without http).", "s2member-front", "s2member")); ?>';
|
431 |
}
|
432 |
-
else if (expected === 'phone' && (!value.match (/^[0-9
|
433 |
{
|
434 |
-
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a phone # (10 digits w/possible hyphens,spaces,brackets).", "s2member-front", "s2member")); ?>';
|
435 |
}
|
436 |
-
else if (expected === 'uszip' && !value.match (/^[0-9]{5}(
|
437 |
{
|
438 |
-
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a US zipcode (5-9 digits w/possible hyphen).", "s2member-front", "s2member")); ?>';
|
439 |
}
|
440 |
-
else if (expected === 'cazip' && !value.match (/^[0-9A-Z]{3}
|
441 |
{
|
442 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a Canadian zipcode (6 alpha-numerics w/possible space).", "s2member-front", "s2member")); ?>';
|
443 |
}
|
444 |
-
else if (expected === 'uczip' && !value.match (/^[0-9]{5}(
|
445 |
{
|
446 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a zipcode (either a US or Canadian zipcode).", "s2member-front", "s2member")); ?>';
|
447 |
}
|
448 |
-
else if (expected.match (/^alphanumerics
|
449 |
{
|
450 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics, spaces & punctuation only.", "s2member-front", "s2member")); ?>';
|
451 |
}
|
452 |
-
else if (expected.match (/^alphanumerics
|
453 |
{
|
454 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & spaces only.", "s2member-front", "s2member")); ?>';
|
455 |
}
|
456 |
-
else if (expected.match (/^alphanumerics
|
457 |
{
|
458 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & punctuation only (no spaces).", "s2member-front", "s2member")); ?>';
|
459 |
}
|
460 |
-
else if (expected.match (/^alphanumerics
|
461 |
{
|
462 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics only (no spaces/punctuation).", "s2member-front", "s2member")); ?>';
|
463 |
}
|
464 |
-
else if (expected.match (/^alphabetics
|
465 |
{
|
466 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphabetics only (no digits/spaces/punctuation).", "s2member-front", "s2member")); ?>';
|
467 |
}
|
468 |
-
else if (expected.match (/^numerics
|
469 |
{
|
470 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use numeric digits only.", "s2member-front", "s2member")); ?>';
|
471 |
}
|
472 |
-
else if (expected.match (/^(any|alphanumerics
|
473 |
{
|
474 |
-
var split = expected.split ('-'), length = Number(split[1]), exactLength = (split.length > 2 && split[2] === 'e')
|
475 |
|
476 |
if /* An exact length is required? */ (exactLength && value.length !== length)
|
477 |
return label + '\n' + $.sprintf ('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be exactly %s %s.", "s2member-front", "s2member")); ?>', length, ((split[0] === 'numerics') ? ((length === 1) ? '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digit", "s2member-front", "s2member")); ?>' : '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digits", "s2member-front", "s2member")); ?>') : ((length === 1) ? '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("character", "s2member-front", "s2member")); ?>' : '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("characters", "s2member-front", "s2member")); ?>')));
|
@@ -485,54 +485,10 @@ jQuery(document).ready (function($)
|
|
485 |
return '';
|
486 |
};
|
487 |
|
488 |
-
|
489 |
{
|
490 |
-
if
|
491 |
-
|
492 |
-
|
493 |
-
{
|
494 |
-
clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);
|
495 |
-
|
496 |
-
if (ws_plugin__s2member_animateProcessingConfig.originalText)
|
497 |
-
$obj.val (ws_plugin__s2member_animateProcessingConfig.originalText);
|
498 |
-
|
499 |
-
return; // No need to proceed any further.
|
500 |
-
}
|
501 |
-
|
502 |
-
$obj.first ().each ( /* Interval routine configured here. */function()
|
503 |
-
{
|
504 |
-
var $this = $(this), i = 0, dir = 'r', dots = ['.', '..', '...'];
|
505 |
-
|
506 |
-
ws_plugin__s2member_animateProcessingConfig.originalText = $this.val ();
|
507 |
-
|
508 |
-
clearInterval(ws_plugin__s2member_animateProcessingConfig.interval);
|
509 |
-
|
510 |
-
ws_plugin__s2member_animateProcessingConfig.interval = setInterval(function()
|
511 |
-
{
|
512 |
-
if /* Right... */ (dir === 'r')
|
513 |
-
{
|
514 |
-
if (i + 1 <= dots.length - 1)
|
515 |
-
i = i + 1, dir = 'r';
|
516 |
-
else // Switch direction.
|
517 |
-
i = i - 1, dir = 'l';
|
518 |
-
}
|
519 |
-
|
520 |
-
else if /* Left.. */ (dir === 'l')
|
521 |
-
{
|
522 |
-
if (i - 1 >= 0)
|
523 |
-
i = i - 1, dir = 'l';
|
524 |
-
else // Switch direction.
|
525 |
-
i = i + 1, dir = 'r';
|
526 |
-
}
|
527 |
-
|
528 |
-
for (var _dots = dots[i], l = dots[i].length; l < dots.length; l++)
|
529 |
-
{
|
530 |
-
_dots += /* Prevents jumping. */ ' ';
|
531 |
-
}
|
532 |
-
|
533 |
-
$this.val ('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Processing", "s2member-front", "s2member")); ?>' + _dots);
|
534 |
-
}, ws_plugin__s2member_animateProcessingConfig.speed);
|
535 |
-
});
|
536 |
-
}
|
537 |
};
|
538 |
});
|
352 |
if (typeof field.tagName === 'string' && field.tagName.match (/^(input|textarea|select)$/i) && !field.disabled)
|
353 |
{
|
354 |
var tag = field.tagName.toLowerCase (), $field = $(field), type = $.trim ($field.attr ('type')).toLowerCase (), name = $.trim ($field.attr ('name')), value = $field.val ();
|
355 |
+
required = ( typeof required === 'boolean') ? required : ($field.attr ('aria-required') === 'true'), expected = ( typeof expected === 'string') ? expected : $.trim ($field.attr ('data-expected'));
|
356 |
|
357 |
+
var forcePersonalEmails = ('<?php echo strlen($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]); ?>' > 0);
|
358 |
var nonPersonalEmailUsers = new RegExp('^(<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (implode ("|", preg_split ("/[\r\n\t ;,]+/", preg_quote ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"], "/")))); ?>)@', 'i');
|
359 |
|
360 |
if (tag === 'input' && type === 'checkbox' && name.match (/\[\]$/))
|
413 |
{
|
414 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a date (required date format: dd/mm/yyyy).", "s2member-front", "s2member")); ?>';
|
415 |
}
|
416 |
+
else if (expected === 'email' && !value.match (/^[a-zA-Z0-9_!#$%&*+=?`{}~|\/\^\'\-]+(?:\.?[a-zA-Z0-9_!#$%&*+=?`{}~|\/\^\'\-]+)*@[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*)*(?:\.[a-zA-Z][a-zA-Z0-9]+)?$/))
|
417 |
{
|
418 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a valid email address.", "s2member-front", "s2member")); ?>';
|
419 |
}
|
421 |
{
|
422 |
return label + '\n' + $.sprintf ('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use a personal email address.\nAddresses like <%s@> are problematic.", "s2member-front", "s2member")); ?>', value.split ('@')[0]);
|
423 |
}
|
424 |
+
else if (expected === 'url' && !value.match (/^https?\:\/\/.+$/i))
|
425 |
{
|
426 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a full URL (starting with http or https).", "s2member-front", "s2member")); ?>';
|
427 |
}
|
428 |
+
else if (expected === 'domain' && !value.match (/^[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9]+)*)*(?:\.[a-zA-Z][a-zA-Z0-9]+)?$/))
|
429 |
{
|
430 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a domain name (domain name only, without http).", "s2member-front", "s2member")); ?>';
|
431 |
}
|
432 |
+
else if (expected === 'phone' && (!value.match (/^[0-9 ()\-]+$/) || value.replace (/[^0-9]+/g, '').length !== 10))
|
433 |
{
|
434 |
+
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a phone # (10 digits w/possible hyphens, spaces, brackets).", "s2member-front", "s2member")); ?>';
|
435 |
}
|
436 |
+
else if (expected === 'uszip' && !value.match (/^[0-9]{5}(?:\-[0-9]{4})?$/))
|
437 |
{
|
438 |
+
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a US zipcode (5-9 digits w/ possible hyphen).", "s2member-front", "s2member")); ?>';
|
439 |
}
|
440 |
+
else if (expected === 'cazip' && !value.match (/^[0-9A-Z]{3} ?[0-9A-Z]{3}$/i))
|
441 |
{
|
442 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a Canadian zipcode (6 alpha-numerics w/possible space).", "s2member-front", "s2member")); ?>';
|
443 |
}
|
444 |
+
else if (expected === 'uczip' && !value.match (/^[0-9]{5}(?:\-[0-9]{4})?$/) && !value.match (/^[0-9A-Z]{3} ?[0-9A-Z]{3}$/i))
|
445 |
{
|
446 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be a zipcode (either a US or Canadian zipcode).", "s2member-front", "s2member")); ?>';
|
447 |
}
|
448 |
+
else if (expected.match (/^alphanumerics\-spaces\-punctuation\-[0-9]+(?:\-e)?$/) && !value.match (/^[a-z 0-9\/\\\\,.?:;"\'{}[\]\^|+=_()*&%$#@!`~\-]+$/i))
|
449 |
{
|
450 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics, spaces & punctuation only.", "s2member-front", "s2member")); ?>';
|
451 |
}
|
452 |
+
else if (expected.match (/^alphanumerics\-spaces\-[0-9]+(?:\-e)?$/) && !value.match (/^[a-z 0-9]+$/i))
|
453 |
{
|
454 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & spaces only.", "s2member-front", "s2member")); ?>';
|
455 |
}
|
456 |
+
else if (expected.match (/^alphanumerics\-punctuation\-[0-9]+(?:\-e)?$/) && !value.match (/^[a-z0-9\/\\\\,.?:;"\'{}[\]\^|+=_()*&%$#@!`~\-]+$/i))
|
457 |
{
|
458 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics & punctuation only (no spaces).", "s2member-front", "s2member")); ?>';
|
459 |
}
|
460 |
+
else if (expected.match (/^alphanumerics\-[0-9]+(?:\-e)?$/) && !value.match (/^[a-z0-9]+$/i))
|
461 |
{
|
462 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphanumerics only (no spaces/punctuation).", "s2member-front", "s2member")); ?>';
|
463 |
}
|
464 |
+
else if (expected.match (/^alphabetics\-[0-9]+(?:\-e)?$/) && !value.match (/^[a-z]+$/i))
|
465 |
{
|
466 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use alphabetics only (no digits/spaces/punctuation).", "s2member-front", "s2member")); ?>';
|
467 |
}
|
468 |
+
else if (expected.match (/^numerics\-[0-9]+(?:\-e)?$/) && !value.match (/^[0-9]+$/i))
|
469 |
{
|
470 |
return label + '\n' + '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Please use numeric digits only.", "s2member-front", "s2member")); ?>';
|
471 |
}
|
472 |
+
else if (expected.match (/^(?:any|alphanumerics\-spaces\-punctuation|alphanumerics\-spaces|alphanumerics\-punctuation|alphanumerics|alphabetics|numerics)\-[0-9]+(?:\-e)?$/))
|
473 |
{
|
474 |
+
var split = expected.split ('-'), length = Number(split[1]), exactLength = (split.length > 2 && split[2] === 'e');
|
475 |
|
476 |
if /* An exact length is required? */ (exactLength && value.length !== length)
|
477 |
return label + '\n' + $.sprintf ('<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("Must be exactly %s %s.", "s2member-front", "s2member")); ?>', length, ((split[0] === 'numerics') ? ((length === 1) ? '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digit", "s2member-front", "s2member")); ?>' : '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("digits", "s2member-front", "s2member")); ?>') : ((length === 1) ? '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("character", "s2member-front", "s2member")); ?>' : '<?php echo c_ws_plugin__s2member_utils_strings::esc_js_sq (_x ("characters", "s2member-front", "s2member")); ?>')));
|
485 |
return '';
|
486 |
};
|
487 |
|
488 |
+
ws_plugin__s2member_animateProcessing = function($obj, reset)
|
489 |
{
|
490 |
+
if(reset)
|
491 |
+
$($obj).removeClass('ws-plugin--s2member-animate-processing');
|
492 |
+
else $($obj).addClass('ws-plugin--s2member-animate-processing');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
493 |
};
|
494 |
});
|
includes/templates/cfg-files/s2member-files-no-gzip.php
CHANGED
@@ -8,7 +8,7 @@ $ws_plugin__s2member_temp_s_base = (!empty ($base)) ? $base : c_ws_plugin__s2mem
|
|
8 |
// Do NOT use ``site`` URL. Must use the `home` URL here, because that's what WordPress uses in its own `mod_rewrite` implementation.
|
9 |
?>
|
10 |
|
11 |
-
<IfModule
|
12 |
RewriteEngine On
|
13 |
RewriteBase <?php echo $ws_plugin__s2member_temp_s_base . "\n"; ?>
|
14 |
RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+ [OR]
|
8 |
// Do NOT use ``site`` URL. Must use the `home` URL here, because that's what WordPress uses in its own `mod_rewrite` implementation.
|
9 |
?>
|
10 |
|
11 |
+
<IfModule rewrite_module>
|
12 |
RewriteEngine On
|
13 |
RewriteBase <?php echo $ws_plugin__s2member_temp_s_base . "\n"; ?>
|
14 |
RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+ [OR]
|
includes/translations/s2member.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version:
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
|
7 |
-
"POT-Creation-Date: 2014-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -17,8 +17,8 @@ msgctxt "s2member-front"
|
|
17 |
msgid "Max failed logins. Please wait %s and try again."
|
18 |
msgstr ""
|
19 |
|
20 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
21 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
22 |
#: s2member/includes/classes/profile-in.inc.php:120
|
23 |
#: s2member/includes/classes/sc-profile-in.inc.php:136
|
24 |
#: s2member-pro/includes/templates/forms/authnet-checkout-form.php:66
|
@@ -31,8 +31,8 @@ msgctxt "s2member-front"
|
|
31 |
msgid "First Name"
|
32 |
msgstr ""
|
33 |
|
34 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
35 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
36 |
#: s2member/includes/classes/profile-in.inc.php:140
|
37 |
#: s2member/includes/classes/sc-profile-in.inc.php:156
|
38 |
#: s2member-pro/includes/templates/forms/authnet-checkout-form.php:72
|
@@ -45,8 +45,8 @@ msgctxt "s2member-front"
|
|
45 |
msgid "Last Name"
|
46 |
msgstr ""
|
47 |
|
48 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
49 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
50 |
#: s2member/includes/classes/profile-in.inc.php:233
|
51 |
#: s2member/includes/classes/profile-in.inc.php:239
|
52 |
#: s2member/includes/classes/sc-profile-in.inc.php:249
|
@@ -55,12 +55,12 @@ msgctxt "s2member-front"
|
|
55 |
msgid "Please type your Password twice to confirm."
|
56 |
msgstr ""
|
57 |
|
58 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
59 |
msgctxt "s2member-front"
|
60 |
msgid "Password (please type it twice)"
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: s2member/includes/classes/custom-reg-fields.inc.php:
|
64 |
#: s2member/includes/classes/profile-in.inc.php:243
|
65 |
#: s2member/includes/classes/sc-profile-in.inc.php:259
|
66 |
#: s2member-pro/includes/templates/forms/authnet-checkout-form.php:94
|
@@ -71,6 +71,212 @@ msgctxt "s2member-front"
|
|
71 |
msgid "password strength indicator"
|
72 |
msgstr ""
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
#: s2member/includes/classes/email-configs.inc.php:150
|
75 |
msgctxt "s2member-front"
|
76 |
msgid "as a Member"
|
@@ -735,9 +941,9 @@ msgctxt "s2member-front"
|
|
735 |
msgid "Save All Changes"
|
736 |
msgstr ""
|
737 |
|
738 |
-
#: s2member/includes/classes/profile-mods-in.inc.php:
|
739 |
-
#: s2member/includes/classes/profile-mods-in.inc.php:
|
740 |
-
#: s2member/includes/classes/profile-mods-in.inc.php:
|
741 |
#: s2member/includes/classes/sc-profile-in.inc.php:70
|
742 |
msgctxt "s2member-front"
|
743 |
msgid "Profile updated successfully."
|
@@ -749,7 +955,7 @@ msgctxt "s2member-front"
|
|
749 |
msgid "<strong>Your Link Expired:</strong><br />Please contact Support if you need assistance."
|
750 |
msgstr ""
|
751 |
|
752 |
-
#: s2member/includes/classes/registrations.inc.php:
|
753 |
msgctxt "s2member-front"
|
754 |
msgid "s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!"
|
755 |
msgstr ""
|
@@ -1238,71 +1444,16 @@ msgctxt "s2member-front"
|
|
1238 |
msgid "Mismatch"
|
1239 |
msgstr ""
|
1240 |
|
1241 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:364
|
1242 |
-
msgctxt "s2member-front"
|
1243 |
-
msgid "Please check at least one of the boxes."
|
1244 |
-
msgstr ""
|
1245 |
-
|
1246 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:369
|
1247 |
-
msgctxt "s2member-front"
|
1248 |
-
msgid "Required. This box must be checked."
|
1249 |
-
msgstr ""
|
1250 |
-
|
1251 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:375
|
1252 |
-
msgctxt "s2member-front"
|
1253 |
-
msgid "Please select one of the options."
|
1254 |
-
msgstr ""
|
1255 |
-
|
1256 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:380
|
1257 |
-
msgctxt "s2member-front"
|
1258 |
-
msgid "Please select at least one of the options."
|
1259 |
-
msgstr ""
|
1260 |
-
|
1261 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:384
|
1262 |
-
msgctxt "s2member-front"
|
1263 |
-
msgid "This is a required field, please try again."
|
1264 |
-
msgstr ""
|
1265 |
-
|
1266 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:390
|
1267 |
-
msgctxt "s2member-front"
|
1268 |
-
msgid "Must be numeric (with or without decimals, commas allowed)."
|
1269 |
-
msgstr ""
|
1270 |
-
|
1271 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:394
|
1272 |
-
msgctxt "s2member-front"
|
1273 |
-
msgid "Must be numeric (with or without decimals, no commas)."
|
1274 |
-
msgstr ""
|
1275 |
-
|
1276 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:398
|
1277 |
-
msgctxt "s2member-front"
|
1278 |
-
msgid "Must be an integer (a whole number, without any decimals)."
|
1279 |
-
msgstr ""
|
1280 |
-
|
1281 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:402
|
1282 |
msgctxt "s2member-front"
|
1283 |
msgid "Must be an integer > 0 (whole number, no decimals, greater than 0)."
|
1284 |
msgstr ""
|
1285 |
|
1286 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:406
|
1287 |
-
msgctxt "s2member-front"
|
1288 |
-
msgid "Must be a float (floating point number, decimals required)."
|
1289 |
-
msgstr ""
|
1290 |
-
|
1291 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:410
|
1292 |
msgctxt "s2member-front"
|
1293 |
msgid "Must be a float > 0 (floating point number, decimals required, greater than 0)."
|
1294 |
msgstr ""
|
1295 |
|
1296 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:414
|
1297 |
-
msgctxt "s2member-front"
|
1298 |
-
msgid "Must be a date (required date format: dd/mm/yyyy)."
|
1299 |
-
msgstr ""
|
1300 |
-
|
1301 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:418
|
1302 |
-
msgctxt "s2member-front"
|
1303 |
-
msgid "Must be a valid email address."
|
1304 |
-
msgstr ""
|
1305 |
-
|
1306 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:422
|
1307 |
msgctxt "s2member-front"
|
1308 |
msgid ""
|
@@ -1310,36 +1461,11 @@ msgid ""
|
|
1310 |
"Addresses like <%s@> are problematic."
|
1311 |
msgstr ""
|
1312 |
|
1313 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:426
|
1314 |
-
msgctxt "s2member-front"
|
1315 |
-
msgid "Must be a full URL (starting with http or https)."
|
1316 |
-
msgstr ""
|
1317 |
-
|
1318 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:430
|
1319 |
-
msgctxt "s2member-front"
|
1320 |
-
msgid "Must be a domain name (domain name only, without http)."
|
1321 |
-
msgstr ""
|
1322 |
-
|
1323 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:434
|
1324 |
-
msgctxt "s2member-front"
|
1325 |
-
msgid "Must be a phone # (10 digits w/possible hyphens,spaces,brackets)."
|
1326 |
-
msgstr ""
|
1327 |
-
|
1328 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:438
|
1329 |
-
msgctxt "s2member-front"
|
1330 |
-
msgid "Must be a US zipcode (5-9 digits w/possible hyphen)."
|
1331 |
-
msgstr ""
|
1332 |
-
|
1333 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:442
|
1334 |
msgctxt "s2member-front"
|
1335 |
msgid "Must be a Canadian zipcode (6 alpha-numerics w/possible space)."
|
1336 |
msgstr ""
|
1337 |
|
1338 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:446
|
1339 |
-
msgctxt "s2member-front"
|
1340 |
-
msgid "Must be a zipcode (either a US or Canadian zipcode)."
|
1341 |
-
msgstr ""
|
1342 |
-
|
1343 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:450
|
1344 |
msgctxt "s2member-front"
|
1345 |
msgid "Please use alphanumerics, spaces & punctuation only."
|
@@ -1355,60 +1481,6 @@ msgctxt "s2member-front"
|
|
1355 |
msgid "Please use alphanumerics & punctuation only (no spaces)."
|
1356 |
msgstr ""
|
1357 |
|
1358 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:462
|
1359 |
-
msgctxt "s2member-front"
|
1360 |
-
msgid "Please use alphanumerics only (no spaces/punctuation)."
|
1361 |
-
msgstr ""
|
1362 |
-
|
1363 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:466
|
1364 |
-
msgctxt "s2member-front"
|
1365 |
-
msgid "Please use alphabetics only (no digits/spaces/punctuation)."
|
1366 |
-
msgstr ""
|
1367 |
-
|
1368 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:470
|
1369 |
-
msgctxt "s2member-front"
|
1370 |
-
msgid "Please use numeric digits only."
|
1371 |
-
msgstr ""
|
1372 |
-
|
1373 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
1374 |
-
msgctxt "s2member-front"
|
1375 |
-
msgid "Must be exactly %s %s."
|
1376 |
-
msgstr ""
|
1377 |
-
|
1378 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
1379 |
-
#: s2member/includes/s2member.js:480
|
1380 |
-
msgctxt "s2member-front"
|
1381 |
-
msgid "digit"
|
1382 |
-
msgstr ""
|
1383 |
-
|
1384 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
1385 |
-
#: s2member/includes/s2member.js:480
|
1386 |
-
msgctxt "s2member-front"
|
1387 |
-
msgid "digits"
|
1388 |
-
msgstr ""
|
1389 |
-
|
1390 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
1391 |
-
#: s2member/includes/s2member.js:480
|
1392 |
-
msgctxt "s2member-front"
|
1393 |
-
msgid "character"
|
1394 |
-
msgstr ""
|
1395 |
-
|
1396 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
1397 |
-
#: s2member/includes/s2member.js:480
|
1398 |
-
msgctxt "s2member-front"
|
1399 |
-
msgid "characters"
|
1400 |
-
msgstr ""
|
1401 |
-
|
1402 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:480
|
1403 |
-
msgctxt "s2member-front"
|
1404 |
-
msgid "Must be at least %s %s."
|
1405 |
-
msgstr ""
|
1406 |
-
|
1407 |
-
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:533
|
1408 |
-
msgctxt "s2member-front"
|
1409 |
-
msgid "Processing"
|
1410 |
-
msgstr ""
|
1411 |
-
|
1412 |
#: s2member/includes/syscon.inc.php:84
|
1413 |
msgctxt "s2member-front recaptcha-lang-code"
|
1414 |
msgid "en"
|
@@ -3173,270 +3245,270 @@ msgstr ""
|
|
3173 |
|
3174 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:520
|
3175 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:570
|
3176 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3177 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3178 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3179 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:598
|
3180 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:648
|
3181 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3182 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3183 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3184 |
msgctxt "s2member-front"
|
3185 |
msgid "Missing or invalid Security Code. Please try again."
|
3186 |
msgstr ""
|
3187 |
|
3188 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:523
|
3189 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:531
|
3190 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3191 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:601
|
3192 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:609
|
3193 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3194 |
msgctxt "s2member-admin"
|
3195 |
msgid "Unable to process. You are an Administrator. Stopping here for security. Otherwise, an Administrator could lose access."
|
3196 |
msgstr ""
|
3197 |
|
3198 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:534
|
3199 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3200 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3201 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:612
|
3202 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3203 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3204 |
msgctxt "s2member-front"
|
3205 |
msgid "Missing Card Type (Billing Method). Please try again."
|
3206 |
msgstr ""
|
3207 |
|
3208 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:537
|
3209 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:634
|
3210 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:637
|
3211 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3212 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
|
|
3213 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:615
|
3214 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:712
|
3215 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:715
|
3216 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3217 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
|
|
3218 |
msgctxt "s2member-front"
|
3219 |
msgid "Invalid Card Type (Billing Method). Please try again."
|
3220 |
msgstr ""
|
3221 |
|
3222 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:540
|
3223 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3224 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3225 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:618
|
3226 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3227 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3228 |
msgctxt "s2member-front"
|
3229 |
msgid "Missing Card Number. Please try again."
|
3230 |
msgstr ""
|
3231 |
|
3232 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:543
|
3233 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3234 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3235 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:621
|
3236 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3237 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3238 |
msgctxt "s2member-front"
|
3239 |
msgid "Missing Card Expiration Date (mm/yyyy). Please try again."
|
3240 |
msgstr ""
|
3241 |
|
3242 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:546
|
3243 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3244 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3245 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:624
|
3246 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3247 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3248 |
msgctxt "s2member-front"
|
3249 |
msgid "Invalid Card Expiration Date. Must be in this format (mm/yyyy). Please try again."
|
3250 |
msgstr ""
|
3251 |
|
3252 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:549
|
3253 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3254 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3255 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:627
|
3256 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3257 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3258 |
msgctxt "s2member-front"
|
3259 |
msgid "Missing Card Verification Code. It's on the back of your Card. 3-4 digits. Please try again."
|
3260 |
msgstr ""
|
3261 |
|
3262 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:552
|
3263 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3264 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3265 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:630
|
3266 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3267 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3268 |
msgctxt "s2member-front"
|
3269 |
msgid "Missing Card Start Date, or Issue #. Required for Maestro/Solo. Please try again."
|
3270 |
msgstr ""
|
3271 |
|
3272 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:555
|
3273 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3274 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3275 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:633
|
3276 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3277 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3278 |
msgctxt "s2member-front"
|
3279 |
msgid "Missing Street Address. Please try again."
|
3280 |
msgstr ""
|
3281 |
|
3282 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:558
|
3283 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3284 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3285 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:636
|
3286 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3287 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3288 |
msgctxt "s2member-front"
|
3289 |
msgid "Missing City/Town. Please try again."
|
3290 |
msgstr ""
|
3291 |
|
3292 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:561
|
3293 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3294 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3295 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:639
|
3296 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3297 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3298 |
msgctxt "s2member-front"
|
3299 |
msgid "Missing State/Province. Please try again."
|
3300 |
msgstr ""
|
3301 |
|
3302 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:564
|
3303 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3304 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3305 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:642
|
3306 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3307 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3308 |
msgctxt "s2member-front"
|
3309 |
msgid "Missing Country. Please try again."
|
3310 |
msgstr ""
|
3311 |
|
3312 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:567
|
3313 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3314 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3315 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:645
|
3316 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3317 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3318 |
msgctxt "s2member-front"
|
3319 |
msgid "Missing Postal/Zip Code. Please try again."
|
3320 |
msgstr ""
|
3321 |
|
3322 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:575
|
3323 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3324 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3325 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:653
|
3326 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3327 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3328 |
msgctxt "s2member-front"
|
3329 |
msgid "Missing First Name. Please try again."
|
3330 |
msgstr ""
|
3331 |
|
3332 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:578
|
3333 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3334 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3335 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:656
|
3336 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3337 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3338 |
msgctxt "s2member-front"
|
3339 |
msgid "Missing Last Name. Please try again."
|
3340 |
msgstr ""
|
3341 |
|
3342 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:581
|
3343 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3344 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3345 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:659
|
3346 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3347 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3348 |
msgctxt "s2member-front"
|
3349 |
msgid "Missing or invalid Email Address. Please try again."
|
3350 |
msgstr ""
|
3351 |
|
3352 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:584
|
3353 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3354 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3355 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:662
|
3356 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3357 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3358 |
msgctxt "s2member-front"
|
3359 |
msgid "Invalid Email Address. Please try again."
|
3360 |
msgstr ""
|
3361 |
|
3362 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:587
|
3363 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3364 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:665
|
3365 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3366 |
msgctxt "s2member-front"
|
3367 |
msgid "That Email Address is already in use. Please try again."
|
3368 |
msgstr ""
|
3369 |
|
3370 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:590
|
3371 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3372 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:668
|
3373 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3374 |
msgctxt "s2member-front"
|
3375 |
msgid "Missing or invalid Username. Please try again."
|
3376 |
msgstr ""
|
3377 |
|
3378 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:593
|
3379 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3380 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:671
|
3381 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3382 |
msgctxt "s2member-front"
|
3383 |
msgid "Invalid Username. Please try again. Use ONLY lowercase alphanumerics."
|
3384 |
msgstr ""
|
3385 |
|
3386 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:596
|
3387 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3388 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:674
|
3389 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3390 |
msgctxt "s2member-front"
|
3391 |
msgid "That Username is already in use. Please try again."
|
3392 |
msgstr ""
|
3393 |
|
3394 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:602
|
3395 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3396 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:680
|
3397 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3398 |
msgctxt "s2member-front"
|
3399 |
msgid "Missing Password. Please try again."
|
3400 |
msgstr ""
|
3401 |
|
3402 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:605
|
3403 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3404 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:683
|
3405 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3406 |
msgctxt "s2member-front"
|
3407 |
msgid "Invalid Password. Must be at least 6 characters. Please try again."
|
3408 |
msgstr ""
|
3409 |
|
3410 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:608
|
3411 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3412 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:686
|
3413 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3414 |
msgctxt "s2member-front"
|
3415 |
msgid "Invalid Password. Max length is 20 characters. Please try again."
|
3416 |
msgstr ""
|
3417 |
|
3418 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:611
|
3419 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3420 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:689
|
3421 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3422 |
msgctxt "s2member-front"
|
3423 |
msgid "Password fields do NOT match. Please try again."
|
3424 |
msgstr ""
|
3425 |
|
3426 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3427 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3428 |
msgctxt "s2member-front"
|
3429 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to modify your billing plan."
|
3430 |
msgstr ""
|
3431 |
|
3432 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3433 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3434 |
msgctxt "s2member-front"
|
3435 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> before making this purchase."
|
3436 |
msgstr ""
|
3437 |
|
3438 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:
|
3439 |
-
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:
|
3440 |
msgctxt "s2member-front"
|
3441 |
msgid "Unknown form submission type. Please contact Support."
|
3442 |
msgstr ""
|
@@ -3473,26 +3545,26 @@ msgctxt "s2member-front"
|
|
3473 |
msgid "<strong>Oops.</strong> No Subscr. ID. Please contact Support for assistance."
|
3474 |
msgstr ""
|
3475 |
|
3476 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3477 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3478 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:295
|
3479 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:438
|
3480 |
msgctxt "s2member-front percentage-symbol"
|
3481 |
msgid "%"
|
3482 |
msgstr ""
|
3483 |
|
3484 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3485 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:437
|
3486 |
msgctxt "s2member-front"
|
3487 |
msgid " + tax"
|
3488 |
msgstr ""
|
3489 |
|
3490 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3491 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3492 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3493 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3494 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3495 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3496 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:482
|
3497 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:534
|
3498 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:547
|
@@ -3503,12 +3575,12 @@ msgctxt "s2member-front"
|
|
3503 |
msgid "COUPON %s off. (Now: %s)"
|
3504 |
msgstr ""
|
3505 |
|
3506 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3507 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3508 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3509 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3510 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3511 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3512 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:483
|
3513 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:535
|
3514 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:548
|
@@ -3519,12 +3591,12 @@ msgctxt "s2member-front"
|
|
3519 |
msgid "<div>Coupon: <strong>%s off</strong>. (Now: <strong>%s</strong>)</div>"
|
3520 |
msgstr ""
|
3521 |
|
3522 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3523 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3524 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3525 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3526 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3527 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3528 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:495
|
3529 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:508
|
3530 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:521
|
@@ -3535,12 +3607,12 @@ msgctxt "s2member-front"
|
|
3535 |
msgid "COUPON %s off. (Now: %s, then %s)"
|
3536 |
msgstr ""
|
3537 |
|
3538 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3539 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3540 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3541 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3542 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3543 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3544 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:496
|
3545 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:509
|
3546 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:522
|
@@ -3551,27 +3623,27 @@ msgctxt "s2member-front"
|
|
3551 |
msgid "<div>Coupon: <strong>%s off</strong>. (Now: <strong>%s, then %s</strong>)</div>"
|
3552 |
msgstr ""
|
3553 |
|
3554 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3555 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3556 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:552
|
3557 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:649
|
3558 |
msgctxt "s2member-front"
|
3559 |
msgid "<div>Sorry, your Coupon is not applicable.</div>"
|
3560 |
msgstr ""
|
3561 |
|
3562 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3563 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:653
|
3564 |
msgctxt "s2member-front"
|
3565 |
msgid "<div>Coupon: <strong>%s0.00 off</strong>.</div>"
|
3566 |
msgstr ""
|
3567 |
|
3568 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3569 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:657
|
3570 |
msgctxt "s2member-front"
|
3571 |
msgid "<div>Sorry, your Coupon cannot be applied to this particular purchase.</div>"
|
3572 |
msgstr ""
|
3573 |
|
3574 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3575 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:661
|
3576 |
msgctxt "s2member-front"
|
3577 |
msgid "<div>Sorry, your Coupon <strong>expired</strong>: <em>%s</em>.</div>"
|
@@ -3579,14 +3651,14 @@ msgstr ""
|
|
3579 |
|
3580 |
#. translators: `%1$s` is new price/description, after coupon applied. `%2$s`
|
3581 |
#. is original description.
|
3582 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3583 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:667
|
3584 |
msgctxt "s2member-front"
|
3585 |
msgid "%1$s ~ ORIGINALLY: %2$s"
|
3586 |
msgstr ""
|
3587 |
|
3588 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3589 |
-
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:
|
3590 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:696
|
3591 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:699
|
3592 |
msgctxt "s2member-front"
|
@@ -3828,6 +3900,11 @@ msgctxt "s2member-front"
|
|
3828 |
msgid "My Profile Summary"
|
3829 |
msgstr ""
|
3830 |
|
|
|
|
|
|
|
|
|
|
|
3831 |
#: s2member-pro/includes/separates/gateways/authnet/authnet-min.js:1
|
3832 |
#: s2member-pro/includes/separates/gateways/authnet/authnet.js:73
|
3833 |
#: s2member-pro/includes/separates/gateways/authnet/authnet.js:167
|
@@ -4180,6 +4257,26 @@ msgctxt "s2member-front"
|
|
4180 |
msgid "Update Billing Information"
|
4181 |
msgstr ""
|
4182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4183 |
#: s2member-pro/includes/templates/options/alipay-membership-ccap-terms.php:6
|
4184 |
#: s2member-pro/includes/templates/options/alipay-membership-regular-terms.php:6
|
4185 |
msgctxt "s2member-admin"
|
2 |
# This file is distributed under the same license as the package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: 140520\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
|
7 |
+
"POT-Creation-Date: 2014-05-21 05:15:15+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
17 |
msgid "Max failed logins. Please wait %s and try again."
|
18 |
msgstr ""
|
19 |
|
20 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:340
|
21 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:476
|
22 |
#: s2member/includes/classes/profile-in.inc.php:120
|
23 |
#: s2member/includes/classes/sc-profile-in.inc.php:136
|
24 |
#: s2member-pro/includes/templates/forms/authnet-checkout-form.php:66
|
31 |
msgid "First Name"
|
32 |
msgstr ""
|
33 |
|
34 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:352
|
35 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:491
|
36 |
#: s2member/includes/classes/profile-in.inc.php:140
|
37 |
#: s2member/includes/classes/sc-profile-in.inc.php:156
|
38 |
#: s2member-pro/includes/templates/forms/authnet-checkout-form.php:72
|
45 |
msgid "Last Name"
|
46 |
msgstr ""
|
47 |
|
48 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:449
|
49 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:454
|
50 |
#: s2member/includes/classes/profile-in.inc.php:233
|
51 |
#: s2member/includes/classes/profile-in.inc.php:239
|
52 |
#: s2member/includes/classes/sc-profile-in.inc.php:249
|
55 |
msgid "Please type your Password twice to confirm."
|
56 |
msgstr ""
|
57 |
|
58 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:450
|
59 |
msgctxt "s2member-front"
|
60 |
msgid "Password (please type it twice)"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:458
|
64 |
#: s2member/includes/classes/profile-in.inc.php:243
|
65 |
#: s2member/includes/classes/sc-profile-in.inc.php:259
|
66 |
#: s2member-pro/includes/templates/forms/authnet-checkout-form.php:94
|
71 |
msgid "password strength indicator"
|
72 |
msgstr ""
|
73 |
|
74 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:605
|
75 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:616
|
76 |
+
msgctxt "s2member-front"
|
77 |
+
msgid "Invalid data type. Expecting a string."
|
78 |
+
msgstr ""
|
79 |
+
|
80 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:611
|
81 |
+
msgctxt "s2member-front"
|
82 |
+
msgid "Invalid data type. Expecting an array."
|
83 |
+
msgstr ""
|
84 |
+
|
85 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:624
|
86 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:655
|
87 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:384
|
88 |
+
msgctxt "s2member-front"
|
89 |
+
msgid "This is a required field, please try again."
|
90 |
+
msgstr ""
|
91 |
+
|
92 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:630
|
93 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:369
|
94 |
+
msgctxt "s2member-front"
|
95 |
+
msgid "Required. This box must be checked."
|
96 |
+
msgstr ""
|
97 |
+
|
98 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:635
|
99 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:364
|
100 |
+
msgctxt "s2member-front"
|
101 |
+
msgid "Please check at least one of the boxes."
|
102 |
+
msgstr ""
|
103 |
+
|
104 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:640
|
105 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:645
|
106 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:375
|
107 |
+
msgctxt "s2member-front"
|
108 |
+
msgid "Please select one of the options."
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:650
|
112 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:380
|
113 |
+
msgctxt "s2member-front"
|
114 |
+
msgid "Please select at least one of the options."
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:666
|
118 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:390
|
119 |
+
msgctxt "s2member-front"
|
120 |
+
msgid "Must be numeric (with or without decimals, commas allowed)."
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:671
|
124 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:394
|
125 |
+
msgctxt "s2member-front"
|
126 |
+
msgid "Must be numeric (with or without decimals, no commas)."
|
127 |
+
msgstr ""
|
128 |
+
|
129 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:676
|
130 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:398
|
131 |
+
msgctxt "s2member-front"
|
132 |
+
msgid "Must be an integer (a whole number, without any decimals)."
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:681
|
136 |
+
msgctxt "s2member-front"
|
137 |
+
msgid "Must be an integer > 0 (whole number, no decimals, greater than 0)."
|
138 |
+
msgstr ""
|
139 |
+
|
140 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:686
|
141 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:406
|
142 |
+
msgctxt "s2member-front"
|
143 |
+
msgid "Must be a float (floating point number, decimals required)."
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:691
|
147 |
+
msgctxt "s2member-front"
|
148 |
+
msgid "Must be a float > 0 (floating point number, decimals required, greater than 0)."
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:696
|
152 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:414
|
153 |
+
msgctxt "s2member-front"
|
154 |
+
msgid "Must be a date (required date format: dd/mm/yyyy)."
|
155 |
+
msgstr ""
|
156 |
+
|
157 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:701
|
158 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:418
|
159 |
+
msgctxt "s2member-front"
|
160 |
+
msgid "Must be a valid email address."
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:704
|
164 |
+
msgctxt "s2member-front"
|
165 |
+
msgid "Please use a personal email address. Addresses like <%s@> are problematic."
|
166 |
+
msgstr ""
|
167 |
+
|
168 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:709
|
169 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:426
|
170 |
+
msgctxt "s2member-front"
|
171 |
+
msgid "Must be a full URL (starting with http or https)."
|
172 |
+
msgstr ""
|
173 |
+
|
174 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:714
|
175 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:430
|
176 |
+
msgctxt "s2member-front"
|
177 |
+
msgid "Must be a domain name (domain name only, without http)."
|
178 |
+
msgstr ""
|
179 |
+
|
180 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:719
|
181 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:434
|
182 |
+
msgctxt "s2member-front"
|
183 |
+
msgid "Must be a phone # (10 digits w/possible hyphens, spaces, brackets)."
|
184 |
+
msgstr ""
|
185 |
+
|
186 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:724
|
187 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:438
|
188 |
+
msgctxt "s2member-front"
|
189 |
+
msgid "Must be a US zipcode (5-9 digits w/ possible hyphen)."
|
190 |
+
msgstr ""
|
191 |
+
|
192 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:729
|
193 |
+
msgctxt "s2member-front"
|
194 |
+
msgid "Must be a Canadian zipcode (6 alpha-numerics w/ possible space)."
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:734
|
198 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:446
|
199 |
+
msgctxt "s2member-front"
|
200 |
+
msgid "Must be a zipcode (either a US or Canadian zipcode)."
|
201 |
+
msgstr ""
|
202 |
+
|
203 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:740
|
204 |
+
msgctxt "s2member-front"
|
205 |
+
msgid "Please use alphanumerics, spaces & punctuation only."
|
206 |
+
msgstr ""
|
207 |
+
|
208 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:743
|
209 |
+
msgctxt "s2member-front"
|
210 |
+
msgid "Please use alphanumerics & spaces only."
|
211 |
+
msgstr ""
|
212 |
+
|
213 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:746
|
214 |
+
msgctxt "s2member-front"
|
215 |
+
msgid "Please use alphanumerics & punctuation only (no spaces)."
|
216 |
+
msgstr ""
|
217 |
+
|
218 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:749
|
219 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:462
|
220 |
+
msgctxt "s2member-front"
|
221 |
+
msgid "Please use alphanumerics only (no spaces/punctuation)."
|
222 |
+
msgstr ""
|
223 |
+
|
224 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:752
|
225 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:466
|
226 |
+
msgctxt "s2member-front"
|
227 |
+
msgid "Please use alphabetics only (no digits/spaces/punctuation)."
|
228 |
+
msgstr ""
|
229 |
+
|
230 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:755
|
231 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:470
|
232 |
+
msgctxt "s2member-front"
|
233 |
+
msgid "Please use numeric digits only."
|
234 |
+
msgstr ""
|
235 |
+
|
236 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:768
|
237 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:782
|
238 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
239 |
+
#: s2member/includes/s2member.js:480
|
240 |
+
msgctxt "s2member-front"
|
241 |
+
msgid "digit"
|
242 |
+
msgstr ""
|
243 |
+
|
244 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:769
|
245 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:783
|
246 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
247 |
+
#: s2member/includes/s2member.js:480
|
248 |
+
msgctxt "s2member-front"
|
249 |
+
msgid "digits"
|
250 |
+
msgstr ""
|
251 |
+
|
252 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:772
|
253 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:786
|
254 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
255 |
+
#: s2member/includes/s2member.js:480
|
256 |
+
msgctxt "s2member-front"
|
257 |
+
msgid "character"
|
258 |
+
msgstr ""
|
259 |
+
|
260 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:773
|
261 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:787
|
262 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
263 |
+
#: s2member/includes/s2member.js:480
|
264 |
+
msgctxt "s2member-front"
|
265 |
+
msgid "characters"
|
266 |
+
msgstr ""
|
267 |
+
|
268 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:775
|
269 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:477
|
270 |
+
msgctxt "s2member-front"
|
271 |
+
msgid "Must be exactly %s %s."
|
272 |
+
msgstr ""
|
273 |
+
|
274 |
+
#: s2member/includes/classes/custom-reg-fields.inc.php:789
|
275 |
+
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:480
|
276 |
+
msgctxt "s2member-front"
|
277 |
+
msgid "Must be at least %s %s."
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
#: s2member/includes/classes/email-configs.inc.php:150
|
281 |
msgctxt "s2member-front"
|
282 |
msgid "as a Member"
|
941 |
msgid "Save All Changes"
|
942 |
msgstr ""
|
943 |
|
944 |
+
#: s2member/includes/classes/profile-mods-in.inc.php:141
|
945 |
+
#: s2member/includes/classes/profile-mods-in.inc.php:142
|
946 |
+
#: s2member/includes/classes/profile-mods-in.inc.php:143
|
947 |
#: s2member/includes/classes/sc-profile-in.inc.php:70
|
948 |
msgctxt "s2member-front"
|
949 |
msgid "Profile updated successfully."
|
955 |
msgid "<strong>Your Link Expired:</strong><br />Please contact Support if you need assistance."
|
956 |
msgstr ""
|
957 |
|
958 |
+
#: s2member/includes/classes/registrations.inc.php:510
|
959 |
msgctxt "s2member-front"
|
960 |
msgid "s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!"
|
961 |
msgstr ""
|
1444 |
msgid "Mismatch"
|
1445 |
msgstr ""
|
1446 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1447 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:402
|
1448 |
msgctxt "s2member-front"
|
1449 |
msgid "Must be an integer > 0 (whole number, no decimals, greater than 0)."
|
1450 |
msgstr ""
|
1451 |
|
|
|
|
|
|
|
|
|
|
|
1452 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:410
|
1453 |
msgctxt "s2member-front"
|
1454 |
msgid "Must be a float > 0 (floating point number, decimals required, greater than 0)."
|
1455 |
msgstr ""
|
1456 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1457 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:422
|
1458 |
msgctxt "s2member-front"
|
1459 |
msgid ""
|
1461 |
"Addresses like <%s@> are problematic."
|
1462 |
msgstr ""
|
1463 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1464 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:442
|
1465 |
msgctxt "s2member-front"
|
1466 |
msgid "Must be a Canadian zipcode (6 alpha-numerics w/possible space)."
|
1467 |
msgstr ""
|
1468 |
|
|
|
|
|
|
|
|
|
|
|
1469 |
#: s2member/includes/s2member-min.js:1 s2member/includes/s2member.js:450
|
1470 |
msgctxt "s2member-front"
|
1471 |
msgid "Please use alphanumerics, spaces & punctuation only."
|
1481 |
msgid "Please use alphanumerics & punctuation only (no spaces)."
|
1482 |
msgstr ""
|
1483 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1484 |
#: s2member/includes/syscon.inc.php:84
|
1485 |
msgctxt "s2member-front recaptcha-lang-code"
|
1486 |
msgid "en"
|
3245 |
|
3246 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:520
|
3247 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:570
|
3248 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:617
|
3249 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:673
|
3250 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:768
|
3251 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:598
|
3252 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:648
|
3253 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:695
|
3254 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:751
|
3255 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:846
|
3256 |
msgctxt "s2member-front"
|
3257 |
msgid "Missing or invalid Security Code. Please try again."
|
3258 |
msgstr ""
|
3259 |
|
3260 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:523
|
3261 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:531
|
3262 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:684
|
3263 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:601
|
3264 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:609
|
3265 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:762
|
3266 |
msgctxt "s2member-admin"
|
3267 |
msgid "Unable to process. You are an Administrator. Stopping here for security. Otherwise, an Administrator could lose access."
|
3268 |
msgstr ""
|
3269 |
|
3270 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:534
|
3271 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:634
|
3272 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:729
|
3273 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:612
|
3274 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:712
|
3275 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:807
|
3276 |
msgctxt "s2member-front"
|
3277 |
msgid "Missing Card Type (Billing Method). Please try again."
|
3278 |
msgstr ""
|
3279 |
|
3280 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:537
|
|
|
3281 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:637
|
3282 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:640
|
3283 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:732
|
3284 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:735
|
3285 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:615
|
|
|
3286 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:715
|
3287 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:718
|
3288 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:810
|
3289 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:813
|
3290 |
msgctxt "s2member-front"
|
3291 |
msgid "Invalid Card Type (Billing Method). Please try again."
|
3292 |
msgstr ""
|
3293 |
|
3294 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:540
|
3295 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:643
|
3296 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:738
|
3297 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:618
|
3298 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:721
|
3299 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:816
|
3300 |
msgctxt "s2member-front"
|
3301 |
msgid "Missing Card Number. Please try again."
|
3302 |
msgstr ""
|
3303 |
|
3304 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:543
|
3305 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:646
|
3306 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:741
|
3307 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:621
|
3308 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:724
|
3309 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:819
|
3310 |
msgctxt "s2member-front"
|
3311 |
msgid "Missing Card Expiration Date (mm/yyyy). Please try again."
|
3312 |
msgstr ""
|
3313 |
|
3314 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:546
|
3315 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:649
|
3316 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:744
|
3317 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:624
|
3318 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:727
|
3319 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:822
|
3320 |
msgctxt "s2member-front"
|
3321 |
msgid "Invalid Card Expiration Date. Must be in this format (mm/yyyy). Please try again."
|
3322 |
msgstr ""
|
3323 |
|
3324 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:549
|
3325 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:652
|
3326 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:747
|
3327 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:627
|
3328 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:730
|
3329 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:825
|
3330 |
msgctxt "s2member-front"
|
3331 |
msgid "Missing Card Verification Code. It's on the back of your Card. 3-4 digits. Please try again."
|
3332 |
msgstr ""
|
3333 |
|
3334 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:552
|
3335 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:655
|
3336 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:750
|
3337 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:630
|
3338 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:733
|
3339 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:828
|
3340 |
msgctxt "s2member-front"
|
3341 |
msgid "Missing Card Start Date, or Issue #. Required for Maestro/Solo. Please try again."
|
3342 |
msgstr ""
|
3343 |
|
3344 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:555
|
3345 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:658
|
3346 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:753
|
3347 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:633
|
3348 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:736
|
3349 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:831
|
3350 |
msgctxt "s2member-front"
|
3351 |
msgid "Missing Street Address. Please try again."
|
3352 |
msgstr ""
|
3353 |
|
3354 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:558
|
3355 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:661
|
3356 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:756
|
3357 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:636
|
3358 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:739
|
3359 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:834
|
3360 |
msgctxt "s2member-front"
|
3361 |
msgid "Missing City/Town. Please try again."
|
3362 |
msgstr ""
|
3363 |
|
3364 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:561
|
3365 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:664
|
3366 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:759
|
3367 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:639
|
3368 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:742
|
3369 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:837
|
3370 |
msgctxt "s2member-front"
|
3371 |
msgid "Missing State/Province. Please try again."
|
3372 |
msgstr ""
|
3373 |
|
3374 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:564
|
3375 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:667
|
3376 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:762
|
3377 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:642
|
3378 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:745
|
3379 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:840
|
3380 |
msgctxt "s2member-front"
|
3381 |
msgid "Missing Country. Please try again."
|
3382 |
msgstr ""
|
3383 |
|
3384 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:567
|
3385 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:670
|
3386 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:765
|
3387 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:645
|
3388 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:748
|
3389 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:843
|
3390 |
msgctxt "s2member-front"
|
3391 |
msgid "Missing Postal/Zip Code. Please try again."
|
3392 |
msgstr ""
|
3393 |
|
3394 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:575
|
3395 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:622
|
3396 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:687
|
3397 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:653
|
3398 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:700
|
3399 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:765
|
3400 |
msgctxt "s2member-front"
|
3401 |
msgid "Missing First Name. Please try again."
|
3402 |
msgstr ""
|
3403 |
|
3404 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:578
|
3405 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:625
|
3406 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:690
|
3407 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:656
|
3408 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:703
|
3409 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:768
|
3410 |
msgctxt "s2member-front"
|
3411 |
msgid "Missing Last Name. Please try again."
|
3412 |
msgstr ""
|
3413 |
|
3414 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:581
|
3415 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:628
|
3416 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:693
|
3417 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:659
|
3418 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:706
|
3419 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:771
|
3420 |
msgctxt "s2member-front"
|
3421 |
msgid "Missing or invalid Email Address. Please try again."
|
3422 |
msgstr ""
|
3423 |
|
3424 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:584
|
3425 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:631
|
3426 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:696
|
3427 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:662
|
3428 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:709
|
3429 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:774
|
3430 |
msgctxt "s2member-front"
|
3431 |
msgid "Invalid Email Address. Please try again."
|
3432 |
msgstr ""
|
3433 |
|
3434 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:587
|
3435 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:699
|
3436 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:665
|
3437 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:777
|
3438 |
msgctxt "s2member-front"
|
3439 |
msgid "That Email Address is already in use. Please try again."
|
3440 |
msgstr ""
|
3441 |
|
3442 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:590
|
3443 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:702
|
3444 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:668
|
3445 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:780
|
3446 |
msgctxt "s2member-front"
|
3447 |
msgid "Missing or invalid Username. Please try again."
|
3448 |
msgstr ""
|
3449 |
|
3450 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:593
|
3451 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:705
|
3452 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:671
|
3453 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:783
|
3454 |
msgctxt "s2member-front"
|
3455 |
msgid "Invalid Username. Please try again. Use ONLY lowercase alphanumerics."
|
3456 |
msgstr ""
|
3457 |
|
3458 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:596
|
3459 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:708
|
3460 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:674
|
3461 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:786
|
3462 |
msgctxt "s2member-front"
|
3463 |
msgid "That Username is already in use. Please try again."
|
3464 |
msgstr ""
|
3465 |
|
3466 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:602
|
3467 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:714
|
3468 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:680
|
3469 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:792
|
3470 |
msgctxt "s2member-front"
|
3471 |
msgid "Missing Password. Please try again."
|
3472 |
msgstr ""
|
3473 |
|
3474 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:605
|
3475 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:717
|
3476 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:683
|
3477 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:795
|
3478 |
msgctxt "s2member-front"
|
3479 |
msgid "Invalid Password. Must be at least 6 characters. Please try again."
|
3480 |
msgstr ""
|
3481 |
|
3482 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:608
|
3483 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:720
|
3484 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:686
|
3485 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:798
|
3486 |
msgctxt "s2member-front"
|
3487 |
msgid "Invalid Password. Max length is 20 characters. Please try again."
|
3488 |
msgstr ""
|
3489 |
|
3490 |
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:611
|
3491 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:723
|
3492 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:689
|
3493 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:801
|
3494 |
msgctxt "s2member-front"
|
3495 |
msgid "Password fields do NOT match. Please try again."
|
3496 |
msgstr ""
|
3497 |
|
3498 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:678
|
3499 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:756
|
3500 |
msgctxt "s2member-front"
|
3501 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> to modify your billing plan."
|
3502 |
msgstr ""
|
3503 |
|
3504 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:681
|
3505 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:759
|
3506 |
msgctxt "s2member-front"
|
3507 |
msgid "You must <a href=\"%s\" rel=\"nofollow\">log in</a> before making this purchase."
|
3508 |
msgstr ""
|
3509 |
|
3510 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-responses.inc.php:771
|
3511 |
+
#: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:849
|
3512 |
msgctxt "s2member-front"
|
3513 |
msgid "Unknown form submission type. Please contact Support."
|
3514 |
msgstr ""
|
3545 |
msgid "<strong>Oops.</strong> No Subscr. ID. Please contact Support for assistance."
|
3546 |
msgstr ""
|
3547 |
|
3548 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:664
|
3549 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:807
|
3550 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:295
|
3551 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:438
|
3552 |
msgctxt "s2member-front percentage-symbol"
|
3553 |
msgid "%"
|
3554 |
msgstr ""
|
3555 |
|
3556 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:806
|
3557 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:437
|
3558 |
msgctxt "s2member-front"
|
3559 |
msgid " + tax"
|
3560 |
msgstr ""
|
3561 |
|
3562 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:851
|
3563 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:903
|
3564 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:916
|
3565 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:938
|
3566 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:998
|
3567 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1013
|
3568 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:482
|
3569 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:534
|
3570 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:547
|
3575 |
msgid "COUPON %s off. (Now: %s)"
|
3576 |
msgstr ""
|
3577 |
|
3578 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:852
|
3579 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:904
|
3580 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:917
|
3581 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:939
|
3582 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:999
|
3583 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1014
|
3584 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:483
|
3585 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:535
|
3586 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:548
|
3591 |
msgid "<div>Coupon: <strong>%s off</strong>. (Now: <strong>%s</strong>)</div>"
|
3592 |
msgstr ""
|
3593 |
|
3594 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:864
|
3595 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:877
|
3596 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:890
|
3597 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:953
|
3598 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:968
|
3599 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:983
|
3600 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:495
|
3601 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:508
|
3602 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:521
|
3607 |
msgid "COUPON %s off. (Now: %s, then %s)"
|
3608 |
msgstr ""
|
3609 |
|
3610 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:865
|
3611 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:878
|
3612 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:891
|
3613 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:954
|
3614 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:969
|
3615 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:984
|
3616 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:496
|
3617 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:509
|
3618 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:522
|
3623 |
msgid "<div>Coupon: <strong>%s off</strong>. (Now: <strong>%s, then %s</strong>)</div>"
|
3624 |
msgstr ""
|
3625 |
|
3626 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:921
|
3627 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1018
|
3628 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:552
|
3629 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:649
|
3630 |
msgctxt "s2member-front"
|
3631 |
msgid "<div>Sorry, your Coupon is not applicable.</div>"
|
3632 |
msgstr ""
|
3633 |
|
3634 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1022
|
3635 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:653
|
3636 |
msgctxt "s2member-front"
|
3637 |
msgid "<div>Coupon: <strong>%s0.00 off</strong>.</div>"
|
3638 |
msgstr ""
|
3639 |
|
3640 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1026
|
3641 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:657
|
3642 |
msgctxt "s2member-front"
|
3643 |
msgid "<div>Sorry, your Coupon cannot be applied to this particular purchase.</div>"
|
3644 |
msgstr ""
|
3645 |
|
3646 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1030
|
3647 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:661
|
3648 |
msgctxt "s2member-front"
|
3649 |
msgid "<div>Sorry, your Coupon <strong>expired</strong>: <em>%s</em>.</div>"
|
3651 |
|
3652 |
#. translators: `%1$s` is new price/description, after coupon applied. `%2$s`
|
3653 |
#. is original description.
|
3654 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1036
|
3655 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:667
|
3656 |
msgctxt "s2member-front"
|
3657 |
msgid "%1$s ~ ORIGINALLY: %2$s"
|
3658 |
msgstr ""
|
3659 |
|
3660 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1065
|
3661 |
+
#: s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:1068
|
3662 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:696
|
3663 |
#: s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:699
|
3664 |
msgctxt "s2member-front"
|
3900 |
msgid "My Profile Summary"
|
3901 |
msgstr ""
|
3902 |
|
3903 |
+
#: s2member-pro/includes/classes/sc-member-list-in.inc.php:205
|
3904 |
+
msgctxt "s2member-front"
|
3905 |
+
msgid "Search users..."
|
3906 |
+
msgstr ""
|
3907 |
+
|
3908 |
#: s2member-pro/includes/separates/gateways/authnet/authnet-min.js:1
|
3909 |
#: s2member-pro/includes/separates/gateways/authnet/authnet.js:73
|
3910 |
#: s2member-pro/includes/separates/gateways/authnet/authnet.js:167
|
4257 |
msgid "Update Billing Information"
|
4258 |
msgstr ""
|
4259 |
|
4260 |
+
#: s2member-pro/includes/templates/members/member-list-search-box.php:25
|
4261 |
+
msgctxt "s2member-front"
|
4262 |
+
msgid "Search"
|
4263 |
+
msgstr ""
|
4264 |
+
|
4265 |
+
#: s2member-pro/includes/templates/members/member-list.php:88
|
4266 |
+
msgctxt "s2member-front"
|
4267 |
+
msgid "Page:"
|
4268 |
+
msgstr ""
|
4269 |
+
|
4270 |
+
#: s2member-pro/includes/templates/members/member-list.php:96
|
4271 |
+
msgctxt "s2member-front"
|
4272 |
+
msgid "Sorry, your search returned 0 results."
|
4273 |
+
msgstr ""
|
4274 |
+
|
4275 |
+
#: s2member-pro/includes/templates/members/member-list.php:98
|
4276 |
+
msgctxt "s2member-front"
|
4277 |
+
msgid "Sorry, there are no users to list at this time."
|
4278 |
+
msgstr ""
|
4279 |
+
|
4280 |
#: s2member-pro/includes/templates/options/alipay-membership-ccap-terms.php:6
|
4281 |
#: s2member-pro/includes/templates/options/alipay-membership-regular-terms.php:6
|
4282 |
msgctxt "s2member-admin"
|
readme.txt
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
|
2 |
|
3 |
-
Version:
|
4 |
-
Stable tag:
|
5 |
|
6 |
SSL Compatible: yes
|
7 |
bbPress® Compatible: yes
|
@@ -142,12 +142,24 @@ Released under the terms of the [GNU General Public License](http://www.gnu.org/
|
|
142 |
|
143 |
== Upgrade Notice ==
|
144 |
|
145 |
-
=
|
146 |
|
147 |
-
(Maintenance Release) Upgrade immediately
|
148 |
|
149 |
== Changelog ==
|
150 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
= v140423 =
|
152 |
|
153 |
* (s2Member/s2Member Pro) **WP v3.9 Compatibility**. Resolving an incompatibility between s2Member and WP v3.9 where s2Member was attempting to use the jQuery `highlight` effect no longer available by default; starting with WP v3.9. A symptom of this bug was to have problems closing the dialog box when creating new Registration/Profile Fields with s2Member in the WP Dashboard. See also [this GitHub issue](https://github.com/WebSharks/s2Member/issues/108).
|
@@ -499,101 +511,5 @@ Released under the terms of the [GNU General Public License](http://www.gnu.org/
|
|
499 |
|
500 |
= v121213 =
|
501 |
|
502 |
-
*
|
503 |
-
* **Updated for compatibility with WordPress® v3.5. Backward compatibility remains for previous versions of WordPress®, as far back as WordPress® v3.2.**
|
504 |
-
* (s2Member Pro) **Bug Fix**. An issue first introduced in s2Member® Pro v120517 where we fixed problems with the `maxlength` attribute in Authorize.Net Pro Forms, left a remaining problem. The State/Province field in the Billing Address section of a Pro Form, since s2Member® Pro v120517, has only accepted 2 characters when it should have been capable of accepting up to 40 characters. Fixed in this release.
|
505 |
-
* (s2Member / s2Member Pro) **Compatibility**. s2Member's Multsite Network patches now support `/wp-login.php` in WordPress® v3.5. Discussed in [this thread](http://www.s2member.com/forums/topic/fyi-wpmu-3-5-wp-login-php-file-not-verified/#post-34457).
|
506 |
-
* (s2Member / s2Member Pro) **Compatibility**. s2Member's login customizations for `/wp-login.php` have been tweaked to support WordPress® v3.5.
|
507 |
-
* (s2Member / s2Member Pro) **Checksums**. Each copy of s2Member® and s2Member® Pro now include a `checksum.txt` file in their root plugin directory. This file is used by server-scanning tools provided by WebSharks, Inc. This file simply serves to identify the state of the file structure upon each official release of the software.
|
508 |
-
* (s2Member Pro) **Bug Fix**. Free Registration Pro Forms submitted without having payment gateway API credentials configured within s2Member® resulted in an on-site error message when there should NOT be one (because a site owner is dealing with Free Registration only in this scenario). Fixed in this release.
|
509 |
-
|
510 |
-
= v121204 =
|
511 |
-
|
512 |
-
* **(Maintenance Release) Upgrade immediately.**
|
513 |
-
* (s2Member / s2Member Pro) **Bug Fix**. An issue with long billing agreement descriptions under PayPal® Pro (Payflow® Edition) accounts, when coupon codes were being used by customers, was addressed in this release. Symptoms of this bug were errors in s2Member® log files from the Payflow® API, with error code: `11581-Profile description is invalid`. Caused by undocumented length requirements for the billing agreement description under the Payflow® API. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/error-generic-processor-error-11581/page/2/#post-33477).
|
514 |
-
* (s2Member / s2Member Pro) **Compatibility**. Updated JW Player code samples for compatibility with JW Player v6. Discussed in [this thread](http://www.s2member.com/forums/topic/jw-player-rtmp-streaming-mp4-amazon-s3/page/2/#post-32074).
|
515 |
-
|
516 |
-
= v121201 =
|
517 |
-
|
518 |
-
* **(Maintenance Release) Upgrade immediately.**
|
519 |
-
* (s2Member / s2Member Pro) **Bug Fix**. Support Rep Cristián Lávaque found a bug in the behavior of s2Member’s Alternative View Restrictions, associated with Category listings in custom menu widgets. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/welcome-page-title-shows-but-no-content/page/2/#post-29802).
|
520 |
-
* (s2Member Pro) **Feature Enhancement**. s2Member Pro Forms integrated ONLY with PayPal Express Checkout (`accept="paypal" accept_via_paypal="paypal"`), will no longer display a Billing Method section on the Pro Form, as it's not necessary (there's only one possible option in this case, and it's already depicted by the PayPal button at the bottom of the Pro Form). Many site owners had implemented CSS hacks to hide this section of a Pro Form configured this way, based on [this FAQ article](http://www.s2member.com/faqs/#s2-faqs-paypal-pro-not-required). This hack is no longer necessary - starting with this release.
|
521 |
-
* (s2Member Pro) **Bug Fix**. s2Member Pro Forms integrated with Payflow Recurring Billing via PayPal Express Checkout were failing against some accounts with an erroneous error #10422 related to an invalid funding source. With some help from other site owners and the assistance of PayPal technical support, the underlying issue has been fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/paypal-error-36-transaction-failed/page/2/#post-31490).
|
522 |
-
* (s2Member Pro) **Compatiblity**. ccBill Buttons can now be generated for amounts exceeding $100.00, so long as prior ccBill approval is obtained from ccBill merchant support. Discussed in [this thread](http://www.s2member.com/forums/topic/cc-bill-button-increase-dollar-amount/#post-31636).
|
523 |
-
* (s2Member/s2Member Pro) **Compatiblity**. Updated to support Dynamic Roles introduced in bbPress® v2.2. Discussed in [this thread](http://www.s2member.com/forums/topic/dont-upgrade-to-bbpress-2-2/#post-32523).
|
524 |
-
* (s2Member Pro) **Authorize.Net**. True montly billing instead of every 30 days. Fixed in this release. Discussed in [this thread](http://www.s2member.com/forums/topic/1-month-recurring-billing-instead-of-30-days/#post-30420).
|
525 |
-
|
526 |
-
= v121023 =
|
527 |
-
|
528 |
-
* **(Maintenance Release) Upgrade immediately.**
|
529 |
-
* (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.
|
530 |
-
* (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.
|
531 |
-
* (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was updated for improved compatibility across multiple ccBill® sub-accounts.
|
532 |
-
* (s2Member Pro) **ccBill® DataLink Integration**. DataLink integration with ccBill® was updated for improved compatibility w/ ccBill® servers running on MST timezone.
|
533 |
-
* (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.
|
534 |
-
* (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.
|
535 |
-
* (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.
|
536 |
-
* (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.
|
537 |
-
|
538 |
-
= v120703 =
|
539 |
-
|
540 |
-
* **(Maintenance Release) Upgrade immediately.**
|
541 |
-
* (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`.
|
542 |
-
* (s2Member/s2Member Pro) **WordPress® v3.4**. Standards compliance. Routine maintenance. Re-confirmed compatibility with WordPress® v3.4.
|
543 |
-
|
544 |
-
= v120622 =
|
545 |
-
|
546 |
-
* **(Maintenance Release) Upgrade immediately.**
|
547 |
-
* (s2Member/s2Member Pro) **WordPress® v3.4**. Confirmed compatibility with WordPress® v3.4.
|
548 |
-
* (s2Member/s2Member Pro) **Currency Conversion**. This release updates s2Member's currency conversion API, which is powered by Google®. Please see [this thread](http://www.s2member.com/forums/topic/paypal-agreecontinue-sends-to-memb-options/#post-16972) for further details.
|
549 |
-
* (s2Member/s2Member Pro) **Payflow® Bug Fix**. This release addresses a bug that existed in s2Member's Payflow® integration with Express Checkout. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/cant-do-recurring-billing-via-paypal-payflow/#post-16966) for further details.
|
550 |
-
* (s2Member/s2Member Pro) **Character Encoding**. This release fixes a big in s2Member's character encoding conversion, for IPN responses received from PayPal®. This releases also fixes an issue specifically with the pound sterling symbol `£`, which was causing some transient IPN data to become corrupted, under the right scenario.
|
551 |
-
|
552 |
-
= v120608 =
|
553 |
-
|
554 |
-
* **(Maintenance Release) Upgrade immediately.**
|
555 |
-
* (s2Member/s2Member Pro) **WordPress® v3.4**. Updated for compatibility with the coming release of [WordPress® v3.4](http://wordpress.org/news/2012/06/wordpress-3-4-release-candidate-2/). Additional details available [here](http://wordpress.org/news/2012/06/wordpress-3-4-release-candidate-2/).
|
556 |
-
* (s2Member/s2Member Pro) **Payflow® Bug Fix**. This release addresses two bugs that existed in s2Member's Payflow® integration. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/transactions-not-going-through/#post-15896) for further details.
|
557 |
-
* (s2Member Pro) **PayPal® Express Checkout**. This release enables "PayPal Account Optional" for PayPal® Express Checkout, via s2Member Pro Forms. In other words, this release makes the PayPal® Express Checkout option through Pro Forms, behave more like a standard PayPal® Button; where a customer is not always required to have a PayPal® account during checkout. This functionality is enabled automatically, there's nothing you need to change in your s2Member® integration. However, we do suggest that you turn "PayPal Account Optional" (on) inside your PayPal® account. Please see [this thread](http://www.s2member.com/forums/topic/paypal-express-for-paypal-pro-user/#post-15892) for further details.
|
558 |
-
* (s2Member) **Documentation**. Code samples for Content Dripping have been updated in the Dashboard, in order to correct a date comparison snippet, which was WRONG. Please check your Dashboard under: `s2Member® -› API Scripting -› Content Dripping -› Example #2`, for the updated code sample.
|
559 |
-
|
560 |
-
= v120601 =
|
561 |
-
|
562 |
-
* **(Maintenance Release) Upgrade immediately.**
|
563 |
-
* (s2Member Pro) **ClickBank® Button Shortcodes**. This release works around a bug that has been discovered on the ClickBank® side of things, when a `+` character appears in the `desc=""` attribute of your ClickBank® Button Shortcode. Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/clickbank-output-url/#post-15166) for further details.
|
564 |
-
* (s2Member Pro) **Payflow® Daily Recurrence (Limitation)**. PayPal® Pro accounts with the Payflow® Edition API, are NOT capable of charging on a `daily` recurring basis. Previous releases of s2Member® Pro mistakenly documented this as being possible. Resolved in this release. PayPal® Pro accounts operating with the Payflow® Edition (and integrated with s2Member®), are only capable of charging recurring fees on the following schedules: `weekly, bi-weekly, monthly, quarterly, or yearly`. This is in large part, a limitation in the Payflow® API, which we hope will be resolved by PayPal® in a future version. Please feel free to contact PayPal® if you'd like to vote for this feature! This limitation does NOT affect existing PayPal® Pro accounts operating exclusively under the PayPal® Pro API (e.g. without Payflow®).
|
565 |
-
* (s2Member Pro) **New ccBill® Shortcodes**. s2Member® Pro now includes two new Shortcode Attributes for ccBill® payment button integrations. These include: `sub_account` and `form`. Making it possible to integrate a single installation of s2Member® Pro with multiple ccBill® sub-accounts, and/or multiple ccBill® forms (as they exist in your ccBill® account). For further details, please read the Shortcode documentation, found in your Dashboard under: `s2Member® -› ccBill® Buttons -› Shortcode Attributes (Explained)`.
|
566 |
-
* (s2Member/s2Member Pro) **Bug Fix**. A bug related to inaccurate role assignment, under certain scenarios (for administrative accounts). Resolved in this release. Please see [this thread](http://www.s2member.com/forums/topic/inaccurate-role-assignment-in-s2member-pro/#post-14122) for further details.
|
567 |
-
|
568 |
-
= v120517 =
|
569 |
-
|
570 |
-
* **(Maintenance Release) Upgrade immediately.**
|
571 |
-
* (s2Member Pro) **PayPal® Pro Forms**. This release removes all limitations on the maximum length of an initial trial/period. It is now possible to offer any number of days/weeks/months/years for free, or at a different initial rate.
|
572 |
-
* (s2Member Pro) **Authorize.Net® Bug Fix**. Max length (i.e. `maxlength=""`) adjusted in Pro Forms integrating with Authorize.Net. Transactions were sometimes failing due to character length restrictions imposed by the Authorize.Net® API. Fixed in this release. Please see [this thread](http://www.s2member.com/forums/topic/customer-charged-but-not-given-access/#post-13454) for further details.
|
573 |
-
* (s2Member/s2Member Pro) **JW Player® Code Samples**. Updated code samples for JW Player®, to reduce the possibility of a namespace conflict in configuration variables. For further details, please check [this thread](http://www.s2member.com/forums/topic/jw-player-new-code-conflict/#post-13819).
|
574 |
-
|
575 |
-
= v120514 =
|
576 |
-
|
577 |
-
* **(Maintenance Release) Upgrade immediately.**
|
578 |
-
* (s2Member Pro) **Payflow® API Support**. s2Member® Pro now supports PayPal® Pro accounts operating with the Payflow® edition. It is now possible to process recurring payments through newer PayPal® Pro accounts (e.g. those which may use the new Payflow® API for recurring billing). Please note, this feature should ONLY be used by site owners with a brand new PayPal® Pro account, which has Recurring Billing service enabled under the Payflow® edition. Site owners with existing PayPal® Pro accounts are NOT impacted by this feature, nor should they attempt to use this feature. For further details, please check your Dashboard under: `s2Member® -› PayPal® Options -› Payflow® Account Details`.
|
579 |
-
* (s2Member Pro) **Authorize.Net® Shortcode Attribute**. A new Shortcode Attribute `rrt=""`, is available for Authorize.Net® Pro Forms. For further details, please check your Dashboard under: `s2Member® -› Authorize.Net® Forms -› Shortcode Attributes (Explained)`.
|
580 |
-
* (s2Member Pro) **Authorize.Net® Bug Fix**. Transactions were sometimes failing due to character length restrictions imposed by the Authorize.Net® API. Fixed in this release. Please see [this thread](http://www.s2member.com/forums/topic/customer-charged-but-not-given-access/#post-13454) for further details.
|
581 |
-
* (s2Member/s2Member Pro) **Remote Request Hook**. A few developers requested this. A new WordPress® Hook was added to s2Member's remote connection routine. Search s2Member's source code for Hook name: `ws_plugin__s2member_before_wp_remote_request`.
|
582 |
-
* (s2Member Framework) **PayPal® Buttons**. Restrictions limiting the number of days/weeks/months/years allowed in recurring periods for a PayPal® Button have been increased. Max days was increased from `7` to `90`, weeks remains at `52` max, months is up from `12` to `24` max; years increased from `1`, up to `5` years max. This change impacts PayPal® Standard Buttons only, and does NOT affect Pro Forms, which operate on restrictions imposed by the PayPal® Pro API (and these are slightly different).
|
583 |
-
* (s2Member/s2Member Pro) **JW Player® Code Samples**. Updated code samples for JW Player®. For further details, please check your Dashboard under: `s2Member® -› Download Options -› JW Player® Code Samples`.
|
584 |
-
|
585 |
-
= v120309 =
|
586 |
-
|
587 |
-
* (s2Member Pro) **ccBill® Cancellations**. It's now possible for s2Member to pull ccBill® "cancellation" events, from the ccBill® DataLink Service Suite. For further details and configuration options, please check this section of your Dashboard: `s2Member -› ccBill Options -› DataLink Integration`.
|
588 |
-
* (s2Member/s2Member Pro) **Bug fix**. Some PHP installations running in safe mode were experiencing `400 Bad Request` errors whenever s2Member's Amazon® CloudFront configuration routines for file downloads were processed. Fixed in this release.
|
589 |
-
|
590 |
-
= v120308 =
|
591 |
-
|
592 |
-
* (s2Member/s2Member Pro) **Custom Registration/Profile Fields**. Now possible to create a Custom Field that's always hidden, during both registration and any future Profile edits (e.g. for administrative purposes only).
|
593 |
-
* (s2Member/s2Member Pro) **Compatibility**. Minor updates for compatibility with the coming release of WordPress® v3.4.
|
594 |
-
* (s2Member Pro) **Bug fix**. Broken link in UI leading to: `s2m-pro-extras.zip`. Corrected in this release.
|
595 |
-
|
596 |
-
= v120301 - 1.0 =
|
597 |
-
|
598 |
-
* ... trimmed away at v111220.
|
599 |
* Initial release: v1.0.
|
1 |
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
|
2 |
|
3 |
+
Version: 140520
|
4 |
+
Stable tag: 140520
|
5 |
|
6 |
SSL Compatible: yes
|
7 |
bbPress® Compatible: yes
|
142 |
|
143 |
== Upgrade Notice ==
|
144 |
|
145 |
+
= v140520 =
|
146 |
|
147 |
+
(Maintenance Release) Upgrade immediately!
|
148 |
|
149 |
== Changelog ==
|
150 |
|
151 |
+
= v140520 =
|
152 |
+
|
153 |
+
* (s2Member Pro) **`[s2Member-List /]` Shortcode** Amazing new feature! It is now possible to list members using a powerful shortcode, and even make it possible for members to view and search for each other. See [this KB article](http://www.s2member.com/?p=62860) for all the details on this feature. Very cool!
|
154 |
+
* (s2Member/s2Member Pro) **Server-Side Validation** For Registration/Profile Fields that you configure on your own (using the s2Member software), there is now support within all areas of the s2Member codebase for both JavaScript and *now server-side validation too*. In the past, all validations applied to custom fields was via JavaScript only. With server-side validation too, now it is impossible for required and/or invalid fields that you configure to go missing. This also resolves a few issues related to spam bots attempting to bypass JavaScript validation. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/99) if you'd like further details.
|
155 |
+
* (s2Member Pro) **Button Processing Animation**. Improving the processing animation used in submit buttons across Pro Forms. Instead of a script-based solution (rather jumpy), we are now taking advantage of CSS3 for a much smoother animation. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/114) if you'd like further details.
|
156 |
+
* (s2Member Pro) **`[s2Drip /]` Shortcode Enhancement** This release adds support for a new `access=""` shortcode attribute that can parse `and` / `or` logic. Also, it is now possible for `[s2Drip /]` to be used with Custom Capabilities too! See [this KB article](http://www.s2member.com/kb/s2drip-shortcode/) for all the details.
|
157 |
+
* (s2Member/s2Member Pro) **Bug Fix, Custom Fields UI** This release corrects a bug related to the `jquery/.htaccess` file that ships with s2Member. A symptom was to have issues with the Registration/Profile Fields UI and find a JS error in the browser's developer console. Fixed in this release. See also, [this GitHub issue](https://github.com/WebSharks/s2Member/issues/144#issuecomment-43198045) if you'd like further details.
|
158 |
+
* (s2Member Pro) **Bug Fix, Clickbank HTTPS** This release corrects a bug in the default Auto-Return Page for ClickBank, when/if it's served over the `https` protocol. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/145) if you'd like further details.
|
159 |
+
* (s2Member/s2Member Pro) **Sortable User Columns** This release adds support for sortable user columns in the Dashboard, where possible. Things like EOT Time, Registration Time, Last Login Time, Total Logins, etc. NOTE: it is currently NOT possible to sort by Custom Registration/Profile Fields (yet). See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/147) if you'd like further details.
|
160 |
+
* (s2Member/s2Member Pro) **Hook Priority for Translations** This release corrects a bug related to Gettext translations. There were a couple of areas within s2Member that weren't picking up all of the translation entries; caused by a conflict in hook priority. Fixed in this release. See [this GitHub issue](https://github.com/WebSharks/s2Member/issues/132) if you'd like further details.
|
161 |
+
* (s2Member Pro) **`[s2MOP /]` Shortcode Enhancement** A new Replacement Code was added: `%%REQUIRED_LEVEL_LABEL%%`. See [this KB article](http://www.s2member.com/kb/s2mop-shortcode/) and [this GitHub issue](https://github.com/WebSharks/s2Member/issues/129) if you'd like further details.
|
162 |
+
|
163 |
= v140423 =
|
164 |
|
165 |
* (s2Member/s2Member Pro) **WP v3.9 Compatibility**. Resolving an incompatibility between s2Member and WP v3.9 where s2Member was attempting to use the jQuery `highlight` effect no longer available by default; starting with WP v3.9. A symptom of this bug was to have problems closing the dialog box when creating new Registration/Profile Fields with s2Member in the WP Dashboard. See also [this GitHub issue](https://github.com/WebSharks/s2Member/issues/108).
|
511 |
|
512 |
= v121213 =
|
513 |
|
514 |
+
* ... trimmed away at v121213.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
515 |
* Initial release: v1.0.
|
s2member.php
CHANGED
@@ -19,8 +19,8 @@
|
|
19 |
*/
|
20 |
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
-
Version:
|
23 |
-
Stable tag:
|
24 |
|
25 |
SSL Compatible: yes
|
26 |
bbPress Compatible: yes
|
@@ -75,7 +75,7 @@ if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
|
|
75 |
* @var str
|
76 |
*/
|
77 |
if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
|
78 |
-
define("WS_PLUGIN__S2MEMBER_VERSION", "
|
79 |
/**
|
80 |
* Minimum PHP version required to run s2Member.
|
81 |
*
|
@@ -105,7 +105,7 @@ if(!defined("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION"))
|
|
105 |
* @var str
|
106 |
*/
|
107 |
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
|
108 |
-
define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "
|
109 |
/*
|
110 |
Several compatibility checks.
|
111 |
If all pass, load the s2Member plugin.
|
19 |
*/
|
20 |
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
+
Version: 140520
|
23 |
+
Stable tag: 140520
|
24 |
|
25 |
SSL Compatible: yes
|
26 |
bbPress Compatible: yes
|
75 |
* @var str
|
76 |
*/
|
77 |
if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
|
78 |
+
define("WS_PLUGIN__S2MEMBER_VERSION", "140520" /* !#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", "140520" /* !#distro-version#! */);
|
109 |
/*
|
110 |
Several compatibility checks.
|
111 |
If all pass, load the s2Member plugin.
|