Version Description
- IP Restrictions ( reset ). Several site owners have reported issues with s2Member's IP Restrictions. A full investigation has been performed. Although no bugs were found, we suspect that recent reports on this topic are related to a combination of a.) improvements in recent versions of s2Member, with respect to IP Restrictions ( adaptive concurrency limits ); and b.) lack of support ( on the part of s2Member ) for resetting IP Restriction Logs after changes in configuration. In this release of s2Member, we've introduced a new tool for site owners, which allows you to Reset IP Restriction Logs manually, at anytime you like. For further details, please see:
s2Member -> General Options -> IP Restrictions
( look for the new button titled:Reset IP Restriction Logs
. ). - Compatibility. s2Member's activation/deactivation routines have been updated to support installations of WordPress that may, or may not, already have the default WordPress Roles installed. For instance, some installations of WordPress are running with Role managing plugins. A site owner could have modified WordPress, and may no longer have one, or even all of these default Roles:
administrator, editor, author, contributor, subscriber
. s2Member is now capable of dealing with this scenario gracefully upon activation/deactivation.
Download this release
Release Info
Developer | PriMoThemes |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 3.2.5 |
Comparing to | |
See all releases |
Code changes from version 3.2.4 to 3.2.5
- includes/functions/activate-deactivate.inc.php +151 -105
- includes/functions/ip-restrictions.inc.php +55 -17
- includes/functions/sp-access.inc.php +6 -6
- includes/hooks.inc.php +3 -1
- includes/menu-pages/menu-pages-s-min.js +1 -1
- includes/menu-pages/menu-pages-s.js +16 -3
- includes/menu-pages/options.inc.php +5 -3
- readme.txt +6 -2
- s2member.php +4 -4
includes/functions/activate-deactivate.inc.php
CHANGED
@@ -12,7 +12,7 @@ If not, see: <http://www.gnu.org/licenses/>.
|
|
12 |
Direct access denial.
|
13 |
*/
|
14 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
15 |
-
exit("Do not access this file directly.");
|
16 |
/*
|
17 |
Check existing installations that have not been re-activated.
|
18 |
Attach to: add_action("admin_init");
|
@@ -22,20 +22,23 @@ if (!function_exists ("ws_plugin__s2member_check_activation"))
|
|
22 |
function ws_plugin__s2member_check_activation () /* Up-to-date? */
|
23 |
{
|
24 |
$v = get_option ("ws_plugin__s2member_activated_version");
|
25 |
-
if (!$v || !version_compare ($v, WS_PLUGIN__S2MEMBER_VERSION, ">="))
|
26 |
-
ws_plugin__s2member_activate ();
|
27 |
/**/
|
28 |
-
|
|
|
|
|
|
|
29 |
/**/
|
30 |
else if (is_multisite () && is_main_site ())
|
31 |
-
/* In case a Multisite Network is enabled later on. */
|
32 |
{
|
33 |
$mms_v = get_option ("ws_plugin__s2member_activated_mms_version");
|
|
|
34 |
if (!$mms_v || !version_compare ($mms_v, WS_PLUGIN__S2MEMBER_VERSION, ">="))
|
35 |
-
|
|
|
|
|
36 |
}
|
37 |
/**/
|
38 |
-
return;
|
39 |
}
|
40 |
}
|
41 |
/*
|
@@ -57,71 +60,91 @@ if (!function_exists ("ws_plugin__s2member_activate"))
|
|
57 |
/**/
|
58 |
do_action ("ws_plugin__s2member_before_activation", get_defined_vars ());
|
59 |
/**/
|
60 |
-
|
61 |
-
$role->add_cap ("access_s2member_level0");
|
62 |
-
/**/
|
63 |
add_role ("s2member_level1", "s2Member Level 1");
|
64 |
add_role ("s2member_level2", "s2Member Level 2");
|
65 |
add_role ("s2member_level3", "s2Member Level 3");
|
66 |
add_role ("s2member_level4", "s2Member Level 4");
|
67 |
/**/
|
68 |
-
$role = &get_role ("
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
/**/
|
74 |
-
$role = &get_role ("
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
|
|
80 |
/**/
|
81 |
-
$role = &get_role ("
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
|
|
88 |
/**/
|
89 |
-
$role = &get_role ("
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
|
|
97 |
/**/
|
98 |
-
$role = &get_role ("
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
|
|
104 |
/**/
|
105 |
-
$role = &get_role ("
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
|
|
|
|
111 |
/**/
|
112 |
-
$role = &get_role ("
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
|
|
|
|
118 |
/**/
|
119 |
-
$role = &get_role ("
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
/**/
|
126 |
if (!is_dir ($files_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"]))
|
127 |
if (is_writable (dirname ($files_dir)))
|
@@ -139,31 +162,41 @@ if (!function_exists ("ws_plugin__s2member_activate"))
|
|
139 |
if (!file_exists ($htaccess = $logs_dir . "/.htaccess"))
|
140 |
file_put_contents ($htaccess, "deny from all");
|
141 |
/**/
|
142 |
-
(!is_numeric (get_option ("ws_plugin__s2member_configured"))) ? update_option ("ws_plugin__s2member_configured", "0") : null;
|
143 |
(!is_array (get_option ("ws_plugin__s2member_cache"))) ? update_option ("ws_plugin__s2member_cache", array ()) : null;
|
144 |
(!is_array (get_option ("ws_plugin__s2member_notices"))) ? update_option ("ws_plugin__s2member_notices", array ()) : null;
|
145 |
(!is_array (get_option ("ws_plugin__s2member_options"))) ? update_option ("ws_plugin__s2member_options", array ()) : null;
|
|
|
146 |
/**/
|
147 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["configured"]) /* If already configured, we are re-activating. */
|
148 |
{
|
149 |
$v = get_option ("ws_plugin__s2member_activated_version");
|
|
|
150 |
if (!$v || !version_compare ($v, "3.2", ">=")) /* Needs to be upgraded? */
|
151 |
-
/* Version 3.2 is where
|
152 |
{
|
153 |
$like = "`meta_key` LIKE 's2member\_%' AND `meta_key` NOT LIKE '%s2member\_originating\_blog%'";
|
154 |
$wpdb->query ("UPDATE `" . $wpdb->usermeta . "` SET `meta_key` = CONCAT('" . $wpdb->prefix . "', `meta_key`) WHERE " . $like);
|
155 |
}
|
156 |
/**/
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
$notice = '<strong>s2Member</strong> has been <strong>re-activated</strong>, with the latest version.<br />';
|
158 |
$notice .= 'You now have version ' . WS_PLUGIN__S2MEMBER_VERSION . '. Your existing configuration remains.';
|
|
|
159 |
if (!is_multisite () || !ws_plugin__s2member_is_multisite_farm () || is_main_site ()) /* No Changelog on a Multisite Farm. */
|
160 |
$notice .= '<br />Have fun, <a href="admin.php?page=ws-plugin--s2member-info#rm-changelog">read the Changelog</a>, and make some money! :-)';
|
|
|
161 |
ws_plugin__s2member_enqueue_admin_notice ($notice, array ("plugins.php", "ws-plugin--s2member-options"));
|
162 |
}
|
163 |
else /* Otherwise, (initial activation); we'll help the Site Owner out by giving them a link to the Quick Start Guide. */
|
164 |
{
|
165 |
$notice = '<strong>s2Member</strong> v' . WS_PLUGIN__S2MEMBER_VERSION . ' has been <strong>activated</strong>. Nice work!<br />';
|
166 |
$notice .= 'Have fun, <a href="admin.php?page=ws-plugin--s2member-start">read the Quick Start Guide</a>, and make some money! :-)';
|
|
|
167 |
ws_plugin__s2member_enqueue_admin_notice ($notice, array ("plugins.php", "ws-plugin--s2member-options"));
|
168 |
}
|
169 |
/**/
|
@@ -171,17 +204,18 @@ if (!function_exists ("ws_plugin__s2member_activate"))
|
|
171 |
/**/
|
172 |
if (is_multisite () && is_main_site ()) /* Network activation routines. A few quick adjustments. */
|
173 |
{
|
174 |
-
foreach ((array)($users = $wpdb->get_results ("SELECT `ID` FROM `" . $wpdb->users . "`")) as $user)
|
175 |
{
|
176 |
/* Here we convert everyone already in the system; without a point of origin.
|
177 |
This will set their point of origin to the Main Site ( Dashboard Blog ). */
|
178 |
-
if (!($originating_blog = get_user_meta ($user->ID, "s2member_originating_blog", true)))
|
179 |
update_user_meta ($user->ID, "s2member_originating_blog", $current_site->blog_id);
|
180 |
}
|
181 |
/**/
|
182 |
$notice = '<strong>Multisite Network</strong> updated automatically by <strong>s2Member</strong> v' . WS_PLUGIN__S2MEMBER_VERSION . '.<br />';
|
183 |
$notice .= 'You\'ll want to configure s2Member\'s Multisite options now.<br />';
|
184 |
$notice .= 'In the Dashboard for your Main Site, see:<br /><code>s2Member -> Multisite ( Config )</code>.';
|
|
|
185 |
ws_plugin__s2member_enqueue_admin_notice ($notice, array ("plugins.php", "ws-plugin--s2member-options"));
|
186 |
/**/
|
187 |
update_option ("ws_plugin__s2member_activated_mms_version", WS_PLUGIN__S2MEMBER_VERSION);
|
@@ -189,7 +223,7 @@ if (!function_exists ("ws_plugin__s2member_activate"))
|
|
189 |
/**/
|
190 |
do_action ("ws_plugin__s2member_after_activation", get_defined_vars ());
|
191 |
/**/
|
192 |
-
return;
|
193 |
}
|
194 |
}
|
195 |
/*
|
@@ -208,41 +242,51 @@ if (!function_exists ("ws_plugin__s2member_deactivate"))
|
|
208 |
/**/
|
209 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["run_deactivation_routines"])
|
210 |
{
|
211 |
-
|
212 |
-
|
|
|
|
|
213 |
/**/
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
/**/
|
219 |
-
$role = &get_role ("administrator")
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
|
|
|
|
225 |
/**/
|
226 |
-
$role = &get_role ("editor")
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
|
|
|
|
232 |
/**/
|
233 |
-
$role = &get_role ("author")
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
|
|
|
|
239 |
/**/
|
240 |
-
$role = &get_role ("contributor")
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
|
|
|
|
246 |
/**/
|
247 |
if (is_dir ($files_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"]))
|
248 |
{
|
@@ -262,23 +306,25 @@ if (!function_exists ("ws_plugin__s2member_deactivate"))
|
|
262 |
@rmdir($logs_dir);
|
263 |
}
|
264 |
/**/
|
265 |
-
delete_option("
|
266 |
-
delete_option("
|
267 |
-
delete_option("
|
268 |
-
delete_option("
|
269 |
-
delete_option("
|
270 |
-
delete_option("
|
271 |
/**/
|
272 |
-
$
|
273 |
-
$wpdb->query ("DELETE FROM `" . $wpdb->
|
274 |
-
$wpdb->query ("DELETE FROM `" . $wpdb->
|
|
|
|
|
275 |
/**/
|
276 |
do_action ("ws_plugin__s2member_during_deactivation", get_defined_vars ());
|
277 |
}
|
278 |
/**/
|
279 |
do_action ("ws_plugin__s2member_after_deactivation", get_defined_vars ());
|
280 |
/**/
|
281 |
-
return;
|
282 |
}
|
283 |
}
|
284 |
?>
|
12 |
Direct access denial.
|
13 |
*/
|
14 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
15 |
+
exit ("Do not access this file directly.");
|
16 |
/*
|
17 |
Check existing installations that have not been re-activated.
|
18 |
Attach to: add_action("admin_init");
|
22 |
function ws_plugin__s2member_check_activation () /* Up-to-date? */
|
23 |
{
|
24 |
$v = get_option ("ws_plugin__s2member_activated_version");
|
|
|
|
|
25 |
/**/
|
26 |
+
if (!$v || !version_compare ($v, WS_PLUGIN__S2MEMBER_VERSION, ">="))
|
27 |
+
{
|
28 |
+
ws_plugin__s2member_activate ();
|
29 |
+
}
|
30 |
/**/
|
31 |
else if (is_multisite () && is_main_site ())
|
|
|
32 |
{
|
33 |
$mms_v = get_option ("ws_plugin__s2member_activated_mms_version");
|
34 |
+
/**/
|
35 |
if (!$mms_v || !version_compare ($mms_v, WS_PLUGIN__S2MEMBER_VERSION, ">="))
|
36 |
+
{
|
37 |
+
ws_plugin__s2member_activate ();
|
38 |
+
}
|
39 |
}
|
40 |
/**/
|
41 |
+
return; /* Return for uniformity. */
|
42 |
}
|
43 |
}
|
44 |
/*
|
60 |
/**/
|
61 |
do_action ("ws_plugin__s2member_before_activation", get_defined_vars ());
|
62 |
/**/
|
63 |
+
add_role ("subscriber", "Subscriber");
|
|
|
|
|
64 |
add_role ("s2member_level1", "s2Member Level 1");
|
65 |
add_role ("s2member_level2", "s2Member Level 2");
|
66 |
add_role ("s2member_level3", "s2Member Level 3");
|
67 |
add_role ("s2member_level4", "s2Member Level 4");
|
68 |
/**/
|
69 |
+
if ($role = &get_role ("subscriber"))
|
70 |
+
{
|
71 |
+
$role->add_cap ("read");
|
72 |
+
$role->add_cap ("access_s2member_level0");
|
73 |
+
}
|
74 |
/**/
|
75 |
+
if ($role = &get_role ("s2member_level1"))
|
76 |
+
{
|
77 |
+
$role->add_cap ("read");
|
78 |
+
$role->add_cap ("level_0");
|
79 |
+
$role->add_cap ("access_s2member_level0");
|
80 |
+
$role->add_cap ("access_s2member_level1");
|
81 |
+
}
|
82 |
/**/
|
83 |
+
if ($role = &get_role ("s2member_level2"))
|
84 |
+
{
|
85 |
+
$role->add_cap ("read");
|
86 |
+
$role->add_cap ("level_0");
|
87 |
+
$role->add_cap ("access_s2member_level0");
|
88 |
+
$role->add_cap ("access_s2member_level1");
|
89 |
+
$role->add_cap ("access_s2member_level2");
|
90 |
+
}
|
91 |
/**/
|
92 |
+
if ($role = &get_role ("s2member_level3"))
|
93 |
+
{
|
94 |
+
$role->add_cap ("read");
|
95 |
+
$role->add_cap ("level_0");
|
96 |
+
$role->add_cap ("access_s2member_level0");
|
97 |
+
$role->add_cap ("access_s2member_level1");
|
98 |
+
$role->add_cap ("access_s2member_level2");
|
99 |
+
$role->add_cap ("access_s2member_level3");
|
100 |
+
}
|
101 |
/**/
|
102 |
+
if ($role = &get_role ("s2member_level4"))
|
103 |
+
{
|
104 |
+
$role->add_cap ("read");
|
105 |
+
$role->add_cap ("level_0");
|
106 |
+
$role->add_cap ("access_s2member_level0");
|
107 |
+
$role->add_cap ("access_s2member_level1");
|
108 |
+
$role->add_cap ("access_s2member_level2");
|
109 |
+
$role->add_cap ("access_s2member_level3");
|
110 |
+
$role->add_cap ("access_s2member_level4");
|
111 |
+
}
|
112 |
/**/
|
113 |
+
if ($role = &get_role ("administrator"))
|
114 |
+
{
|
115 |
+
$role->add_cap ("access_s2member_level0");
|
116 |
+
$role->add_cap ("access_s2member_level1");
|
117 |
+
$role->add_cap ("access_s2member_level2");
|
118 |
+
$role->add_cap ("access_s2member_level3");
|
119 |
+
$role->add_cap ("access_s2member_level4");
|
120 |
+
}
|
121 |
/**/
|
122 |
+
if ($role = &get_role ("editor"))
|
123 |
+
{
|
124 |
+
$role->add_cap ("access_s2member_level0");
|
125 |
+
$role->add_cap ("access_s2member_level1");
|
126 |
+
$role->add_cap ("access_s2member_level2");
|
127 |
+
$role->add_cap ("access_s2member_level3");
|
128 |
+
$role->add_cap ("access_s2member_level4");
|
129 |
+
}
|
130 |
/**/
|
131 |
+
if ($role = &get_role ("author"))
|
132 |
+
{
|
133 |
+
$role->add_cap ("access_s2member_level0");
|
134 |
+
$role->add_cap ("access_s2member_level1");
|
135 |
+
$role->add_cap ("access_s2member_level2");
|
136 |
+
$role->add_cap ("access_s2member_level3");
|
137 |
+
$role->add_cap ("access_s2member_level4");
|
138 |
+
}
|
139 |
+
/**/
|
140 |
+
if ($role = &get_role ("contributor"))
|
141 |
+
{
|
142 |
+
$role->add_cap ("access_s2member_level0");
|
143 |
+
$role->add_cap ("access_s2member_level1");
|
144 |
+
$role->add_cap ("access_s2member_level2");
|
145 |
+
$role->add_cap ("access_s2member_level3");
|
146 |
+
$role->add_cap ("access_s2member_level4");
|
147 |
+
}
|
148 |
/**/
|
149 |
if (!is_dir ($files_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"]))
|
150 |
if (is_writable (dirname ($files_dir)))
|
162 |
if (!file_exists ($htaccess = $logs_dir . "/.htaccess"))
|
163 |
file_put_contents ($htaccess, "deny from all");
|
164 |
/**/
|
|
|
165 |
(!is_array (get_option ("ws_plugin__s2member_cache"))) ? update_option ("ws_plugin__s2member_cache", array ()) : null;
|
166 |
(!is_array (get_option ("ws_plugin__s2member_notices"))) ? update_option ("ws_plugin__s2member_notices", array ()) : null;
|
167 |
(!is_array (get_option ("ws_plugin__s2member_options"))) ? update_option ("ws_plugin__s2member_options", array ()) : null;
|
168 |
+
(!is_numeric (get_option ("ws_plugin__s2member_configured"))) ? update_option ("ws_plugin__s2member_configured", "0") : null;
|
169 |
/**/
|
170 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["configured"]) /* If already configured, we are re-activating. */
|
171 |
{
|
172 |
$v = get_option ("ws_plugin__s2member_activated_version");
|
173 |
+
/**/
|
174 |
if (!$v || !version_compare ($v, "3.2", ">=")) /* Needs to be upgraded? */
|
175 |
+
/* Version 3.2 is where `meta_key` names were changed. They're prefixed now. */
|
176 |
{
|
177 |
$like = "`meta_key` LIKE 's2member\_%' AND `meta_key` NOT LIKE '%s2member\_originating\_blog%'";
|
178 |
$wpdb->query ("UPDATE `" . $wpdb->usermeta . "` SET `meta_key` = CONCAT('" . $wpdb->prefix . "', `meta_key`) WHERE " . $like);
|
179 |
}
|
180 |
/**/
|
181 |
+
if (!$v || !version_compare ($v, "3.2.5", ">=")) /* Needs to be upgraded? */
|
182 |
+
/* Version 3.2.5 is where transient names were changed. They're prefixed now. */
|
183 |
+
{
|
184 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '\_transient\_%'");
|
185 |
+
}
|
186 |
+
/**/
|
187 |
$notice = '<strong>s2Member</strong> has been <strong>re-activated</strong>, with the latest version.<br />';
|
188 |
$notice .= 'You now have version ' . WS_PLUGIN__S2MEMBER_VERSION . '. Your existing configuration remains.';
|
189 |
+
/**/
|
190 |
if (!is_multisite () || !ws_plugin__s2member_is_multisite_farm () || is_main_site ()) /* No Changelog on a Multisite Farm. */
|
191 |
$notice .= '<br />Have fun, <a href="admin.php?page=ws-plugin--s2member-info#rm-changelog">read the Changelog</a>, and make some money! :-)';
|
192 |
+
/**/
|
193 |
ws_plugin__s2member_enqueue_admin_notice ($notice, array ("plugins.php", "ws-plugin--s2member-options"));
|
194 |
}
|
195 |
else /* Otherwise, (initial activation); we'll help the Site Owner out by giving them a link to the Quick Start Guide. */
|
196 |
{
|
197 |
$notice = '<strong>s2Member</strong> v' . WS_PLUGIN__S2MEMBER_VERSION . ' has been <strong>activated</strong>. Nice work!<br />';
|
198 |
$notice .= 'Have fun, <a href="admin.php?page=ws-plugin--s2member-start">read the Quick Start Guide</a>, and make some money! :-)';
|
199 |
+
/**/
|
200 |
ws_plugin__s2member_enqueue_admin_notice ($notice, array ("plugins.php", "ws-plugin--s2member-options"));
|
201 |
}
|
202 |
/**/
|
204 |
/**/
|
205 |
if (is_multisite () && is_main_site ()) /* Network activation routines. A few quick adjustments. */
|
206 |
{
|
207 |
+
foreach ((array) ($users = $wpdb->get_results ("SELECT `ID` FROM `" . $wpdb->users . "`")) as $user)
|
208 |
{
|
209 |
/* Here we convert everyone already in the system; without a point of origin.
|
210 |
This will set their point of origin to the Main Site ( Dashboard Blog ). */
|
211 |
+
if (! ($originating_blog = get_user_meta ($user->ID, "s2member_originating_blog", true)))
|
212 |
update_user_meta ($user->ID, "s2member_originating_blog", $current_site->blog_id);
|
213 |
}
|
214 |
/**/
|
215 |
$notice = '<strong>Multisite Network</strong> updated automatically by <strong>s2Member</strong> v' . WS_PLUGIN__S2MEMBER_VERSION . '.<br />';
|
216 |
$notice .= 'You\'ll want to configure s2Member\'s Multisite options now.<br />';
|
217 |
$notice .= 'In the Dashboard for your Main Site, see:<br /><code>s2Member -> Multisite ( Config )</code>.';
|
218 |
+
/**/
|
219 |
ws_plugin__s2member_enqueue_admin_notice ($notice, array ("plugins.php", "ws-plugin--s2member-options"));
|
220 |
/**/
|
221 |
update_option ("ws_plugin__s2member_activated_mms_version", WS_PLUGIN__S2MEMBER_VERSION);
|
223 |
/**/
|
224 |
do_action ("ws_plugin__s2member_after_activation", get_defined_vars ());
|
225 |
/**/
|
226 |
+
return; /* Return for uniformity. */
|
227 |
}
|
228 |
}
|
229 |
/*
|
242 |
/**/
|
243 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["run_deactivation_routines"])
|
244 |
{
|
245 |
+
remove_role ("s2member_level1");
|
246 |
+
remove_role ("s2member_level2");
|
247 |
+
remove_role ("s2member_level3");
|
248 |
+
remove_role ("s2member_level4");
|
249 |
/**/
|
250 |
+
if ($role = &get_role ("subscriber"))
|
251 |
+
{
|
252 |
+
$role->remove_cap ("access_s2member_level0");
|
253 |
+
}
|
254 |
/**/
|
255 |
+
if ($role = &get_role ("administrator"))
|
256 |
+
{
|
257 |
+
$role->remove_cap ("access_s2member_level0");
|
258 |
+
$role->remove_cap ("access_s2member_level1");
|
259 |
+
$role->remove_cap ("access_s2member_level2");
|
260 |
+
$role->remove_cap ("access_s2member_level3");
|
261 |
+
$role->remove_cap ("access_s2member_level4");
|
262 |
+
}
|
263 |
/**/
|
264 |
+
if ($role = &get_role ("editor"))
|
265 |
+
{
|
266 |
+
$role->remove_cap ("access_s2member_level0");
|
267 |
+
$role->remove_cap ("access_s2member_level1");
|
268 |
+
$role->remove_cap ("access_s2member_level2");
|
269 |
+
$role->remove_cap ("access_s2member_level3");
|
270 |
+
$role->remove_cap ("access_s2member_level4");
|
271 |
+
}
|
272 |
/**/
|
273 |
+
if ($role = &get_role ("author"))
|
274 |
+
{
|
275 |
+
$role->remove_cap ("access_s2member_level0");
|
276 |
+
$role->remove_cap ("access_s2member_level1");
|
277 |
+
$role->remove_cap ("access_s2member_level2");
|
278 |
+
$role->remove_cap ("access_s2member_level3");
|
279 |
+
$role->remove_cap ("access_s2member_level4");
|
280 |
+
}
|
281 |
/**/
|
282 |
+
if ($role = &get_role ("contributor"))
|
283 |
+
{
|
284 |
+
$role->remove_cap ("access_s2member_level0");
|
285 |
+
$role->remove_cap ("access_s2member_level1");
|
286 |
+
$role->remove_cap ("access_s2member_level2");
|
287 |
+
$role->remove_cap ("access_s2member_level3");
|
288 |
+
$role->remove_cap ("access_s2member_level4");
|
289 |
+
}
|
290 |
/**/
|
291 |
if (is_dir ($files_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"]))
|
292 |
{
|
306 |
@rmdir($logs_dir);
|
307 |
}
|
308 |
/**/
|
309 |
+
delete_option ("ws_plugin__s2member_cache");
|
310 |
+
delete_option ("ws_plugin__s2member_notices");
|
311 |
+
delete_option ("ws_plugin__s2member_options");
|
312 |
+
delete_option ("ws_plugin__s2member_configured");
|
313 |
+
delete_option ("ws_plugin__s2member_activated_version");
|
314 |
+
delete_option ("ws_plugin__s2member_activated_mms_version");
|
315 |
/**/
|
316 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '%s2member\_%'");
|
317 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '\_transient\_s2m\_%'");
|
318 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '\_transient\_timeout\_s2m\_%'");
|
319 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->postmeta . "` WHERE `meta_key` LIKE '%s2member\_%'");
|
320 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->usermeta . "` WHERE `meta_key` LIKE '%s2member\_%'");
|
321 |
/**/
|
322 |
do_action ("ws_plugin__s2member_during_deactivation", get_defined_vars ());
|
323 |
}
|
324 |
/**/
|
325 |
do_action ("ws_plugin__s2member_after_deactivation", get_defined_vars ());
|
326 |
/**/
|
327 |
+
return; /* Return for uniformity. */
|
328 |
}
|
329 |
}
|
330 |
?>
|
includes/functions/ip-restrictions.inc.php
CHANGED
@@ -12,44 +12,46 @@ If not, see: <http://www.gnu.org/licenses/>.
|
|
12 |
Direct access denial.
|
13 |
*/
|
14 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
15 |
-
exit("Do not access this file directly.");
|
16 |
/*
|
17 |
Function for handling IP Restrictions.
|
18 |
-
IP
|
19 |
*/
|
20 |
if (!function_exists ("ws_plugin__s2member_ip_restrictions_ok"))
|
21 |
{
|
22 |
function ws_plugin__s2member_ip_restrictions_ok ($ip = FALSE, $restriction = FALSE)
|
23 |
{
|
24 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
25 |
do_action ("ws_plugin__s2member_before_ip_restrictions_ok", get_defined_vars ());
|
26 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
27 |
/**/
|
28 |
-
if ($restriction) /* There MUST be a restriction. However, the IP *could* be empty. */
|
29 |
{
|
30 |
-
$
|
31 |
/**/
|
32 |
-
$
|
|
|
33 |
/**/
|
34 |
$conc_filter = "ws_plugin__s2member_ip_restrictions__concurrency_time_per_ip";
|
35 |
$concurrency = apply_filters ($conc_filter, "30 days");
|
36 |
/**/
|
|
|
|
|
37 |
foreach ($entries as $_entry => $_time) /* Auto-expire entries. */
|
38 |
if ($_time < strtotime ("-" . $concurrency))
|
39 |
-
unset($entries[$_entry]);
|
40 |
/**/
|
|
|
41 |
$entries[$ip] = strtotime ("now"); /* Log this entry. */
|
42 |
-
set_transient ($
|
43 |
-
|
44 |
-
|
45 |
-
*/
|
46 |
-
if (get_transient (md5 ("s2member_ip_restrictions_" . $restriction . "_breached")))
|
47 |
{
|
48 |
ws_plugin__s2member_nocache_constants(true) . wp_clear_auth_cookie ();
|
49 |
/**/
|
50 |
do_action ("ws_plugin__s2member_during_ip_restrictions_ok_no", get_defined_vars ());
|
51 |
/**/
|
52 |
-
header("HTTP/1.0 503 Service Temporarily Unavailable"); /* Sends a status header. */
|
53 |
/**/
|
54 |
echo '<strong>503: Service Temporarily Unavailable</strong><br />' . "\n";
|
55 |
echo 'Too many IP addresses accessing one secure area<em>!</em><br />' . "\n";
|
@@ -61,12 +63,11 @@ if (!function_exists ("ws_plugin__s2member_ip_restrictions_ok"))
|
|
61 |
{
|
62 |
ws_plugin__s2member_nocache_constants(true) . wp_clear_auth_cookie ();
|
63 |
/**/
|
64 |
-
|
65 |
-
set_transient (md5 ("s2member_ip_restrictions_" . $restriction . "_breached"), "1", $p);
|
66 |
/**/
|
67 |
do_action ("ws_plugin__s2member_during_ip_restrictions_ok_no", get_defined_vars ());
|
68 |
/**/
|
69 |
-
header("HTTP/1.0 503 Service Temporarily Unavailable"); /* Sends a status header. */
|
70 |
/**/
|
71 |
echo '<strong>503: Service Temporarily Unavailable</strong><br />' . "\n";
|
72 |
echo 'Too many IP addresses accessing one secure area<em>!</em><br />' . "\n";
|
@@ -76,7 +77,7 @@ if (!function_exists ("ws_plugin__s2member_ip_restrictions_ok"))
|
|
76 |
}
|
77 |
else /* OK, this looks legitimate. Continue updating the Transient array of IP addresses. */
|
78 |
{
|
79 |
-
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
80 |
do_action ("ws_plugin__s2member_during_ip_restrictions_ok_yes", get_defined_vars ());
|
81 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
82 |
/**/
|
@@ -87,4 +88,41 @@ if (!function_exists ("ws_plugin__s2member_ip_restrictions_ok"))
|
|
87 |
return apply_filters ("ws_plugin__s2member_ip_restrictions_ok", true, get_defined_vars ());
|
88 |
}
|
89 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
?>
|
12 |
Direct access denial.
|
13 |
*/
|
14 |
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
15 |
+
exit ("Do not access this file directly.");
|
16 |
/*
|
17 |
Function for handling IP Restrictions.
|
18 |
+
IP address details are stored in Transient fields.
|
19 |
*/
|
20 |
if (!function_exists ("ws_plugin__s2member_ip_restrictions_ok"))
|
21 |
{
|
22 |
function ws_plugin__s2member_ip_restrictions_ok ($ip = FALSE, $restriction = FALSE)
|
23 |
{
|
24 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
25 |
do_action ("ws_plugin__s2member_before_ip_restrictions_ok", get_defined_vars ());
|
26 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
27 |
/**/
|
28 |
+
if ($restriction) /* There MUST be a restriction. However, the IP * could * be empty. */
|
29 |
{
|
30 |
+
$prefix = "s2m_ipr_"; /* s2Member Transient prefix for all IP Restrictions. */
|
31 |
/**/
|
32 |
+
$transient_entries = $prefix . md5 ("s2member_ip_restrictions_" . $restriction . "_entries");
|
33 |
+
$transient_security_breach = $prefix . md5 ("s2member_ip_restrictions_" . $restriction . "_security_breach");
|
34 |
/**/
|
35 |
$conc_filter = "ws_plugin__s2member_ip_restrictions__concurrency_time_per_ip";
|
36 |
$concurrency = apply_filters ($conc_filter, "30 days");
|
37 |
/**/
|
38 |
+
$entries = (is_array ($entries = get_transient ($transient_entries))) ? $entries : array ();
|
39 |
+
/**/
|
40 |
foreach ($entries as $_entry => $_time) /* Auto-expire entries. */
|
41 |
if ($_time < strtotime ("-" . $concurrency))
|
42 |
+
unset ($entries[$_entry]);
|
43 |
/**/
|
44 |
+
$ip = ($ip) ? $ip : "empty"; /* Allow empty IPs. */
|
45 |
$entries[$ip] = strtotime ("now"); /* Log this entry. */
|
46 |
+
set_transient ($transient_entries, $entries, 2 * (strtotime ("+" . $concurrency) - strtotime ("now")));
|
47 |
+
/**/
|
48 |
+
if (get_transient ($transient_security_breach)) /* Has this restriction already been breached? */
|
|
|
|
|
49 |
{
|
50 |
ws_plugin__s2member_nocache_constants(true) . wp_clear_auth_cookie ();
|
51 |
/**/
|
52 |
do_action ("ws_plugin__s2member_during_ip_restrictions_ok_no", get_defined_vars ());
|
53 |
/**/
|
54 |
+
header ("HTTP/1.0 503 Service Temporarily Unavailable"); /* Sends a status header. */
|
55 |
/**/
|
56 |
echo '<strong>503: Service Temporarily Unavailable</strong><br />' . "\n";
|
57 |
echo 'Too many IP addresses accessing one secure area<em>!</em><br />' . "\n";
|
63 |
{
|
64 |
ws_plugin__s2member_nocache_constants(true) . wp_clear_auth_cookie ();
|
65 |
/**/
|
66 |
+
set_transient ($transient_security_breach, 1, $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"]);
|
|
|
67 |
/**/
|
68 |
do_action ("ws_plugin__s2member_during_ip_restrictions_ok_no", get_defined_vars ());
|
69 |
/**/
|
70 |
+
header ("HTTP/1.0 503 Service Temporarily Unavailable"); /* Sends a status header. */
|
71 |
/**/
|
72 |
echo '<strong>503: Service Temporarily Unavailable</strong><br />' . "\n";
|
73 |
echo 'Too many IP addresses accessing one secure area<em>!</em><br />' . "\n";
|
77 |
}
|
78 |
else /* OK, this looks legitimate. Continue updating the Transient array of IP addresses. */
|
79 |
{
|
80 |
+
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
81 |
do_action ("ws_plugin__s2member_during_ip_restrictions_ok_yes", get_defined_vars ());
|
82 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */
|
83 |
/**/
|
88 |
return apply_filters ("ws_plugin__s2member_ip_restrictions_ok", true, get_defined_vars ());
|
89 |
}
|
90 |
}
|
91 |
+
/*
|
92 |
+
Function resets/deletes all IP Restrictions.
|
93 |
+
*/
|
94 |
+
if (!function_exists ("ws_plugin__s2member_delete_reset_all_ip_restrictions"))
|
95 |
+
{
|
96 |
+
function ws_plugin__s2member_delete_reset_all_ip_restrictions ()
|
97 |
+
{
|
98 |
+
global $wpdb; /* Need global database object. */
|
99 |
+
/**/
|
100 |
+
do_action ("ws_plugin__s2member_before_delete_reset_all_ip_restrictions", get_defined_vars ());
|
101 |
+
/**/
|
102 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '\_transient\_s2m\_ipr\_%'");
|
103 |
+
$wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '\_transient\_timeout\_s2m\_ipr\_%'");
|
104 |
+
/**/
|
105 |
+
do_action ("ws_plugin__s2member_after_delete_reset_all_ip_restrictions", get_defined_vars ());
|
106 |
+
/**/
|
107 |
+
return; /* Return for uniformity. */
|
108 |
+
}
|
109 |
+
}
|
110 |
+
/*
|
111 |
+
Function resets/deletes all IP Restrictions.
|
112 |
+
Attach to: add_action("wp_ajax_ws_plugin__s2member_reset_ip_restrictions_via_ajax");
|
113 |
+
*/
|
114 |
+
if (!function_exists ("ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"))
|
115 |
+
{
|
116 |
+
function ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax ()
|
117 |
+
{
|
118 |
+
do_action ("ws_plugin__s2member_before_delete_reset_all_ip_restrictions_via_ajax", get_defined_vars ());
|
119 |
+
/**/
|
120 |
+
if (current_user_can ("create_users")) /* Check priveledges as well. */
|
121 |
+
if (($nonce = $_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"]) && wp_verify_nonce ($nonce, "ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax"))
|
122 |
+
if (ws_plugin__s2member_delete_reset_all_ip_restrictions () !== "nill") /* Delete/reset IP Restrictions, and return 1 ( success ). */
|
123 |
+
echo apply_filters ("ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax", 1, get_defined_vars ());
|
124 |
+
/**/
|
125 |
+
exit ();
|
126 |
+
}
|
127 |
+
}
|
128 |
?>
|
includes/functions/sp-access.inc.php
CHANGED
@@ -41,17 +41,17 @@ if (!function_exists ("ws_plugin__s2member_sp_access_link_gen"))
|
|
41 |
}
|
42 |
/*
|
43 |
Generates Specific Post/Page Access links via ajax tools.
|
44 |
-
Attach to: add_action("
|
45 |
*/
|
46 |
-
if (!function_exists ("
|
47 |
{
|
48 |
-
function
|
49 |
{
|
50 |
-
do_action ("
|
51 |
/**/
|
52 |
if (current_user_can ("create_users")) /* Check priveledges as well. */
|
53 |
-
if (($nonce = $_POST["
|
54 |
-
echo apply_filters ("
|
55 |
/**/
|
56 |
exit ();
|
57 |
}
|
41 |
}
|
42 |
/*
|
43 |
Generates Specific Post/Page Access links via ajax tools.
|
44 |
+
Attach to: add_action("wp_ajax_ws_plugin__s2member_sp_access_link_via_ajax");
|
45 |
*/
|
46 |
+
if (!function_exists ("ws_plugin__s2member_sp_access_link_via_ajax"))
|
47 |
{
|
48 |
+
function ws_plugin__s2member_sp_access_link_via_ajax ()
|
49 |
{
|
50 |
+
do_action ("ws_plugin__s2member_before_sp_access_link_via_ajax", get_defined_vars ());
|
51 |
/**/
|
52 |
if (current_user_can ("create_users")) /* Check priveledges as well. */
|
53 |
+
if (($nonce = $_POST["ws_plugin__s2member_sp_access_link_via_ajax"]) && wp_verify_nonce ($nonce, "ws-plugin--s2member-sp-access-link-via-ajax"))
|
54 |
+
echo apply_filters ("ws_plugin__s2member_sp_access_link_via_ajax", ws_plugin__s2member_sp_access_link_gen ($_POST["s2member_sp_access_link_ids"], $_POST["s2member_sp_access_link_hours"]), get_defined_vars ());
|
55 |
/**/
|
56 |
exit ();
|
57 |
}
|
includes/hooks.inc.php
CHANGED
@@ -91,7 +91,6 @@ add_action ("save_post", "ws_plugin__s2member_save_meta_boxes");
|
|
91 |
add_action ("admin_menu", "ws_plugin__s2member_add_admin_options");
|
92 |
add_action ("admin_print_scripts", "ws_plugin__s2member_add_admin_scripts");
|
93 |
add_action ("admin_print_styles", "ws_plugin__s2member_add_admin_styles");
|
94 |
-
add_action ("wp_ajax_s2member_sp_access_link", "ws_plugin__s2member_sp_access_link");
|
95 |
/**/
|
96 |
add_filter ("manage_users_columns", "ws_plugin__s2member_users_list_cols");
|
97 |
add_filter ("manage_users_custom_column", "ws_plugin__s2member_users_list_display_cols", 10, 3);
|
@@ -103,6 +102,9 @@ add_filter ("show_password_fields", "ws_plugin__s2member_demo_hide_password_fiel
|
|
103 |
/**/
|
104 |
add_filter ("cron_schedules", "ws_plugin__s2member_extend_cron_schedules");
|
105 |
add_action ("ws_plugin__s2member_auto_eot_system__schedule", "ws_plugin__s2member_auto_eot_system");
|
|
|
|
|
|
|
106 |
/*
|
107 |
Register the activation | de-activation routines.
|
108 |
*/
|
91 |
add_action ("admin_menu", "ws_plugin__s2member_add_admin_options");
|
92 |
add_action ("admin_print_scripts", "ws_plugin__s2member_add_admin_scripts");
|
93 |
add_action ("admin_print_styles", "ws_plugin__s2member_add_admin_styles");
|
|
|
94 |
/**/
|
95 |
add_filter ("manage_users_columns", "ws_plugin__s2member_users_list_cols");
|
96 |
add_filter ("manage_users_custom_column", "ws_plugin__s2member_users_list_display_cols", 10, 3);
|
102 |
/**/
|
103 |
add_filter ("cron_schedules", "ws_plugin__s2member_extend_cron_schedules");
|
104 |
add_action ("ws_plugin__s2member_auto_eot_system__schedule", "ws_plugin__s2member_auto_eot_system");
|
105 |
+
/**/
|
106 |
+
add_action ("wp_ajax_ws_plugin__s2member_sp_access_link_via_ajax", "ws_plugin__s2member_sp_access_link_via_ajax");
|
107 |
+
add_action ("wp_ajax_ws_plugin__s2member_reset_ip_restrictions_via_ajax", "ws_plugin__s2member_reset_ip_restrictions_via_ajax");
|
108 |
/*
|
109 |
Register the activation | de-activation routines.
|
110 |
*/
|
includes/menu-pages/menu-pages-s-min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function(b){var a=esc_html=function(c){return String(c).replace(/"/g,""").replace(/\</g,"<").replace(/\>/g,">")};if(location.href.match(/page\=ws-plugin--s2member-mms-options/)){b("select#ws-plugin--s2member-mms-registration-file").change(function(){if(b(this).val()==="wp-signup"){b("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),b("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),b("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show()}else{if(b(this).val()==="wp-login"){b("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),b("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),b("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide()}}b("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((b("select#ws-plugin--s2member-mms-registration-grants").val()==="all")?"show":"hide")](),b("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((b("select#ws-plugin--s2member-mms-registration-grants").val()==="all")?"1":"0"))}).trigger("change");b("select#ws-plugin--s2member-mms-registration-grants").change(function(){b("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}else{if(location.href.match(/page\=ws-plugin--s2member-options/)){ws_plugin__s2member_generateSecurityKey=function(){var f=function(h,g){h=(arguments.length<1)?0:h;g=(arguments.length<2)?2147483647:g;return Math.floor(Math.random()*(g-h+1))+h};var e="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";for(var d=0,c="";d<56;d++){c+=e.substr(f(0,e.length-1),1)}b("input#ws-plugin--s2member-sec-encryption-key").val(c);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 some very unhappy Customers. Data corruption WILL occur!\n\nFor 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.")){b("input#ws-plugin--s2member-sec-encryption-key").attr("disabled",false)}return false};ws_plugin__s2member_securityKeyHistory=function(){b("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false}}else{if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){b("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var d=b(this),e=d.val();var c=b("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(e==2){c.show()}else{c.hide()}})}else{if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){b("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var e=b(this),f=e.val();var d=b("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var c=b("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(f<=0){d.css("display","none"),c.attr("src",c.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(f==1){d.css("display",""),c.attr("src",c.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(f==2){d.css("display",""),c.attr("src",c.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}})}else{if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){b("select#ws-plugin--s2member-level1-term, select#ws-plugin--s2member-level2-term, select#ws-plugin--s2member-level3-term, select#ws-plugin--s2member-level4-term, select#ws-plugin--s2member-modification-term").change(function(){var d=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var c=(b(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;b("p#ws-plugin--s2member-"+d+"-trial-line").css("display",(c?"none":""));b("span#ws-plugin--s2member-"+d+"-trial-then").css("display",(c?"none":""));b("span#ws-plugin--s2member-"+d+"-20p-rule").css("display",(c?"none":""));(c)?b("input#ws-plugin--s2member-"+form+"-trial-period").val(0):null});b("input#ws-plugin--s2member-level1-ccaps, input#ws-plugin--s2member-level2-ccaps, input#ws-plugin--s2member-level3-ccaps, input#ws-plugin--s2member-level4-ccaps, input#ws-plugin--s2member-modification-ccaps").keyup(function(){if(this.value.match(/[^a-z_0-9,]/)){this.value=b.trim(b.trim(this.value).replace(/[ \-]/g,"_").replace(/[^A-Z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(f){var c='[s2Member-PayPal-Button %%attrs%% image="default" /]',q="",t={};t.level0='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level0_label"]); ?>';t.level1='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level1_label"]); ?>';t.level2='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level2_label"]); ?>';t.level3='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level3_label"]); ?>';t.level4='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level4_label"]); ?>';var o=b("input#ws-plugin--s2member-"+f+"-shortcode");var g=b("textarea#ws-plugin--s2member-"+f+"-button");var k=b("select#ws-plugin--s2member-modification-level");var h=(f==="modification")?k.val().split(":",2)[1]:f.replace(/^level/,"");var l=t["level"+h].replace(/"/g,"");var d=b("input#ws-plugin--s2member-"+f+"-trial-period").val().replace(/[^0-9]/g,"");var j=b("select#ws-plugin--s2member-"+f+"-trial-term").val().replace(/[^A-Z]/g,"");var m=b("input#ws-plugin--s2member-"+f+"-amount").val().replace(/[^0-9\.]/g,"");var s=b("select#ws-plugin--s2member-"+f+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var u=b("select#ws-plugin--s2member-"+f+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var r=b("select#ws-plugin--s2member-"+f+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var e=b.trim(b("input#ws-plugin--s2member-"+f+"-page-style").val().replace(/"/g,""));var i=b("select#ws-plugin--s2member-"+f+"-currency").val().replace(/[^A-Z]/g,"");var n=b.trim(b.trim(b("input#ws-plugin--s2member-"+f+"-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^A-Z_0-9,]/gi,"").toLowerCase());d=(r==="BN")?"0":d;var p=(r==="BN"&&u!=="L")?h+":"+n+":"+s+" "+u:h+":"+n;p=p.replace(/\:+$/g,"");if(j==="D"&&d>7){alert("Oops, a slight problem:\n\nMaximum Free Days is: 7.\nIf you want to offer more than 7 days free, please choose Weeks or Months from the drop-down.");return false}else{if(j==="W"&&d>52){alert("Oops, a slight problem:\n\nMaximum Free Weeks is: 52.\nIf you want to offer more than 52 weeks free, please choose Months from the drop-down.");return false}else{if(j==="M"&&d>12){alert("Oops, a slight problem:\n\nMaximum Free Months is: 12.\nIf you want to offer more than 12 months free, please choose Years from the drop-down.");return false}else{if(j==="Y"&&d>1){alert("Oops, a slight problem:\n\nMax Trial Period Years is: 1. *This is a PayPal® limitation.");return false}else{if(!m||isNaN(m)||m<0.01){alert("Oops, a slight problem:\n\nAmount must be >= 0.01");return false}else{if(m>10000){alert("Oops, a slight problem:\n\nMaximum amount is: 10000.00");return false}}}}}}g.val(g.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(d)<=0)?g.val(g.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(r==="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(r==="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="(src|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(r!=="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(r!=="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;q+='level="'+a(h)+'" ccaps="'+a(n)+'" desc="'+a(l)+'" ps="'+a(e)+'" cc="'+a(i)+'" ns="1" custom="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"';q+=' tp="'+a(d)+'" tt="'+a(j)+'" ra="'+a(m)+'" rp="'+a(s)+'" rt="'+a(u)+'" rr="'+a(r)+'"';q+=(f==="modification")?' modify="1"':"";o.val(c.replace(/%%attrs%%/,q));g.val(g.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+a(l)+'"'));g.val(g.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+a(p)+'"'));g.val(g.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+a(e)+'"'));g.val(g.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+a(i)+'"'));g.val(g.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"'));g.val(g.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((f==="modification")?"1":"0")+'"'));g.val(g.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+a(m)+'"'));g.val(g.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+a(r)+'"'));g.val(g.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+a(d)+'"'));g.val(g.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+a(j)+'"'));g.val(g.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+a(m)+'"'));g.val(g.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+a(s)+'"'));g.val(g.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+a(u)+'"'));b("div#ws-plugin--s2member-"+f+"-button-prev").html(g.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0); \?\>/g,""));(f==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");o.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var q='[s2Member-PayPal-Button %%attrs%% image="default" /]',p="";var n=b("input#ws-plugin--s2member-sp-shortcode");var e=b("textarea#ws-plugin--s2member-sp-button");var f=b("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var h=b("select#ws-plugin--s2member-sp-additional-ids").val()||[];var o=b("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var k=b("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var j=b.trim(b("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var m=b.trim(b("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var d=b("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!f){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 -> General Options -> Specific Post/Page Access Restrictions.");return false}else{if(!k||isNaN(k)||k<0.01){alert("Oops, a slight problem:\n\nAmount must be >= 0.01");return false}else{if(k>10000){alert("Oops, a slight problem:\n\nMaximum amount is: 10000.00");return false}else{if(!j){alert("Oops, a slight problem:\n\nPlease type a Description for this Button.");return false}}}}for(var g=0,c=f;g<h.length;g++){if(h[g]&&h[g]!==f){c+=","+h[g]}}var l="sp:"+c+":"+o;p+='ids="'+a(c)+'" exp="'+a(o)+'" desc="'+a(j)+'" ps="'+a(m)+'" cc="'+a(d)+'" ns="1"';p+=' custom="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>" ra="'+a(k)+'" sp="1"';n.val(q.replace(/%%attrs%%/,p));e.val(e.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+a(j)+'"'));e.val(e.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+a(l)+'"'));e.val(e.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+a(m)+'"'));e.val(e.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+a(d)+'"'));e.val(e.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"'));e.val(e.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+a(k)+'"'));b("div#ws-plugin--s2member-sp-button-prev").html(e.val().replace(/\<form/,'<form target="_blank"'));alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");n.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var j=b("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var h=b("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var c=b("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var d=b("p#ws-plugin--s2member-sp-link"),g=b("img#ws-plugin--s2member-sp-link-loading");if(!j){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 -> General Options -> Specific Post/Page Access Restrictions.");return false}for(var e=0,f=j;e<h.length;e++){if(h[e]&&h[e]!==j){f+=","+h[e]}}d.hide(),g.show(),b.post(ajaxurl,{action:"s2member_sp_access_link",s2member_sp_access_link:'<?php echo ws_plugin__s2member_esc_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link")); ?>',s2member_sp_access_link_ids:f,s2member_sp_access_link_hours:c},function(i){d.show().html('<a href="'+a(i)+'" target="_blank" rel="external">'+esc_html(i)+"</a>"),g.hide()});return false}}}}}}});
|
1 |
+
jQuery(document).ready(function(b){var a=esc_html=function(c){return String(c).replace(/"/g,""").replace(/\</g,"<").replace(/\>/g,">")};if(location.href.match(/page\=ws-plugin--s2member-mms-options/)){b("select#ws-plugin--s2member-mms-registration-file").change(function(){if(b(this).val()==="wp-signup"){b("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").show(),b("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").hide(),b("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").show()}else{if(b(this).val()==="wp-login"){b("div#ws-plugin--s2member-mms-registration-support-package-details-wrapper").hide(),b("div.ws-plugin--s2member-mms-registration-wp-login, table.ws-plugin--s2member-mms-registration-wp-login").show(),b("div.ws-plugin--s2member-mms-registration-wp-signup, table.ws-plugin--s2member-mms-registration-wp-signup").hide()}}b("div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0")[((b("select#ws-plugin--s2member-mms-registration-grants").val()==="all")?"show":"hide")](),b("input#ws-plugin--s2member-mms-registration-blogs-level0").val(((b("select#ws-plugin--s2member-mms-registration-grants").val()==="all")?"1":"0"))}).trigger("change");b("select#ws-plugin--s2member-mms-registration-grants").change(function(){b("select#ws-plugin--s2member-mms-registration-file").trigger("change")})}else{if(location.href.match(/page\=ws-plugin--s2member-options/)){ws_plugin__s2member_generateSecurityKey=function(){var f=function(h,g){h=(arguments.length<1)?0:h;g=(arguments.length<2)?2147483647:g;return Math.floor(Math.random()*(g-h+1))+h};var e="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";for(var d=0,c="";d<56;d++){c+=e.substr(f(0,e.length-1),1)}b("input#ws-plugin--s2member-sec-encryption-key").val(c);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 some very unhappy Customers. Data corruption WILL occur!\n\nFor 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.")){b("input#ws-plugin--s2member-sec-encryption-key").attr("disabled",false)}return false};ws_plugin__s2member_securityKeyHistory=function(){b("div#ws-plugin--s2member-sec-encryption-key-history").toggle();return false};b("input#ws-plugin--s2member-ip-restrictions-reset-button").click(function(){var c=b(this);c.val("one moment please ...");b.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 ws_plugin__s2member_esc_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'},function(d){alert("s2Member's IP Restriction Logs have all been reset."),c.val("Reset IP Restriction Logs")});return false})}else{if(location.href.match(/page\=ws-plugin--s2member-paypal-ops/)){b("select#ws-plugin--s2member-auto-eot-system-enabled").change(function(){var d=b(this),e=d.val();var c=b("p#ws-plugin--s2member-auto-eot-system-enabled-via-cron");if(e==2){c.show()}else{c.hide()}})}else{if(location.href.match(/page\=ws-plugin--s2member-els-ops/)){b("select#ws-plugin--s2member-custom-reg-opt-in").change(function(){var e=b(this),f=e.val();var d=b("tr.ws-plugin--s2member-custom-reg-opt-in-label-row");var c=b("img.ws-plugin--s2member-custom-reg-opt-in-label-prev-img");if(f<=0){d.css("display","none"),c.attr("src",c.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}else{if(f==1){d.css("display",""),c.attr("src",c.attr("src").replace(/\/unchecked\.png$/,"/checked.png"))}else{if(f==2){d.css("display",""),c.attr("src",c.attr("src").replace(/\/checked\.png$/,"/unchecked.png"))}}}})}else{if(location.href.match(/page\=ws-plugin--s2member-paypal-buttons/)){b("select#ws-plugin--s2member-level1-term, select#ws-plugin--s2member-level2-term, select#ws-plugin--s2member-level3-term, select#ws-plugin--s2member-level4-term, select#ws-plugin--s2member-modification-term").change(function(){var d=this.id.replace(/^ws-plugin--s2member-(.+?)-term$/g,"$1");var c=(b(this).val().split("-")[2].replace(/[^0-1BN]/g,"")==="BN")?1:0;b("p#ws-plugin--s2member-"+d+"-trial-line").css("display",(c?"none":""));b("span#ws-plugin--s2member-"+d+"-trial-then").css("display",(c?"none":""));b("span#ws-plugin--s2member-"+d+"-20p-rule").css("display",(c?"none":""));(c)?b("input#ws-plugin--s2member-"+form+"-trial-period").val(0):null});b("input#ws-plugin--s2member-level1-ccaps, input#ws-plugin--s2member-level2-ccaps, input#ws-plugin--s2member-level3-ccaps, input#ws-plugin--s2member-level4-ccaps, input#ws-plugin--s2member-modification-ccaps").keyup(function(){if(this.value.match(/[^a-z_0-9,]/)){this.value=b.trim(b.trim(this.value).replace(/[ \-]/g,"_").replace(/[^A-Z_0-9,]/gi,"").toLowerCase())}});ws_plugin__s2member_paypalButtonGenerate=function(f){var c='[s2Member-PayPal-Button %%attrs%% image="default" /]',q="",t={};t.level0='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level0_label"]); ?>';t.level1='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level1_label"]); ?>';t.level2='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level2_label"]); ?>';t.level3='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level3_label"]); ?>';t.level4='<?php echo ws_plugin__s2member_esc_sq ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level4_label"]); ?>';var o=b("input#ws-plugin--s2member-"+f+"-shortcode");var g=b("textarea#ws-plugin--s2member-"+f+"-button");var k=b("select#ws-plugin--s2member-modification-level");var h=(f==="modification")?k.val().split(":",2)[1]:f.replace(/^level/,"");var l=t["level"+h].replace(/"/g,"");var d=b("input#ws-plugin--s2member-"+f+"-trial-period").val().replace(/[^0-9]/g,"");var j=b("select#ws-plugin--s2member-"+f+"-trial-term").val().replace(/[^A-Z]/g,"");var m=b("input#ws-plugin--s2member-"+f+"-amount").val().replace(/[^0-9\.]/g,"");var s=b("select#ws-plugin--s2member-"+f+"-term").val().split("-")[0].replace(/[^0-9]/g,"");var u=b("select#ws-plugin--s2member-"+f+"-term").val().split("-")[1].replace(/[^A-Z]/g,"");var r=b("select#ws-plugin--s2member-"+f+"-term").val().split("-")[2].replace(/[^0-1BN]/g,"");var e=b.trim(b("input#ws-plugin--s2member-"+f+"-page-style").val().replace(/"/g,""));var i=b("select#ws-plugin--s2member-"+f+"-currency").val().replace(/[^A-Z]/g,"");var n=b.trim(b.trim(b("input#ws-plugin--s2member-"+f+"-ccaps").val()).replace(/[ \-]/g,"_").replace(/[^A-Z_0-9,]/gi,"").toLowerCase());d=(r==="BN")?"0":d;var p=(r==="BN"&&u!=="L")?h+":"+n+":"+s+" "+u:h+":"+n;p=p.replace(/\:+$/g,"");if(j==="D"&&d>7){alert("Oops, a slight problem:\n\nMaximum Free Days is: 7.\nIf you want to offer more than 7 days free, please choose Weeks or Months from the drop-down.");return false}else{if(j==="W"&&d>52){alert("Oops, a slight problem:\n\nMaximum Free Weeks is: 52.\nIf you want to offer more than 52 weeks free, please choose Months from the drop-down.");return false}else{if(j==="M"&&d>12){alert("Oops, a slight problem:\n\nMaximum Free Months is: 12.\nIf you want to offer more than 12 months free, please choose Years from the drop-down.");return false}else{if(j==="Y"&&d>1){alert("Oops, a slight problem:\n\nMax Trial Period Years is: 1. *This is a PayPal® limitation.");return false}else{if(!m||isNaN(m)||m<0.01){alert("Oops, a slight problem:\n\nAmount must be >= 0.01");return false}else{if(m>10000){alert("Oops, a slight problem:\n\nMaximum amount is: 10000.00");return false}}}}}}g.val(g.val().replace(/ \<\!--(\<input type\="hidden" name\="(amount|src|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)--\>/g," $1"));(parseInt(d)<=0)?g.val(g.val().replace(/ (\<input type\="hidden" name\="(a1|p1|t1)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(r==="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick$3")):null;(r==="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="(src|sra|a1|p1|t1|a3|p3|t3)" value\="(.*?)" \/\>)/g," <!--$1-->")):null;(r!=="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="cmd" value\=")(.*?)(" \/\>)/g," $1_xclick-subscriptions$3")):null;(r!=="BN")?g.val(g.val().replace(/ (\<input type\="hidden" name\="amount" value\="(.*?)" \/\>)/g," <!--$1-->")):null;q+='level="'+a(h)+'" ccaps="'+a(n)+'" desc="'+a(l)+'" ps="'+a(e)+'" cc="'+a(i)+'" ns="1" custom="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"';q+=' tp="'+a(d)+'" tt="'+a(j)+'" ra="'+a(m)+'" rp="'+a(s)+'" rt="'+a(u)+'" rr="'+a(r)+'"';q+=(f==="modification")?' modify="1"':"";o.val(c.replace(/%%attrs%%/,q));g.val(g.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+a(l)+'"'));g.val(g.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+a(p)+'"'));g.val(g.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+a(e)+'"'));g.val(g.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+a(i)+'"'));g.val(g.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"'));g.val(g.val().replace(/ name\="modify" value\="(.*?)"/,' name="modify" value="'+((f==="modification")?"1":"0")+'"'));g.val(g.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+a(m)+'"'));g.val(g.val().replace(/ name\="src" value\="(.*?)"/,' name="src" value="'+a(r)+'"'));g.val(g.val().replace(/ name\="p1" value\="(.*?)"/,' name="p1" value="'+a(d)+'"'));g.val(g.val().replace(/ name\="t1" value\="(.*?)"/,' name="t1" value="'+a(j)+'"'));g.val(g.val().replace(/ name\="a3" value\="(.*?)"/,' name="a3" value="'+a(m)+'"'));g.val(g.val().replace(/ name\="p3" value\="(.*?)"/,' name="p3" value="'+a(s)+'"'));g.val(g.val().replace(/ name\="t3" value\="(.*?)"/,' name="t3" value="'+a(u)+'"'));b("div#ws-plugin--s2member-"+f+"-button-prev").html(g.val().replace(/\<form/,'<form target="_blank"').replace(/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0); \?\>/g,""));(f==="modification")?alert("Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate."):alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");o.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpButtonGenerate=function(){var q='[s2Member-PayPal-Button %%attrs%% image="default" /]',p="";var n=b("input#ws-plugin--s2member-sp-shortcode");var e=b("textarea#ws-plugin--s2member-sp-button");var f=b("select#ws-plugin--s2member-sp-leading-id").val().replace(/[^0-9]/g,"");var h=b("select#ws-plugin--s2member-sp-additional-ids").val()||[];var o=b("select#ws-plugin--s2member-sp-hours").val().replace(/[^0-9]/g,"");var k=b("input#ws-plugin--s2member-sp-amount").val().replace(/[^0-9\.]/g,"");var j=b.trim(b("input#ws-plugin--s2member-sp-desc").val().replace(/"/g,""));var m=b.trim(b("input#ws-plugin--s2member-sp-page-style").val().replace(/"/g,""));var d=b("select#ws-plugin--s2member-sp-currency").val().replace(/[^A-Z]/g,"");if(!f){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 -> General Options -> Specific Post/Page Access Restrictions.");return false}else{if(!k||isNaN(k)||k<0.01){alert("Oops, a slight problem:\n\nAmount must be >= 0.01");return false}else{if(k>10000){alert("Oops, a slight problem:\n\nMaximum amount is: 10000.00");return false}else{if(!j){alert("Oops, a slight problem:\n\nPlease type a Description for this Button.");return false}}}}for(var g=0,c=f;g<h.length;g++){if(h[g]&&h[g]!==f){c+=","+h[g]}}var l="sp:"+c+":"+o;p+='ids="'+a(c)+'" exp="'+a(o)+'" desc="'+a(j)+'" ps="'+a(m)+'" cc="'+a(d)+'" ns="1"';p+=' custom="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>" ra="'+a(k)+'" sp="1"';n.val(q.replace(/%%attrs%%/,p));e.val(e.val().replace(/ name\="item_name" value\="(.*?)"/,' name="item_name" value="'+a(j)+'"'));e.val(e.val().replace(/ name\="item_number" value\="(.*?)"/,' name="item_number" value="'+a(l)+'"'));e.val(e.val().replace(/ name\="page_style" value\="(.*?)"/,' name="page_style" value="'+a(m)+'"'));e.val(e.val().replace(/ name\="currency_code" value\="(.*?)"/,' name="currency_code" value="'+a(d)+'"'));e.val(e.val().replace(/ name\="custom" value\="(.*?)"/,' name="custom" value="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"'));e.val(e.val().replace(/ name\="amount" value\="(.*?)"/,' name="amount" value="'+a(k)+'"'));b("div#ws-plugin--s2member-sp-button-prev").html(e.val().replace(/\<form/,'<form target="_blank"'));alert("Your Button has been generated.\nPlease copy/paste the Shortcode Format into your Membership Options Page.");n.each(function(){this.focus(),this.select()});return false};ws_plugin__s2member_paypalSpLinkGenerate=function(){var j=b("select#ws-plugin--s2member-sp-link-leading-id").val().replace(/[^0-9]/g,"");var h=b("select#ws-plugin--s2member-sp-link-additional-ids").val()||[];var c=b("select#ws-plugin--s2member-sp-link-hours").val().replace(/[^0-9]/g,"");var d=b("p#ws-plugin--s2member-sp-link"),g=b("img#ws-plugin--s2member-sp-link-loading");if(!j){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 -> General Options -> Specific Post/Page Access Restrictions.");return false}for(var e=0,f=j;e<h.length;e++){if(h[e]&&h[e]!==j){f+=","+h[e]}}d.hide(),g.show(),b.post(ajaxurl,{action:"ws_plugin__s2member_sp_access_link_via_ajax",ws_plugin__s2member_sp_access_link_via_ajax:'<?php echo ws_plugin__s2member_esc_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link-via-ajax")); ?>',s2member_sp_access_link_ids:f,s2member_sp_access_link_hours:c},function(i){d.show().html('<a href="'+a(i)+'" target="_blank" rel="external">'+esc_html(i)+"</a>"),g.hide()});return false}}}}}}});
|
includes/menu-pages/menu-pages-s.js
CHANGED
@@ -30,7 +30,7 @@ jQuery (document).ready (function($)
|
|
30 |
$ ('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 ();
|
31 |
}
|
32 |
/**/
|
33 |
-
$ ('div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0')[(($ ('select#ws-plugin--s2member-mms-registration-grants').val () === 'all') ? 'show' : 'hide')] (), $ ('input#ws-plugin--s2member-mms-registration-blogs-level0').val ((($ ('select#ws-plugin--s2member-mms-registration-grants').val () === 'all') ? '1' : '0'));
|
34 |
/**/
|
35 |
}).trigger ('change'); /* Fire on ready too. */
|
36 |
/**/
|
@@ -74,6 +74,19 @@ jQuery (document).ready (function($)
|
|
74 |
/**/
|
75 |
return false;
|
76 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
/**/
|
79 |
else if (location.href.match (/page\=ws-plugin--s2member-paypal-ops/))
|
@@ -204,7 +217,7 @@ jQuery (document).ready (function($)
|
|
204 |
code.val (code.val ().replace (/ name\="page_style" value\="(.*?)"/, ' name="page_style" value="' + esc_attr (pageStyle) + '"'));
|
205 |
code.val (code.val ().replace (/ name\="currency_code" value\="(.*?)"/, ' name="currency_code" value="' + esc_attr (currencyCode) + '"'));
|
206 |
code.val (code.val ().replace (/ name\="custom" value\="(.*?)"/, ' name="custom" value="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"'));
|
207 |
-
code.val (code.val ().replace (/ name\="modify" value\="(.*?)"/, ' name="modify" value="' + ((button === 'modification') ? '1' : '0') + '"'));
|
208 |
code.val (code.val ().replace (/ name\="amount" value\="(.*?)"/, ' name="amount" value="' + esc_attr (regAmount) + '"'));
|
209 |
code.val (code.val ().replace (/ name\="src" value\="(.*?)"/, ' name="src" value="' + esc_attr (regRecur) + '"'));
|
210 |
code.val (code.val ().replace (/ name\="p1" value\="(.*?)"/, ' name="p1" value="' + esc_attr (trialPeriod) + '"'));
|
@@ -307,7 +320,7 @@ jQuery (document).ready (function($)
|
|
307 |
if (additionals[i] && additionals[i] !== leading)
|
308 |
ids += ',' + additionals[i];
|
309 |
/**/
|
310 |
-
$link.hide (), $loading.show (), $.post (ajaxurl, {action: '
|
311 |
{
|
312 |
$link.show ().html ('<a href="' + esc_attr (response) + '" target="_blank" rel="external">' + esc_html (response) + '</a>'), $loading.hide ();
|
313 |
});
|
30 |
$ ('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 ();
|
31 |
}
|
32 |
/**/
|
33 |
+
$ ('div.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0, table.ws-plugin--s2member-mms-registration-wp-signup-blogs-level0')[ ( ($ ('select#ws-plugin--s2member-mms-registration-grants').val () === 'all') ? 'show' : 'hide')] (), $ ('input#ws-plugin--s2member-mms-registration-blogs-level0').val ( ( ($ ('select#ws-plugin--s2member-mms-registration-grants').val () === 'all') ? '1' : '0'));
|
34 |
/**/
|
35 |
}).trigger ('change'); /* Fire on ready too. */
|
36 |
/**/
|
74 |
/**/
|
75 |
return false;
|
76 |
};
|
77 |
+
/**/
|
78 |
+
$ ('input#ws-plugin--s2member-ip-restrictions-reset-button').click (function()
|
79 |
+
{
|
80 |
+
var $this = $ (this); /* Save $(this) into $this. */
|
81 |
+
$this.val ('one moment please ...'); /* Indicate loading status ( please wait ). */
|
82 |
+
/**/
|
83 |
+
$.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 ws_plugin__s2member_esc_sq (wp_create_nonce ("ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")); ?>'}, function(response)
|
84 |
+
{
|
85 |
+
alert ('s2Member\'s IP Restriction Logs have all been reset.'), $this.val ('Reset IP Restriction Logs');
|
86 |
+
});
|
87 |
+
/**/
|
88 |
+
return false;
|
89 |
+
});
|
90 |
}
|
91 |
/**/
|
92 |
else if (location.href.match (/page\=ws-plugin--s2member-paypal-ops/))
|
217 |
code.val (code.val ().replace (/ name\="page_style" value\="(.*?)"/, ' name="page_style" value="' + esc_attr (pageStyle) + '"'));
|
218 |
code.val (code.val ().replace (/ name\="currency_code" value\="(.*?)"/, ' name="currency_code" value="' + esc_attr (currencyCode) + '"'));
|
219 |
code.val (code.val ().replace (/ name\="custom" value\="(.*?)"/, ' name="custom" value="<?php echo esc_attr ($_SERVER["HTTP_HOST"]); ?>"'));
|
220 |
+
code.val (code.val ().replace (/ name\="modify" value\="(.*?)"/, ' name="modify" value="' + ( (button === 'modification') ? '1' : '0') + '"'));
|
221 |
code.val (code.val ().replace (/ name\="amount" value\="(.*?)"/, ' name="amount" value="' + esc_attr (regAmount) + '"'));
|
222 |
code.val (code.val ().replace (/ name\="src" value\="(.*?)"/, ' name="src" value="' + esc_attr (regRecur) + '"'));
|
223 |
code.val (code.val ().replace (/ name\="p1" value\="(.*?)"/, ' name="p1" value="' + esc_attr (trialPeriod) + '"'));
|
320 |
if (additionals[i] && additionals[i] !== leading)
|
321 |
ids += ',' + additionals[i];
|
322 |
/**/
|
323 |
+
$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 ws_plugin__s2member_esc_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)
|
324 |
{
|
325 |
$link.show ().html ('<a href="' + esc_attr (response) + '" target="_blank" rel="external">' + esc_html (response) + '</a>'), $loading.hide ();
|
326 |
});
|
includes/menu-pages/options.inc.php
CHANGED
@@ -599,6 +599,7 @@ if (apply_filters ("ws_plugin__s2member_during_options_page_during_left_sections
|
|
599 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
|
600 |
echo '<h3>Login Welcome Page ( required, please customize this )</h3>' . "\n";
|
601 |
echo '<p>Please create and/or choose an existing Page to use as the first page Members will see after logging in.</p>' . "\n";
|
|
|
602 |
do_action ("ws_plugin__s2member_during_options_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
|
603 |
/**/
|
604 |
echo '<table class="form-table">' . "\n";
|
@@ -644,6 +645,7 @@ if (apply_filters ("ws_plugin__s2member_during_options_page_during_left_sections
|
|
644 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
|
645 |
echo '<h3>Membership Options Page ( required, please customize this )</h3>' . "\n";
|
646 |
echo '<p>Please create and/or choose an existing Page that showcases your Membership subscription options. This special Page is where you will insert the PayPal® Subscription Buttons generated for you by s2Member. This Page serves as your signup page. It should detail all of the features that come with Membership to your site, and provide a PayPal® Subscription Button for each Level of access you plan to offer. This is also the page that Users will be redirected to, should they attempt to access an area of your site that requires Membership.</p>' . "\n";
|
|
|
647 |
do_action ("ws_plugin__s2member_during_options_page_during_left_sections_during_membership_options_page", get_defined_vars ());
|
648 |
/**/
|
649 |
echo '<table class="form-table">' . "\n";
|
@@ -1317,8 +1319,8 @@ if (apply_filters ("ws_plugin__s2member_during_options_page_during_left_sections
|
|
1317 |
/**/
|
1318 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-ip-restrictions-section">' . "\n";
|
1319 |
echo '<h3>Unique IP Access Restrictions ( prevents username/link sharing )</h3>' . "\n";
|
1320 |
-
echo '<
|
1321 |
-
echo '<p>In all cases, the rules are simple. A single Username, Access Link, and/or Entry Point ... is only valid for a certain number of unique IP addresses. Once that limit is reached, s2Member assumes there has been a security breach. At that time, s2Member will place a temporary ban ( preventing access ) to a Specific Post/Page, or to an account associated with a particular Username. This temporary ban, will ONLY affect the offending Link and/or Username associated with the security breach. You can fine-tune this behavior, using the options below.</p>' . "\n";
|
1322 |
echo '<p>This form of IP monitoring, is known as an (Adaptive Concurrency Restriction). We refer to this as "Adaptive", because the concurrency timeouts are increased automatically, based on the number of attempts that MAY take place over time. The default period of 30 days works on 99.9% of all installations. This period is renewed automatically, every time a new attempt is made. This allows s2Member to become more secure; with each attempt from a new location ( commonly associated with link sharing ). In other words, s2Member adapts itself to bad behavior, so it can ALSO crack-down on hacking attempts that may occur over a longer period of time. And without being SO paranoid that a legitimate Customer would have a problem.</p>' . "\n";
|
1323 |
echo '<p><em>*Note* an empty IP address ( associated with someone browsing anonymously ), is also considered a unique IP address, so it cannot circumvent s2Member\'s security.</em></p>' . "\n";
|
1324 |
do_action ("ws_plugin__s2member_during_options_page_during_left_sections_during_ip_restrictions", get_defined_vars ());
|
@@ -1388,7 +1390,7 @@ if (apply_filters ("ws_plugin__s2member_during_options_page_during_left_sections
|
|
1388 |
echo '<option value="15778463"' . ( ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"] == 15778463) ? ' selected="selected"' : '') . '>If limit is exceeded ( punish for 6 months )</option>' . "\n";
|
1389 |
echo '<option value="31556926"' . ( ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"] == 31556926) ? ' selected="selected"' : '') . '>If limit is exceeded ( punish for 1 year )</option>' . "\n";
|
1390 |
echo '</select><br />' . "\n";
|
1391 |
-
echo 'When/if you change this,
|
1392 |
echo '</td>' . "\n";
|
1393 |
/**/
|
1394 |
echo '</tr>' . "\n";
|
599 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
|
600 |
echo '<h3>Login Welcome Page ( required, please customize this )</h3>' . "\n";
|
601 |
echo '<p>Please create and/or choose an existing Page to use as the first page Members will see after logging in.</p>' . "\n";
|
602 |
+
echo '<p><em><strong>*Tip*</strong> This special Page will be protected from public access ( automatically ) by s2Member.</em></p>' . "\n";
|
603 |
do_action ("ws_plugin__s2member_during_options_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
|
604 |
/**/
|
605 |
echo '<table class="form-table">' . "\n";
|
645 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
|
646 |
echo '<h3>Membership Options Page ( required, please customize this )</h3>' . "\n";
|
647 |
echo '<p>Please create and/or choose an existing Page that showcases your Membership subscription options. This special Page is where you will insert the PayPal® Subscription Buttons generated for you by s2Member. This Page serves as your signup page. It should detail all of the features that come with Membership to your site, and provide a PayPal® Subscription Button for each Level of access you plan to offer. This is also the page that Users will be redirected to, should they attempt to access an area of your site that requires Membership.</p>' . "\n";
|
648 |
+
echo '<p><em><strong>*Tip*</strong> s2Member will NEVER allow this Page to be protected from public access.</em></p>' . "\n";
|
649 |
do_action ("ws_plugin__s2member_during_options_page_during_left_sections_during_membership_options_page", get_defined_vars ());
|
650 |
/**/
|
651 |
echo '<table class="form-table">' . "\n";
|
1319 |
/**/
|
1320 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-ip-restrictions-section">' . "\n";
|
1321 |
echo '<h3>Unique IP Access Restrictions ( prevents username/link sharing )</h3>' . "\n";
|
1322 |
+
echo '<input type="button" id="ws-plugin--s2member-ip-restrictions-reset-button" value="Reset IP Restriction Logs" class="ws-menu-page-right" style="min-width:175px;" />' . "\n";
|
1323 |
+
echo '<p>As with any Membership system, it is possible for one Member to signup, and then share their Username with someone else; or even post it online for the whole world to see. This is known as Link Sharing ( aka: Username Sharing ). It is NOT likely that you\'ll be attacked in this way, but it\'s still a good idea to protect your system; just in case somebody tries this. s2Member\'s IP Restrictions work for Membership Level Access ( account logins ), Specific Post/Page Access, Registration Links, and other secure Entry Points. In all cases, the rules are simple. A single Username, Access Link, and/or Entry Point ... is only valid for a certain number of unique IP addresses. Once that limit is reached, s2Member assumes there has been a security breach. At that time, s2Member will place a temporary ban ( preventing access ) to a Specific Post/Page, or to an account associated with a particular Username. This temporary ban, will ONLY affect the offending Link and/or Username associated with the security breach. You can fine-tune this behavior, using the options below.</p>' . "\n";
|
1324 |
echo '<p>This form of IP monitoring, is known as an (Adaptive Concurrency Restriction). We refer to this as "Adaptive", because the concurrency timeouts are increased automatically, based on the number of attempts that MAY take place over time. The default period of 30 days works on 99.9% of all installations. This period is renewed automatically, every time a new attempt is made. This allows s2Member to become more secure; with each attempt from a new location ( commonly associated with link sharing ). In other words, s2Member adapts itself to bad behavior, so it can ALSO crack-down on hacking attempts that may occur over a longer period of time. And without being SO paranoid that a legitimate Customer would have a problem.</p>' . "\n";
|
1325 |
echo '<p><em>*Note* an empty IP address ( associated with someone browsing anonymously ), is also considered a unique IP address, so it cannot circumvent s2Member\'s security.</em></p>' . "\n";
|
1326 |
do_action ("ws_plugin__s2member_during_options_page_during_left_sections_during_ip_restrictions", get_defined_vars ());
|
1390 |
echo '<option value="15778463"' . ( ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"] == 15778463) ? ' selected="selected"' : '') . '>If limit is exceeded ( punish for 6 months )</option>' . "\n";
|
1391 |
echo '<option value="31556926"' . ( ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"] == 31556926) ? ' selected="selected"' : '') . '>If limit is exceeded ( punish for 1 year )</option>' . "\n";
|
1392 |
echo '</select><br />' . "\n";
|
1393 |
+
echo 'When/if you change this, you should also <strong>Reset IP Restriction Logs</strong> ( click button above ).' . "\n";
|
1394 |
echo '</td>' . "\n";
|
1395 |
/**/
|
1396 |
echo '</tr>' . "\n";
|
readme.txt
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
=== s2Member ( Membership w/ PayPal® Integration ) ~ now Multisite compatible! ===
|
2 |
|
3 |
-
Version: 3.2.
|
4 |
-
Stable tag: 3.2.
|
5 |
Framework: WS-P-3.0
|
6 |
|
7 |
SSL Compatible: yes
|
@@ -170,6 +170,10 @@ Not yet. This is coming soon though. It will be included in a future release of
|
|
170 |
|
171 |
== Changelog ==
|
172 |
|
|
|
|
|
|
|
|
|
173 |
= 3.2.4 =
|
174 |
* BuddyPress ( bug ). A bug that was first introduced in s2Member v3.2.3 with Hook priority on `template_redirect` was causing compatiblity issues with BuddyPress. This has been corrected in s2Member v3.2.4+.
|
175 |
* Bug fix. The s2Member Meta Box panel was not being displayed with Custom Post Types. This has been resolved in s2Member v3.2.4+.
|
1 |
=== s2Member ( Membership w/ PayPal® Integration ) ~ now Multisite compatible! ===
|
2 |
|
3 |
+
Version: 3.2.5
|
4 |
+
Stable tag: 3.2.5
|
5 |
Framework: WS-P-3.0
|
6 |
|
7 |
SSL Compatible: yes
|
170 |
|
171 |
== Changelog ==
|
172 |
|
173 |
+
= 3.2.5 =
|
174 |
+
* IP Restrictions ( reset ). Several site owners have reported issues with s2Member's IP Restrictions. A full investigation has been performed. Although no bugs were found, we suspect that recent reports on this topic are related to a combination of a.) improvements in recent versions of s2Member, with respect to IP Restrictions ( adaptive concurrency limits ); and b.) lack of support ( on the part of s2Member ) for resetting IP Restriction Logs after changes in configuration. In this release of s2Member, we've introduced a new tool for site owners, which allows you to Reset IP Restriction Logs manually, at anytime you like. For further details, please see: `s2Member -> General Options -> IP Restrictions` ( look for the new button titled: `Reset IP Restriction Logs`. ).
|
175 |
+
* Compatibility. s2Member's activation/deactivation routines have been updated to support installations of WordPress® that may, or may not, already have the default WordPress® Roles installed. For instance, some installations of WordPress® are running with Role managing plugins. A site owner could have modified WordPress®, and may no longer have one, or even all of these default Roles: `administrator, editor, author, contributor, subscriber`. s2Member is now capable of dealing with this scenario gracefully upon activation/deactivation.
|
176 |
+
|
177 |
= 3.2.4 =
|
178 |
* BuddyPress ( bug ). A bug that was first introduced in s2Member v3.2.3 with Hook priority on `template_redirect` was causing compatiblity issues with BuddyPress. This has been corrected in s2Member v3.2.4+.
|
179 |
* Bug fix. The s2Member Meta Box panel was not being displayed with Custom Post Types. This has been resolved in s2Member v3.2.4+.
|
s2member.php
CHANGED
@@ -9,8 +9,8 @@ along with this software. In the main directory, see: /licensing/
|
|
9 |
If not, see: <http://www.gnu.org/licenses/>.
|
10 |
*/
|
11 |
/*
|
12 |
-
Version: 3.2.
|
13 |
-
Stable tag: 3.2.
|
14 |
Framework: WS-P-3.0
|
15 |
|
16 |
SSL Compatible: yes
|
@@ -48,10 +48,10 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
|
|
48 |
/*
|
49 |
Define versions.
|
50 |
*/
|
51 |
-
define ("WS_PLUGIN__S2MEMBER_VERSION", "3.2.
|
52 |
define ("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2");
|
53 |
define ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION", "3.0");
|
54 |
-
define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "1.2.
|
55 |
/*
|
56 |
Compatibility checks.
|
57 |
*/
|
9 |
If not, see: <http://www.gnu.org/licenses/>.
|
10 |
*/
|
11 |
/*
|
12 |
+
Version: 3.2.5
|
13 |
+
Stable tag: 3.2.5
|
14 |
Framework: WS-P-3.0
|
15 |
|
16 |
SSL Compatible: yes
|
48 |
/*
|
49 |
Define versions.
|
50 |
*/
|
51 |
+
define ("WS_PLUGIN__S2MEMBER_VERSION", "3.2.5");
|
52 |
define ("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2");
|
53 |
define ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION", "3.0");
|
54 |
+
define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "1.2.5");
|
55 |
/*
|
56 |
Compatibility checks.
|
57 |
*/
|