Version Description
= v120219 = Link updates and a compatibility fix. Upgrade immediately.
Download this release
Release Info
Developer | PriMoThemes |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 120219 |
Comparing to | |
See all releases |
Code changes from version 120213 to 120219
- includes/classes/ip-restrictions.inc.php +73 -73
- includes/classes/paypal-notify-in.inc.php +1 -1
- includes/classes/paypal-return-in.inc.php +2 -2
- includes/menu-pages/down-ops.inc.php +7 -7
- includes/menu-pages/els-ops.inc.php +2 -2
- includes/menu-pages/gen-ops.inc.php +1 -1
- includes/menu-pages/res-ops.inc.php +5 -5
- includes/menu-pages/scripting.inc.php +19 -19
- includes/s2member.css +0 -32
- includes/templates/cfg-files/s2member-files-no-gzip.php +1 -1
- includes/translations/s2member.pot +2 -2
- includes/translations/translators.txt +1 -1
- readme.txt +16 -6
- s2member.php +4 -4
includes/classes/ip-restrictions.inc.php
CHANGED
@@ -14,10 +14,10 @@
|
|
14 |
* @package s2Member\IP_Restrictions
|
15 |
* @since 3.5
|
16 |
*/
|
17 |
-
if
|
18 |
exit("Do not access this file directly.");
|
19 |
/**/
|
20 |
-
if
|
21 |
{
|
22 |
/**
|
23 |
* IP Restrictions.
|
@@ -39,68 +39,68 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
39 |
* @param str $restriction Unique IP Restriction name/identifier. Such as a Username, or a unique access code.
|
40 |
* @return bool True if IP Restrictions are OK, otherwise this function will exit script execution after issuing a warning.
|
41 |
*/
|
42 |
-
public static function ip_restrictions_ok
|
43 |
{
|
44 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
45 |
-
do_action
|
46 |
-
unset
|
47 |
/**/
|
48 |
-
if
|
49 |
-
/* Also allow specific exclusions here. */ && !apply_filters
|
50 |
-
/* And enabled by site owner? */ && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction"] /* And a valid ``$restriction``? */ && $restriction && is_string
|
51 |
/* Flag indicating that we ARE processing this IP Restriction. Useful in Hooks/Filters. */ && ($processing = true))
|
52 |
{
|
53 |
-
$msg_503 = _x
|
54 |
/**/
|
55 |
-
$prefix =
|
56 |
/**/
|
57 |
-
$transient_entries = $prefix
|
58 |
-
$transient_security_breach = $prefix
|
59 |
/**/
|
60 |
/* If you add Filters, use a string compatible with PHP's strtotime() function. */
|
61 |
-
$concurrency = apply_filters
|
62 |
/**/
|
63 |
-
$entries = (is_array
|
64 |
/**/
|
65 |
-
foreach
|
66 |
-
if
|
67 |
unset($entries[$_entry]); /* Unset this entry value. */
|
68 |
/**/
|
69 |
-
$ip = ($ip && is_string
|
70 |
-
$entries[$ip] = strtotime
|
71 |
-
set_transient
|
72 |
/**/
|
73 |
-
if
|
74 |
{
|
75 |
-
c_ws_plugin__s2member_no_cache::no_cache_constants
|
76 |
/**/
|
77 |
status_header(503); /* Send a 503 error status header; temporarily unavailable. */
|
78 |
-
wp_clear_auth_cookie
|
79 |
header("Content-Type: text/html; charset=utf-8"); /* Content-Type text/html with UTF-8. */
|
80 |
eval('while (@ob_end_clean ());'); /* End/clean any output buffers that may exist. */
|
81 |
/**/
|
82 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
83 |
-
do_action
|
84 |
-
unset
|
85 |
/**/
|
86 |
exit($msg_503); /* Clean exit with 503 error message. */
|
87 |
}
|
88 |
/**/
|
89 |
-
else if
|
90 |
{
|
91 |
-
c_ws_plugin__s2member_no_cache::no_cache_constants
|
92 |
/**/
|
93 |
set_transient /* A security breach has just occurred. We need to set this Transient now. */
|
94 |
($transient_security_breach, 1, $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"]);
|
95 |
/**/
|
96 |
status_header(503); /* Send a 503 error status header; temporarily unavailable. */
|
97 |
-
wp_clear_auth_cookie
|
98 |
header("Content-Type: text/html; charset=utf-8"); /* Content-Type text/html with UTF-8. */
|
99 |
eval('while (@ob_end_clean ());'); /* End/clean any output buffers that may exist. */
|
100 |
/**/
|
101 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
102 |
-
do_action
|
103 |
-
unset
|
104 |
/**/
|
105 |
exit($msg_503); /* Clean exit with 503 error message. */
|
106 |
}
|
@@ -108,18 +108,18 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
108 |
else /* OK, this looks legitimate. Apply Filters here and return true. */
|
109 |
{
|
110 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
111 |
-
do_action
|
112 |
-
unset
|
113 |
/**/
|
114 |
-
return apply_filters
|
115 |
}
|
116 |
}
|
117 |
/**/
|
118 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
119 |
-
do_action
|
120 |
-
unset
|
121 |
/**/
|
122 |
-
return apply_filters
|
123 |
}
|
124 |
/**
|
125 |
* Queries Transients for specific IP Restrictions associated with a security breach.
|
@@ -130,15 +130,15 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
130 |
* @param str $restriction Unique IP Restriction name/identifier. Such as a Username, or a unique access code.
|
131 |
* @return bool True if the specific IP Restriction is associated with a security breach, else false.
|
132 |
*/
|
133 |
-
public static function specific_ip_restriction_breached_security
|
134 |
{
|
135 |
-
do_action
|
136 |
/**/
|
137 |
$prefix = "s2m_ipr_"; /* s2Member Transient prefix for all IP Restrictions. */
|
138 |
-
$transient_security_breach = $prefix
|
139 |
-
$breached_security = $associated_with_security_breach = (get_transient
|
140 |
/**/
|
141 |
-
return apply_filters
|
142 |
}
|
143 |
/**
|
144 |
* Resets/deletes specific IP Restrictions.
|
@@ -151,22 +151,22 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
151 |
*
|
152 |
* @todo Make return value conditional, based on success.
|
153 |
*/
|
154 |
-
public static function delete_reset_specific_ip_restrictions
|
155 |
{
|
156 |
global $wpdb; /* Need global database object. */
|
157 |
/**/
|
158 |
-
do_action
|
159 |
/**/
|
160 |
$prefix = "s2m_ipr_"; /* s2Member Transient prefix for all IP Restrictions. */
|
161 |
-
$transient_entries = $prefix
|
162 |
-
$transient_security_breach = $prefix
|
163 |
/**/
|
164 |
-
$wpdb->query
|
165 |
-
$wpdb->query
|
166 |
/**/
|
167 |
-
do_action
|
168 |
/**/
|
169 |
-
return apply_filters
|
170 |
}
|
171 |
/**
|
172 |
* Resets/deletes specific IP Restrictions via AJAX.
|
@@ -178,28 +178,28 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
178 |
*
|
179 |
* @return null Exits script execution after returning data for AJAX caller.
|
180 |
*/
|
181 |
-
public static function delete_reset_specific_ip_restrictions_via_ajax
|
182 |
{
|
183 |
-
do_action
|
184 |
/**/
|
185 |
status_header(200); /* Send a 200 OK status header. */
|
186 |
header("Content-Type: text/plain; charset=utf-8"); /* Content-Type with UTF-8. */
|
187 |
eval('while (@ob_end_clean ());'); /* End/clean all output buffers that may exist. */
|
188 |
/**/
|
189 |
-
if
|
190 |
/**/
|
191 |
-
if
|
192 |
-
if
|
193 |
-
if
|
194 |
/**/
|
195 |
-
if
|
196 |
-
if
|
197 |
-
if
|
198 |
/**/
|
199 |
-
if
|
200 |
$success = true; /* Yes, this IP Restriction was deleted/reset. */
|
201 |
/**/
|
202 |
-
exit(apply_filters
|
203 |
}
|
204 |
/**
|
205 |
* Resets/deletes all IP Restrictions.
|
@@ -211,18 +211,18 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
211 |
*
|
212 |
* @todo Make return value conditional, based on success.
|
213 |
*/
|
214 |
-
public static function delete_reset_all_ip_restrictions
|
215 |
{
|
216 |
global $wpdb; /* Need global database object. */
|
217 |
/**/
|
218 |
-
do_action
|
219 |
/**/
|
220 |
-
$wpdb->query
|
221 |
-
$wpdb->query
|
222 |
/**/
|
223 |
-
do_action
|
224 |
/**/
|
225 |
-
return apply_filters
|
226 |
}
|
227 |
/**
|
228 |
* Resets/deletes all IP Restrictions via AJAX.
|
@@ -234,24 +234,24 @@ if (!class_exists ("c_ws_plugin__s2member_ip_restrictions"))
|
|
234 |
*
|
235 |
* @return null Exits script execution after returning data for AJAX caller.
|
236 |
*/
|
237 |
-
public static function delete_reset_all_ip_restrictions_via_ajax
|
238 |
{
|
239 |
-
do_action
|
240 |
/**/
|
241 |
status_header(200); /* Send a 200 OK status header. */
|
242 |
header("Content-Type: text/plain; charset=utf-8"); /* Content-Type with UTF-8. */
|
243 |
eval('while (@ob_end_clean ());'); /* End/clean all output buffers that may exist. */
|
244 |
/**/
|
245 |
-
if
|
246 |
/**/
|
247 |
-
if
|
248 |
-
if
|
249 |
-
if
|
250 |
/**/
|
251 |
-
if
|
252 |
$success = true; /* Yes, all IP Restrictions were deleted/reset. */
|
253 |
/**/
|
254 |
-
exit(apply_filters
|
255 |
}
|
256 |
}
|
257 |
}
|
14 |
* @package s2Member\IP_Restrictions
|
15 |
* @since 3.5
|
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_ip_restrictions"))
|
21 |
{
|
22 |
/**
|
23 |
* IP Restrictions.
|
39 |
* @param str $restriction Unique IP Restriction name/identifier. Such as a Username, or a unique access code.
|
40 |
* @return bool True if IP Restrictions are OK, otherwise this function will exit script execution after issuing a warning.
|
41 |
*/
|
42 |
+
public static function ip_restrictions_ok($ip = FALSE, $restriction = FALSE)
|
43 |
{
|
44 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
45 |
+
do_action("ws_plugin__s2member_before_ip_restrictions_ok", get_defined_vars());
|
46 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
47 |
/**/
|
48 |
+
if(!apply_filters("ws_plugin__s2member_disable_all_ip_restrictions", false, get_defined_vars())
|
49 |
+
/* Also allow specific exclusions here. */ && !apply_filters("ws_plugin__s2member_disable_specific_ip_restriction", false, get_defined_vars())
|
50 |
+
/* And enabled by site owner? */ && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction"] /* And a valid ``$restriction``? */ && $restriction && is_string($restriction)
|
51 |
/* Flag indicating that we ARE processing this IP Restriction. Useful in Hooks/Filters. */ && ($processing = true))
|
52 |
{
|
53 |
+
$msg_503 = _x('<strong>503: Service Temporarily Unavailable</strong><br />Too many IP addresses accessing one secure area<em>!</em><br />Please contact Support if you need assistance.', "s2member-front", "s2member");
|
54 |
/**/
|
55 |
+
$prefix = /* s2Member Transient prefix for all IP Restrictions. Allows s2Member to find these easily. */ "s2m_ipr_";
|
56 |
/**/
|
57 |
+
$transient_entries = $prefix.md5("s2member_ip_restrictions_".$restriction."_entries");
|
58 |
+
$transient_security_breach = $prefix.md5("s2member_ip_restrictions_".$restriction."_security_breach");
|
59 |
/**/
|
60 |
/* If you add Filters, use a string compatible with PHP's strtotime() function. */
|
61 |
+
$concurrency = apply_filters("ws_plugin__s2member_ip_restrictions__concurrency_time_per_ip", "30 days");
|
62 |
/**/
|
63 |
+
$entries = (is_array($entries = get_transient($transient_entries))) ? $entries : array();
|
64 |
/**/
|
65 |
+
foreach($entries as $_entry => $_time) /* Auto-expire entries, based on time. */
|
66 |
+
if($_time < strtotime("-".$concurrency)) /* Based on time. */
|
67 |
unset($entries[$_entry]); /* Unset this entry value. */
|
68 |
/**/
|
69 |
+
$ip = ($ip && is_string($ip)) ? $ip : "empty"; /* Allow empty IPs. */
|
70 |
+
$entries[$ip] = strtotime("now"); /* Log entry. Add IP with entry time. */
|
71 |
+
set_transient($transient_entries, $entries, 2 * (strtotime("+".$concurrency) - strtotime("now")));
|
72 |
/**/
|
73 |
+
if(get_transient($transient_security_breach)) /* Already breached security? */
|
74 |
{
|
75 |
+
c_ws_plugin__s2member_no_cache::no_cache_constants(true);
|
76 |
/**/
|
77 |
status_header(503); /* Send a 503 error status header; temporarily unavailable. */
|
78 |
+
wp_clear_auth_cookie(); /* Clear authorization cookies; we need to log them out now. */
|
79 |
header("Content-Type: text/html; charset=utf-8"); /* Content-Type text/html with UTF-8. */
|
80 |
eval('while (@ob_end_clean ());'); /* End/clean any output buffers that may exist. */
|
81 |
/**/
|
82 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
83 |
+
do_action("ws_plugin__s2member_during_ip_restrictions_ok_no", get_defined_vars());
|
84 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
85 |
/**/
|
86 |
exit($msg_503); /* Clean exit with 503 error message. */
|
87 |
}
|
88 |
/**/
|
89 |
+
else if(count($entries) > $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction"])
|
90 |
{
|
91 |
+
c_ws_plugin__s2member_no_cache::no_cache_constants(true);
|
92 |
/**/
|
93 |
set_transient /* A security breach has just occurred. We need to set this Transient now. */
|
94 |
($transient_security_breach, 1, $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["max_ip_restriction_time"]);
|
95 |
/**/
|
96 |
status_header(503); /* Send a 503 error status header; temporarily unavailable. */
|
97 |
+
wp_clear_auth_cookie(); /* Clear authorization cookies; we need to log them out now. */
|
98 |
header("Content-Type: text/html; charset=utf-8"); /* Content-Type text/html with UTF-8. */
|
99 |
eval('while (@ob_end_clean ());'); /* End/clean any output buffers that may exist. */
|
100 |
/**/
|
101 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
102 |
+
do_action("ws_plugin__s2member_during_ip_restrictions_ok_no", get_defined_vars());
|
103 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
104 |
/**/
|
105 |
exit($msg_503); /* Clean exit with 503 error message. */
|
106 |
}
|
108 |
else /* OK, this looks legitimate. Apply Filters here and return true. */
|
109 |
{
|
110 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
111 |
+
do_action("ws_plugin__s2member_during_ip_restrictions_ok_yes", get_defined_vars());
|
112 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
113 |
/**/
|
114 |
+
return apply_filters("ws_plugin__s2member_ip_restrictions_ok", true, get_defined_vars());
|
115 |
}
|
116 |
}
|
117 |
/**/
|
118 |
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
|
119 |
+
do_action("ws_plugin__s2member_during_ip_restrictions_ok_yes", get_defined_vars());
|
120 |
+
unset($__refs, $__v); /* Unset defined __refs, __v. */
|
121 |
/**/
|
122 |
+
return apply_filters("ws_plugin__s2member_ip_restrictions_ok", true, get_defined_vars());
|
123 |
}
|
124 |
/**
|
125 |
* Queries Transients for specific IP Restrictions associated with a security breach.
|
130 |
* @param str $restriction Unique IP Restriction name/identifier. Such as a Username, or a unique access code.
|
131 |
* @return bool True if the specific IP Restriction is associated with a security breach, else false.
|
132 |
*/
|
133 |
+
public static function specific_ip_restriction_breached_security($restriction = FALSE)
|
134 |
{
|
135 |
+
do_action("ws_plugin__s2member_before_specific_ip_restriction_breached_security", get_defined_vars());
|
136 |
/**/
|
137 |
$prefix = "s2m_ipr_"; /* s2Member Transient prefix for all IP Restrictions. */
|
138 |
+
$transient_security_breach = $prefix.md5("s2member_ip_restrictions_".(string)$restriction."_security_breach");
|
139 |
+
$breached_security = $associated_with_security_breach = (get_transient($transient_security_breach)) ? true : false;
|
140 |
/**/
|
141 |
+
return apply_filters("ws_plugin__s2member_before_specific_ip_restriction_breached_security", $breached_security, get_defined_vars());
|
142 |
}
|
143 |
/**
|
144 |
* Resets/deletes specific IP Restrictions.
|
151 |
*
|
152 |
* @todo Make return value conditional, based on success.
|
153 |
*/
|
154 |
+
public static function delete_reset_specific_ip_restrictions($restriction = FALSE)
|
155 |
{
|
156 |
global $wpdb; /* Need global database object. */
|
157 |
/**/
|
158 |
+
do_action("ws_plugin__s2member_before_delete_reset_specific_ip_restrictions", get_defined_vars());
|
159 |
/**/
|
160 |
$prefix = "s2m_ipr_"; /* s2Member Transient prefix for all IP Restrictions. */
|
161 |
+
$transient_entries = $prefix.md5("s2member_ip_restrictions_".(string)$restriction."_entries");
|
162 |
+
$transient_security_breach = $prefix.md5("s2member_ip_restrictions_".(string)$restriction."_security_breach");
|
163 |
/**/
|
164 |
+
$wpdb->query("DELETE FROM `".$wpdb->options."` WHERE `option_name` LIKE '%".esc_sql(like_escape($transient_entries))."'");
|
165 |
+
$wpdb->query("DELETE FROM `".$wpdb->options."` WHERE `option_name` LIKE '%".esc_sql(like_escape($transient_security_breach))."'");
|
166 |
/**/
|
167 |
+
do_action("ws_plugin__s2member_after_delete_reset_specific_ip_restrictions", get_defined_vars());
|
168 |
/**/
|
169 |
+
return apply_filters("ws_plugin__s2member_delete_reset_specific_ip_restrictions", true, get_defined_vars());
|
170 |
}
|
171 |
/**
|
172 |
* Resets/deletes specific IP Restrictions via AJAX.
|
178 |
*
|
179 |
* @return null Exits script execution after returning data for AJAX caller.
|
180 |
*/
|
181 |
+
public static function delete_reset_specific_ip_restrictions_via_ajax()
|
182 |
{
|
183 |
+
do_action("ws_plugin__s2member_before_delete_reset_specific_ip_restrictions_via_ajax", get_defined_vars());
|
184 |
/**/
|
185 |
status_header(200); /* Send a 200 OK status header. */
|
186 |
header("Content-Type: text/plain; charset=utf-8"); /* Content-Type with UTF-8. */
|
187 |
eval('while (@ob_end_clean ());'); /* End/clean all output buffers that may exist. */
|
188 |
/**/
|
189 |
+
if(current_user_can("create_users")) /* Check priveledges. Ability to create Users? */
|
190 |
/**/
|
191 |
+
if(!empty($_POST["ws_plugin__s2member_delete_reset_specific_ip_restrictions_via_ajax"]))
|
192 |
+
if(($nonce = $_POST["ws_plugin__s2member_delete_reset_specific_ip_restrictions_via_ajax"]))
|
193 |
+
if(wp_verify_nonce($nonce, "ws-plugin--s2member-delete-reset-specific-ip-restrictions-via-ajax"))
|
194 |
/**/
|
195 |
+
if(!empty($_POST["ws_plugin__s2member_delete_reset_specific_ip_restriction"]))
|
196 |
+
if(is_string /* Must be a string here. */($_POST["ws_plugin__s2member_delete_reset_specific_ip_restriction"]))
|
197 |
+
if(($restriction = trim(stripslashes($_POST["ws_plugin__s2member_delete_reset_specific_ip_restriction"]))))
|
198 |
/**/
|
199 |
+
if(c_ws_plugin__s2member_ip_restrictions::delete_reset_specific_ip_restrictions($restriction))
|
200 |
$success = true; /* Yes, this IP Restriction was deleted/reset. */
|
201 |
/**/
|
202 |
+
exit(apply_filters("ws_plugin__s2member_delete_reset_specific_ip_restrictions_via_ajax", ((isset($success) && $success) ? "1" : "0"), get_defined_vars()));
|
203 |
}
|
204 |
/**
|
205 |
* Resets/deletes all IP Restrictions.
|
211 |
*
|
212 |
* @todo Make return value conditional, based on success.
|
213 |
*/
|
214 |
+
public static function delete_reset_all_ip_restrictions()
|
215 |
{
|
216 |
global $wpdb; /* Need global database object. */
|
217 |
/**/
|
218 |
+
do_action("ws_plugin__s2member_before_delete_reset_all_ip_restrictions", get_defined_vars());
|
219 |
/**/
|
220 |
+
$wpdb->query("DELETE FROM `".$wpdb->options."` WHERE `option_name` LIKE '".esc_sql(like_escape("_transient_s2m_ipr_"))."%'");
|
221 |
+
$wpdb->query("DELETE FROM `".$wpdb->options."` WHERE `option_name` LIKE '".esc_sql(like_escape("_transient_timeout_s2m_ipr_"))."%'");
|
222 |
/**/
|
223 |
+
do_action("ws_plugin__s2member_after_delete_reset_all_ip_restrictions", get_defined_vars());
|
224 |
/**/
|
225 |
+
return apply_filters("ws_plugin__s2member_delete_reset_all_ip_restrictions", true, get_defined_vars());
|
226 |
}
|
227 |
/**
|
228 |
* Resets/deletes all IP Restrictions via AJAX.
|
234 |
*
|
235 |
* @return null Exits script execution after returning data for AJAX caller.
|
236 |
*/
|
237 |
+
public static function delete_reset_all_ip_restrictions_via_ajax()
|
238 |
{
|
239 |
+
do_action("ws_plugin__s2member_before_delete_reset_all_ip_restrictions_via_ajax", get_defined_vars());
|
240 |
/**/
|
241 |
status_header(200); /* Send a 200 OK status header. */
|
242 |
header("Content-Type: text/plain; charset=utf-8"); /* Content-Type with UTF-8. */
|
243 |
eval('while (@ob_end_clean ());'); /* End/clean all output buffers that may exist. */
|
244 |
/**/
|
245 |
+
if(current_user_can("create_users")) /* Check priveledges. Ability to create Users? */
|
246 |
/**/
|
247 |
+
if(!empty($_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"]))
|
248 |
+
if(($nonce = $_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"]))
|
249 |
+
if(wp_verify_nonce($nonce, "ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax"))
|
250 |
/**/
|
251 |
+
if(c_ws_plugin__s2member_ip_restrictions::delete_reset_all_ip_restrictions())
|
252 |
$success = true; /* Yes, all IP Restrictions were deleted/reset. */
|
253 |
/**/
|
254 |
+
exit(apply_filters("ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax", ((isset($success) && $success) ? "1" : "0"), get_defined_vars()));
|
255 |
}
|
256 |
}
|
257 |
}
|
includes/classes/paypal-notify-in.inc.php
CHANGED
@@ -150,7 +150,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in"))
|
|
150 |
$paypal["s2member_log"][] = "Unable to verify \$_POST vars. This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility.";
|
151 |
$paypal["s2member_log"][] = "If you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.";
|
152 |
$paypal["s2member_log"][] = "s2Member uses the `WP_Http` class for remote connections; which will try to use `cURL` first, and then fall back on the `FOPEN` method when `cURL` is not available. On a Windows® server, you may have to disable your `cURL` extension; and instead, set `allow_url_fopen = yes` in your php.ini file. The `cURL` extension (usually) does NOT support SSL connections on a Windows® server.";
|
153 |
-
$paypal["s2member_log"][] = "Please see this thread: `http://www.
|
154 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
155 |
}
|
156 |
/**/
|
150 |
$paypal["s2member_log"][] = "Unable to verify \$_POST vars. This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility.";
|
151 |
$paypal["s2member_log"][] = "If you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.";
|
152 |
$paypal["s2member_log"][] = "s2Member uses the `WP_Http` class for remote connections; which will try to use `cURL` first, and then fall back on the `FOPEN` method when `cURL` is not available. On a Windows® server, you may have to disable your `cURL` extension; and instead, set `allow_url_fopen = yes` in your php.ini file. The `cURL` extension (usually) does NOT support SSL connections on a Windows® server.";
|
153 |
+
$paypal["s2member_log"][] = "Please see this thread: `http://www.s2member.com/forums/topic/ideal-server-configuration-for-s2member/` for details regarding the ideal server configuration for s2Member.";
|
154 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
155 |
}
|
156 |
/**/
|
includes/classes/paypal-return-in.inc.php
CHANGED
@@ -123,13 +123,13 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
|
|
123 |
$paypal["s2member_log"][] = "Unable to verify \$_POST vars. This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility.";
|
124 |
$paypal["s2member_log"][] = "If you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.";
|
125 |
$paypal["s2member_log"][] = "s2Member uses the `WP_Http` class for remote connections; which will try to use `cURL` first, and then fall back on the `FOPEN` method when `cURL` is not available. On a Windows® server, you may have to disable your `cURL` extension; and instead, set `allow_url_fopen = yes` in your php.ini file. The `cURL` extension (usually) does NOT support SSL connections on a Windows® server.";
|
126 |
-
$paypal["s2member_log"][] = "Please see this thread: `http://www.
|
127 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
128 |
/**/
|
129 |
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
130 |
/**/
|
131 |
echo c_ws_plugin__s2member_return_templates::return_template ("default",/**/
|
132 |
-
_x ('<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you\'re absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows® server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows® server.<br /><br />Please see <a href="http://www.
|
133 |
_x ("Back To Home Page", "s2member-front", "s2member"), home_url ("/"));
|
134 |
}
|
135 |
/*
|
123 |
$paypal["s2member_log"][] = "Unable to verify \$_POST vars. This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility.";
|
124 |
$paypal["s2member_log"][] = "If you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.";
|
125 |
$paypal["s2member_log"][] = "s2Member uses the `WP_Http` class for remote connections; which will try to use `cURL` first, and then fall back on the `FOPEN` method when `cURL` is not available. On a Windows® server, you may have to disable your `cURL` extension; and instead, set `allow_url_fopen = yes` in your php.ini file. The `cURL` extension (usually) does NOT support SSL connections on a Windows® server.";
|
126 |
+
$paypal["s2member_log"][] = "Please see this thread: `http://www.s2member.com/forums/topic/ideal-server-configuration-for-s2member/` for details regarding the ideal server configuration for s2Member.";
|
127 |
$paypal["s2member_log"][] = var_export ($_REQUEST, true); /* Recording _POST + _GET vars for analysis and debugging. */
|
128 |
/**/
|
129 |
$paypal["s2member_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
|
130 |
/**/
|
131 |
echo c_ws_plugin__s2member_return_templates::return_template ("default",/**/
|
132 |
+
_x ('<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you\'re absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows® server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows® server.<br /><br />Please see <a href="http://www.s2member.com/forums/topic/ideal-server-configuration-for-s2member/" target="_blank">this thread</a> for details regarding the ideal server configuration for s2Member.', "s2member-front", "s2member"),/**/
|
133 |
_x ("Back To Home Page", "s2member-front", "s2member"), home_url ("/"));
|
134 |
}
|
135 |
/*
|
includes/menu-pages/down-ops.inc.php
CHANGED
@@ -175,7 +175,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
175 |
/**/
|
176 |
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
177 |
/**/
|
178 |
-
echo '<p>The function <a href="http://www.
|
179 |
echo '<p><code>s2member_file_download_key("example-file.zip")</code> = a site-specific hash of: <code>date("Y-m-d").$_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_USER_AGENT"].$file</code></p>'."\n";
|
180 |
echo '<p>When <code>s2member_file_download_key = <em>a valid Key</em></code>, it works independently from Member Level Access. That is, a visitor does NOT have to be logged in to receive access; they just need a valid Key. Using this advanced technique, you could extend s2Member\'s file protection routines, or even combine them with Specific Post/Page Access, and more. The possibilities are limitless really.</p>'."\n";
|
181 |
/**/
|
@@ -235,7 +235,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
235 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-remote-authorization-section">'."\n";
|
236 |
echo '<h3>Remote Header Authorization ( optional )</h3>'."\n";
|
237 |
echo '<p>This can be enabled on a case-by-case basis. Just add this to the end of your download links: <code>&s2member_file_remote=yes</code>. Shortcode alternative: <code>[s2File download="example-file.zip" remote="yes" /]</code>.</p>'."\n";
|
238 |
-
echo '<p>Remote Header Authorization allows access to file downloads through an entirely different approach. Instead of asking the Member to log into your site through a browser, a Member will be prompted automatically, to log in through HTTP Header Authorization prompts; which is the same technique used in more traditional security systems via .htaccess files. In other words, Remote Header Authorization makes it possible for your Members to access files through remote applications that may NOT use a browser. This is often the case when a Member needs to access protected files through a software client like iTunes®; typical with podcasts. See <a href="http://www.
|
239 |
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_remote_authorization", get_defined_vars());
|
240 |
echo '</div>'."\n";
|
241 |
/**/
|
@@ -494,13 +494,13 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
494 |
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-standard-mp4" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This does NOT require s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <code>s2Member -> Download Options -> Advanced Mod Rewrite Linkage</code>.<br /><br />'.c_ws_plugin__s2member_utils_strings::highlight_php(file_get_contents(dirname(__FILE__)."/code-samples/jwplayer-standard-mp4.x-php")).'</p>'."\n";
|
495 |
/**/
|
496 |
echo '<p style="font-size:110%;"><a href="#" onclick="jQuery(\'p#ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4\').toggle(); return false;" class="ws-dotted-link">JW Player® ( RTMP streaming MP4, via s2Member\'s Amazon® S3/CloudFront integration )</a></p>'."\n";
|
497 |
-
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This requires s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <a href="http://www.
|
498 |
/**/
|
499 |
echo '<p style="font-size:110%;"><a href="#" onclick="jQuery(\'p#ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-sca\').toggle(); return false;" class="ws-dotted-link">JW Player® ( RTMP streaming MP4, via s2Member\'s JSON/Shortcode alternative )</a></p>'."\n";
|
500 |
-
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-sca" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This requires s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <a href="http://www.
|
501 |
/**/
|
502 |
echo '<p style="font-size:110%;"><a href="#" onclick="jQuery(\'p#ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-webm\').toggle(); return false;" class="ws-dotted-link">JW Player® ( RTMP streaming MP4, advanced w/ multiple HTML5 fallbacks )</a></p>'."\n";
|
503 |
-
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-webm" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This requires s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <a href="http://www.
|
504 |
/**/
|
505 |
echo '</div>'."\n";
|
506 |
/**/
|
@@ -548,7 +548,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
548 |
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
549 |
/**/
|
550 |
echo '<h4 style="margin:0;"><code>[s2File /]</code> Shortcode Attributes:</h4>'."\n";
|
551 |
-
echo '<p style="margin:0;"><strong>See also:</strong> API Function <a href="http://www.
|
552 |
echo '<table class="form-table" style="margin-top:0;">'."\n";
|
553 |
echo '<tbody>'."\n";
|
554 |
echo '<tr style="padding-top:0;">'."\n";
|
@@ -580,7 +580,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
|
|
580 |
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
581 |
/**/
|
582 |
echo '<h4 style="margin:0;"><code>[s2Key /]</code> Shortcode Attributes:</h4>'."\n";
|
583 |
-
echo '<p style="margin:0;"><strong>See also:</strong> API Function <a href="http://www.
|
584 |
echo '<table class="form-table" style="margin-top:0;">'."\n";
|
585 |
echo '<tbody>'."\n";
|
586 |
echo '<tr style="padding-top:0;">'."\n";
|
175 |
/**/
|
176 |
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
177 |
/**/
|
178 |
+
echo '<p>The function <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-functions/#src_doc_s2member_file_download_key()" target="_blank" rel="external">s2member_file_download_key()</a>, is part of the s2Member API. It produces a time-sensitive File Download Key that is unique to each and every visitor. Each Key it produces <em>( at the time it is produced )</em>, will be valid for the current day, and only for a specific IP address and User-Agent string; as detected by s2Member. This makes it possible for you to create links on your site, which provide access to protected file downloads; and without having to worry about one visitor sharing their link with another. So let\'s take a quick look at what <code>s2member_file_download_key()</code> actually produces.</p>'."\n";
|
179 |
echo '<p><code>s2member_file_download_key("example-file.zip")</code> = a site-specific hash of: <code>date("Y-m-d").$_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_USER_AGENT"].$file</code></p>'."\n";
|
180 |
echo '<p>When <code>s2member_file_download_key = <em>a valid Key</em></code>, it works independently from Member Level Access. That is, a visitor does NOT have to be logged in to receive access; they just need a valid Key. Using this advanced technique, you could extend s2Member\'s file protection routines, or even combine them with Specific Post/Page Access, and more. The possibilities are limitless really.</p>'."\n";
|
181 |
/**/
|
235 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-remote-authorization-section">'."\n";
|
236 |
echo '<h3>Remote Header Authorization ( optional )</h3>'."\n";
|
237 |
echo '<p>This can be enabled on a case-by-case basis. Just add this to the end of your download links: <code>&s2member_file_remote=yes</code>. Shortcode alternative: <code>[s2File download="example-file.zip" remote="yes" /]</code>.</p>'."\n";
|
238 |
+
echo '<p>Remote Header Authorization allows access to file downloads through an entirely different approach. Instead of asking the Member to log into your site through a browser, a Member will be prompted automatically, to log in through HTTP Header Authorization prompts; which is the same technique used in more traditional security systems via .htaccess files. In other words, Remote Header Authorization makes it possible for your Members to access files through remote applications that may NOT use a browser. This is often the case when a Member needs to access protected files through a software client like iTunes®; typical with podcasts. See <a href="http://www.s2member.com/videos/71F49478D6983A9C/" target="_blank" rel="external">tutorial video here</a> for details about how to setup a Podcast for iTunes®.</p>'."\n";
|
239 |
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_remote_authorization", get_defined_vars());
|
240 |
echo '</div>'."\n";
|
241 |
/**/
|
494 |
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-standard-mp4" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This does NOT require s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <code>s2Member -> Download Options -> Advanced Mod Rewrite Linkage</code>.<br /><br />'.c_ws_plugin__s2member_utils_strings::highlight_php(file_get_contents(dirname(__FILE__)."/code-samples/jwplayer-standard-mp4.x-php")).'</p>'."\n";
|
495 |
/**/
|
496 |
echo '<p style="font-size:110%;"><a href="#" onclick="jQuery(\'p#ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4\').toggle(); return false;" class="ws-dotted-link">JW Player® ( RTMP streaming MP4, via s2Member\'s Amazon® S3/CloudFront integration )</a></p>'."\n";
|
497 |
+
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This requires s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.<br /><br />'.c_ws_plugin__s2member_utils_strings::highlight_php(file_get_contents(dirname(__FILE__)."/code-samples/jwplayer-streaming-mp4.x-php")).'</p>'."\n";
|
498 |
/**/
|
499 |
echo '<p style="font-size:110%;"><a href="#" onclick="jQuery(\'p#ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-sca\').toggle(); return false;" class="ws-dotted-link">JW Player® ( RTMP streaming MP4, via s2Member\'s JSON/Shortcode alternative )</a></p>'."\n";
|
500 |
+
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-sca" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This requires s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.<br /><br />'.c_ws_plugin__s2member_utils_strings::highlight_php(file_get_contents(dirname(__FILE__)."/code-samples/jwplayer-streaming-mp4-sca.x-php")).'</p>'."\n";
|
501 |
/**/
|
502 |
echo '<p style="font-size:110%;"><a href="#" onclick="jQuery(\'p#ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-webm\').toggle(); return false;" class="ws-dotted-link">JW Player® ( RTMP streaming MP4, advanced w/ multiple HTML5 fallbacks )</a></p>'."\n";
|
503 |
+
echo '<p id="ws-plugin--s2member-rtmp-streaming-details-jwplayer-streaming-mp4-webm" style="display:none;">Download <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">JW Player® here</a>, and upload <code>/jwplayer/</code> to your website\'s root directory.<br />This requires s2Member to be integrated with Amazon® S3/CloudFront.<br />Also see: <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.<br /><br />'.c_ws_plugin__s2member_utils_strings::highlight_php(file_get_contents(dirname(__FILE__)."/code-samples/jwplayer-streaming-mp4-webm.x-php")).'</p>'."\n";
|
504 |
/**/
|
505 |
echo '</div>'."\n";
|
506 |
/**/
|
548 |
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
549 |
/**/
|
550 |
echo '<h4 style="margin:0;"><code>[s2File /]</code> Shortcode Attributes:</h4>'."\n";
|
551 |
+
echo '<p style="margin:0;"><strong>See also:</strong> API Function <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-functions/#src_doc_s2member_file_download_url()" target="_blank" rel="external">s2member_file_download_url()</a> for PHP integration.</p>'."\n";
|
552 |
echo '<table class="form-table" style="margin-top:0;">'."\n";
|
553 |
echo '<tbody>'."\n";
|
554 |
echo '<tr style="padding-top:0;">'."\n";
|
580 |
echo '<div class="ws-menu-page-hr"></div>'."\n";
|
581 |
/**/
|
582 |
echo '<h4 style="margin:0;"><code>[s2Key /]</code> Shortcode Attributes:</h4>'."\n";
|
583 |
+
echo '<p style="margin:0;"><strong>See also:</strong> API Function <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-functions/#src_doc_s2member_file_download_key()" target="_blank" rel="external">s2member_file_download_key()</a> for PHP integration.</p>'."\n";
|
584 |
echo '<table class="form-table" style="margin-top:0;">'."\n";
|
585 |
echo '<tbody>'."\n";
|
586 |
echo '<tr style="padding-top:0;">'."\n";
|
includes/menu-pages/els-ops.inc.php
CHANGED
@@ -119,8 +119,8 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_els_ops"))
|
|
119 |
echo '<a href="http://www.s2member.com/aweber" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/aweber-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
|
120 |
echo '<h3>AWeber® List Server Integration ( optional )</h3>'."\n";
|
121 |
echo '<p>s2Member can be integrated with AWeber®. AWeber® is an email marketing service. Whether you\'re looking to get your first email campaign off the ground, or you\'re a seasoned veteran who wants to dig into advanced tools like detailed email web analytics, activity based segmentation, geo-targeting and broadcast split-testing, AWeber\'s got just what you need to make email marketing work for you.</p>'."\n";
|
122 |
-
echo '<p>You can have your Members automatically subscribed to your AWeber® marketing lists <em>( e.g. newsletters / auto-responders )</em>. You\'ll need an <a href="http://www.s2member.com/aweber" target="_blank" rel="external">AWeber® account</a> and your <a href="#" onclick="alert(\'To obtain your AWeber® List ID(s), log into your AWeber® account. Click on the Lists tab. On that page you\\\'ll find a Unique List ID associated with each of your lists. AWeber® sometimes refers to this as a List Name instead of a List ID.\'); return false;">AWeber® List IDs</a>. You will ALSO need to configure a <a href="http://www.
|
123 |
-
echo '<p>Log into AWeber®, and go to <em>My Lists -> Email Parser</em>. If you like, choose the PayPal® Parser <em>( even if you\'re not using PayPal® as your Payment Gateway )</em>. You can safely ignore the additional instructions they provide. s2Member just needs the PayPal® box checked, and that\'s all. Or, even better, integrate <a href="http://www.
|
124 |
do_action("ws_plugin__s2member_during_els_ops_page_during_left_sections_during_aweber", get_defined_vars());
|
125 |
/**/
|
126 |
echo '<table class="form-table">'."\n";
|
119 |
echo '<a href="http://www.s2member.com/aweber" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/aweber-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
|
120 |
echo '<h3>AWeber® List Server Integration ( optional )</h3>'."\n";
|
121 |
echo '<p>s2Member can be integrated with AWeber®. AWeber® is an email marketing service. Whether you\'re looking to get your first email campaign off the ground, or you\'re a seasoned veteran who wants to dig into advanced tools like detailed email web analytics, activity based segmentation, geo-targeting and broadcast split-testing, AWeber\'s got just what you need to make email marketing work for you.</p>'."\n";
|
122 |
+
echo '<p>You can have your Members automatically subscribed to your AWeber® marketing lists <em>( e.g. newsletters / auto-responders )</em>. You\'ll need an <a href="http://www.s2member.com/aweber" target="_blank" rel="external">AWeber® account</a> and your <a href="#" onclick="alert(\'To obtain your AWeber® List ID(s), log into your AWeber® account. Click on the Lists tab. On that page you\\\'ll find a Unique List ID associated with each of your lists. AWeber® sometimes refers to this as a List Name instead of a List ID.\'); return false;">AWeber® List IDs</a>. You will ALSO need to configure a <a href="http://www.s2member.com/kb/aweber-email-parser-for-s2member/" target="_blank" rel="external">Custom Email Parser</a> inside your AWeber® account.</p>'."\n";
|
123 |
+
echo '<p>Log into AWeber®, and go to <em>My Lists -> Email Parser</em>. If you like, choose the PayPal® Parser <em>( even if you\'re not using PayPal® as your Payment Gateway )</em>. You can safely ignore the additional instructions they provide. s2Member just needs the PayPal® box checked, and that\'s all. Or, even better, integrate <a href="http://www.s2member.com/kb/aweber-email-parser-for-s2member/" target="_blank" rel="external">s2Member\'s Custom Email Parser</a> for AWeber, which <strong>will improve reliability</strong> and flexibility.</p>'."\n";
|
124 |
do_action("ws_plugin__s2member_during_els_ops_page_during_left_sections_during_aweber", get_defined_vars());
|
125 |
/**/
|
126 |
echo '<table class="form-table">'."\n";
|
includes/menu-pages/gen-ops.inc.php
CHANGED
@@ -551,7 +551,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
|
|
551 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-levels-section">' . "\n";
|
552 |
echo '<h3>Membership Levels ( required, please customize these )</h3>' . "\n";
|
553 |
echo '<p>The default Membership Levels are labeled generically; feel free to modify them as needed. s2Member supports Free Subscribers <em>( at Level #0 )</em>, along with several Primary Roles for paid Membership <em>( i.e. Levels 1-4 )</em>, created by the s2Member plugin.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' s2Member also supports unlimited Custom Capability Packages <em>( see <code>s2Member -> API Scripting -> Custom Capabilities</code> )</em>' : '') . '. That being said, you don\'t have to use all of the Membership Levels if you don\'t want to. To use only 1 or 2 of these Levels, just design your Membership Options Page, so it only includes Payment Buttons for the Levels being used.</p>' . "\n";
|
554 |
-
echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><em><strong>TIP:</strong> <strong>Unlimited Membership Levels</strong> are only possible with <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro</a>. However, Custom Capabilities are possible in all versions of s2Member, including the free version. Custom Capabilities are a great way to extend s2Member in creative ways. If you\'re an advanced site owner, a theme designer, or a web developer integrating s2Member for a client, please check your Dashboard, under: <code>s2Member -> API Scripting -> Custom Capabilities</code>. We also recommend the <a href="http://www.
|
555 |
do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_membership_levels", get_defined_vars ());
|
556 |
/**/
|
557 |
echo '<table class="form-table">' . "\n";
|
551 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-levels-section">' . "\n";
|
552 |
echo '<h3>Membership Levels ( required, please customize these )</h3>' . "\n";
|
553 |
echo '<p>The default Membership Levels are labeled generically; feel free to modify them as needed. s2Member supports Free Subscribers <em>( at Level #0 )</em>, along with several Primary Roles for paid Membership <em>( i.e. Levels 1-4 )</em>, created by the s2Member plugin.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' s2Member also supports unlimited Custom Capability Packages <em>( see <code>s2Member -> API Scripting -> Custom Capabilities</code> )</em>' : '') . '. That being said, you don\'t have to use all of the Membership Levels if you don\'t want to. To use only 1 or 2 of these Levels, just design your Membership Options Page, so it only includes Payment Buttons for the Levels being used.</p>' . "\n";
|
554 |
+
echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><em><strong>TIP:</strong> <strong>Unlimited Membership Levels</strong> are only possible with <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro</a>. However, Custom Capabilities are possible in all versions of s2Member, including the free version. Custom Capabilities are a great way to extend s2Member in creative ways. If you\'re an advanced site owner, a theme designer, or a web developer integrating s2Member for a client, please check your Dashboard, under: <code>s2Member -> API Scripting -> Custom Capabilities</code>. We also recommend the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.</em></p>' . "\n" : '';
|
555 |
do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_membership_levels", get_defined_vars ());
|
556 |
/**/
|
557 |
echo '<table class="form-table">' . "\n";
|
includes/menu-pages/res-ops.inc.php
CHANGED
@@ -56,7 +56,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_res_ops"))
|
|
56 |
echo '<p>Here you can specify Posts that are restricted to certain Membership Access Levels. s2Member also supports Custom <a href="http://codex.wordpress.org/Post_Types" target="_blank" rel="external">Post Types</a> here. If you have a theme or plugin installed, which has enabled Custom Post Types <em>( i.e. Music/Videos or something else )</em>, you can put the IDs for those Posts here.</p>' . "\n";
|
57 |
echo '<p><em><strong>*Note*</strong> Protecting individual Posts, ONLY protects the Permalinks for those Posts. It is still possible for excerpts of protected content to be seen in search results generated by WordPress®, feeds, and Archive views; such as your Home Page, inside a Category listing, or through other queries formulated by your theme. This is the intended functionality. Excerpts are a great way to "tease" public visitors. In other words, public visitors may have access to excerpts introduced by your theme, but any attempt to view the full Post ( i.e. the Permalink ) will result in an automatic redirect to your Membership Options Page; requiring registration.</em></p>' . "\n";
|
58 |
echo '<p><em><strong>*Note*</strong> If you would like to protect many Posts at once ( including Archive views ), you can use Category Level Restrictions, Tag Level Restrictions, or have a look down below at s2Member\'s options for "Alternative View Protection", which deals with search results, as well as feeds.</em></p>' . "\n";
|
59 |
-
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Post IDs? Get <a href="http://
|
60 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_post_level_access", get_defined_vars ());
|
61 |
/**/
|
62 |
echo '<table class="form-table">' . "\n";
|
@@ -103,7 +103,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_res_ops"))
|
|
103 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-page-level-access-section">' . "\n";
|
104 |
echo '<h3>Page Level Access Restrictions ( optional )</h3>' . "\n";
|
105 |
echo '<p>Here you can specify Pages that are restricted to certain Membership Access Levels.</p>' . "\n";
|
106 |
-
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Page IDs? Get <a href="http://
|
107 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_page_level_access", get_defined_vars ());
|
108 |
/**/
|
109 |
echo '<table class="form-table">' . "\n";
|
@@ -193,7 +193,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_res_ops"))
|
|
193 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-category-level-access-section">' . "\n";
|
194 |
echo '<h3>Category Level Access Restrictions ( optional )</h3>' . "\n";
|
195 |
echo '<p>Here you can specify Categories that are restricted to certain Membership Access Levels. Category restrictions are a bit more complex. When you restrict access to a Category, it also restricts access to any child Categories it may have <em>( aka: sub-Categories )</em>. In other words, restricting a Category, protects a Category Archive, all of its child Category Archives, and any Posts contained within the Category, or its child Categories. This is a VERY powerful form of protection, so please be careful. It\'s very easy to protect too much content by accident.</p>' . "\n";
|
196 |
-
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Category IDs? Get <a href="http://
|
197 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_category_level_access", get_defined_vars ());
|
198 |
/**/
|
199 |
echo '<table class="form-table">' . "\n";
|
@@ -311,7 +311,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_res_ops"))
|
|
311 |
echo '<strong>Attn Developers:</strong> Filters can be suppressed dynamically, using this technique:<br />' . "\n";
|
312 |
echo '<code><a href="http://codex.wordpress.org/Function_Reference/query_posts" target="_blank" rel="external">query_posts</a>("suppress_filters=true");</code><br />' . "\n";
|
313 |
echo '<code><a href="http://codex.wordpress.org/Function_Reference/get_posts" target="_blank" rel="external">get_posts</a>()</code> auto-suppresses filters.<br />' . "\n";
|
314 |
-
echo 'Also see <a href="http://www.
|
315 |
echo '</td>' . "\n";
|
316 |
/**/
|
317 |
echo '</tr>' . "\n";
|
@@ -336,7 +336,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_res_ops"))
|
|
336 |
echo '<p>In other words, Customers will NOT need to login, just to receive access to the Specific Post/Page they purchased access to. s2Member will immediately redirect the Customer to the Specific Post/Page after checkout is completed successfully. An email is also sent to the Customer with a link ( see: <code>s2Member -> PayPal® Options -> Specific Post/Page Email</code> ). Authentication is handled automatically through self-expiring links, good for 72 hours by default.</p>' . "\n";
|
337 |
echo '<p>Specific Post/Page Access, is sort of like selling a product. Only, instead of shipping anything to the Customer, you just give them access to a specific Post/Page on your site; one that you created in WordPress®. A Specific Post/Page that is protected by s2Member, might contain a download link for your eBook, access to file & music downloads, access to additional support services, and the list goes on and on. The possibilities with this are endless; as long as your digital product can be delivered through access to a WordPress® Post/Page that you\'ve created.</p>' . "\n";
|
338 |
echo '<p>Very simple. All you do is protect the Specific Post/Page IDs that are being sold on your site. Then, you can go to <code>s2Member -> PayPal® Buttons -> Specific Post/Page</code> to generate "Buy Now" Buttons that you can insert into your WordPress® Editor, and make available on your site. The Button Generator for s2Member, will even let you Package Additional Posts/Pages together into one transaction.</p>' . "\n";
|
339 |
-
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Post/Page IDs? Get <a href="http://
|
340 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_sp_access", get_defined_vars ());
|
341 |
/**/
|
342 |
echo '<table class="form-table">' . "\n";
|
56 |
echo '<p>Here you can specify Posts that are restricted to certain Membership Access Levels. s2Member also supports Custom <a href="http://codex.wordpress.org/Post_Types" target="_blank" rel="external">Post Types</a> here. If you have a theme or plugin installed, which has enabled Custom Post Types <em>( i.e. Music/Videos or something else )</em>, you can put the IDs for those Posts here.</p>' . "\n";
|
57 |
echo '<p><em><strong>*Note*</strong> Protecting individual Posts, ONLY protects the Permalinks for those Posts. It is still possible for excerpts of protected content to be seen in search results generated by WordPress®, feeds, and Archive views; such as your Home Page, inside a Category listing, or through other queries formulated by your theme. This is the intended functionality. Excerpts are a great way to "tease" public visitors. In other words, public visitors may have access to excerpts introduced by your theme, but any attempt to view the full Post ( i.e. the Permalink ) will result in an automatic redirect to your Membership Options Page; requiring registration.</em></p>' . "\n";
|
58 |
echo '<p><em><strong>*Note*</strong> If you would like to protect many Posts at once ( including Archive views ), you can use Category Level Restrictions, Tag Level Restrictions, or have a look down below at s2Member\'s options for "Alternative View Protection", which deals with search results, as well as feeds.</em></p>' . "\n";
|
59 |
+
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Post IDs? Get <a href="http://wordpress.org/extend/plugins/wp-show-ids/" target="_blank" rel="external">WP Show IDs</a>.</em></p>' . "\n" : '';
|
60 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_post_level_access", get_defined_vars ());
|
61 |
/**/
|
62 |
echo '<table class="form-table">' . "\n";
|
103 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-page-level-access-section">' . "\n";
|
104 |
echo '<h3>Page Level Access Restrictions ( optional )</h3>' . "\n";
|
105 |
echo '<p>Here you can specify Pages that are restricted to certain Membership Access Levels.</p>' . "\n";
|
106 |
+
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Page IDs? Get <a href="http://wordpress.org/extend/plugins/wp-show-ids/" target="_blank" rel="external">WP Show IDs</a>.</em></p>' . "\n" : '';
|
107 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_page_level_access", get_defined_vars ());
|
108 |
/**/
|
109 |
echo '<table class="form-table">' . "\n";
|
193 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-category-level-access-section">' . "\n";
|
194 |
echo '<h3>Category Level Access Restrictions ( optional )</h3>' . "\n";
|
195 |
echo '<p>Here you can specify Categories that are restricted to certain Membership Access Levels. Category restrictions are a bit more complex. When you restrict access to a Category, it also restricts access to any child Categories it may have <em>( aka: sub-Categories )</em>. In other words, restricting a Category, protects a Category Archive, all of its child Category Archives, and any Posts contained within the Category, or its child Categories. This is a VERY powerful form of protection, so please be careful. It\'s very easy to protect too much content by accident.</p>' . "\n";
|
196 |
+
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Category IDs? Get <a href="http://wordpress.org/extend/plugins/wp-show-ids/" target="_blank" rel="external">WP Show IDs</a>.</em></p>' . "\n" : '';
|
197 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_category_level_access", get_defined_vars ());
|
198 |
/**/
|
199 |
echo '<table class="form-table">' . "\n";
|
311 |
echo '<strong>Attn Developers:</strong> Filters can be suppressed dynamically, using this technique:<br />' . "\n";
|
312 |
echo '<code><a href="http://codex.wordpress.org/Function_Reference/query_posts" target="_blank" rel="external">query_posts</a>("suppress_filters=true");</code><br />' . "\n";
|
313 |
echo '<code><a href="http://codex.wordpress.org/Function_Reference/get_posts" target="_blank" rel="external">get_posts</a>()</code> auto-suppresses filters.<br />' . "\n";
|
314 |
+
echo 'Also see <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-functions/#src_doc_attach_s2member_query_filters()" target="_blank" rel="external">this article</a> in the s2Member® Codex.' . "\n";
|
315 |
echo '</td>' . "\n";
|
316 |
/**/
|
317 |
echo '</tr>' . "\n";
|
336 |
echo '<p>In other words, Customers will NOT need to login, just to receive access to the Specific Post/Page they purchased access to. s2Member will immediately redirect the Customer to the Specific Post/Page after checkout is completed successfully. An email is also sent to the Customer with a link ( see: <code>s2Member -> PayPal® Options -> Specific Post/Page Email</code> ). Authentication is handled automatically through self-expiring links, good for 72 hours by default.</p>' . "\n";
|
337 |
echo '<p>Specific Post/Page Access, is sort of like selling a product. Only, instead of shipping anything to the Customer, you just give them access to a specific Post/Page on your site; one that you created in WordPress®. A Specific Post/Page that is protected by s2Member, might contain a download link for your eBook, access to file & music downloads, access to additional support services, and the list goes on and on. The possibilities with this are endless; as long as your digital product can be delivered through access to a WordPress® Post/Page that you\'ve created.</p>' . "\n";
|
338 |
echo '<p>Very simple. All you do is protect the Specific Post/Page IDs that are being sold on your site. Then, you can go to <code>s2Member -> PayPal® Buttons -> Specific Post/Page</code> to generate "Buy Now" Buttons that you can insert into your WordPress® Editor, and make available on your site. The Button Generator for s2Member, will even let you Package Additional Posts/Pages together into one transaction.</p>' . "\n";
|
339 |
+
echo ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) && !$GLOBALS["WS_PLUGIN__"]["wp_show_ids"]) ? '<p><em><strong>*Tip*</strong> Can\'t find your Post/Page IDs? Get <a href="http://wordpress.org/extend/plugins/wp-show-ids/" target="_blank" rel="external">WP Show IDs</a>.</em></p>' . "\n" : '';
|
340 |
do_action ("ws_plugin__s2member_during_res_ops_page_during_left_sections_during_sp_access", get_defined_vars ());
|
341 |
/**/
|
342 |
echo '<table class="form-table">' . "\n";
|
includes/menu-pages/scripting.inc.php
CHANGED
@@ -136,8 +136,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
136 |
/**/
|
137 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
138 |
/**/
|
139 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
140 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
141 |
/**/
|
142 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
143 |
/**/
|
@@ -208,8 +208,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
208 |
/**/
|
209 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
210 |
/**/
|
211 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
212 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
213 |
/**/
|
214 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
215 |
/**/
|
@@ -277,8 +277,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
277 |
/**/
|
278 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
279 |
/**/
|
280 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
281 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
282 |
/**/
|
283 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
284 |
/**/
|
@@ -336,8 +336,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
336 |
/**/
|
337 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
338 |
/**/
|
339 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
340 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
341 |
echo '<strong>See Also:</strong> <a href="http://wordpress.org/extend/plugins/user-role-editor/" target="_blank" rel="external">Plugins -> User Role Editor</a> <em>( may come in handy for some )</em>.</p>' . "\n";
|
342 |
/**/
|
343 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
@@ -368,8 +368,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
368 |
/**/
|
369 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
370 |
/**/
|
371 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
372 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
373 |
/**/
|
374 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
375 |
/**/
|
@@ -408,8 +408,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
408 |
/**/
|
409 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
410 |
/**/
|
411 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
412 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
413 |
/**/
|
414 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
415 |
/**/
|
@@ -713,8 +713,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
713 |
/**/
|
714 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
715 |
/**/
|
716 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
717 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
718 |
/**/
|
719 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
720 |
/**/
|
@@ -1026,8 +1026,8 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
1026 |
/**/
|
1027 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
1028 |
/**/
|
1029 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
1030 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
1031 |
/**/
|
1032 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
1033 |
/**/
|
@@ -1058,13 +1058,13 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_scripting"))
|
|
1058 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-api-hooks-section">' . "\n";
|
1059 |
echo '<h3>WP® Hooks For Theme/Plugin Developers ( scripting required )</h3>' . "\n";
|
1060 |
echo '<p>In addition to its API Constants, s2Member also makes several Hooks/Filters available throughout its framework. This makes it possible to build onto <em>( or even modify )</em> s2Member in lots of different ways. If you need to add custom processing routines, modify the behavior of existing processing routines, or tinker with things otherwise; you should use API Hooks/Filters. API Hooks & Filters, give you the ability to "hook into", and/or "filter" processing routines, with files/functions of your own; instead of editing the s2Member plugin files directly. If you don\'t use a Hook/Filter, and instead, you edit the plugin files for s2Member, you\'ll have to merge all of your changes every time a new version of s2Member is released. If you create custom processing routines, you could place those routines into a PHP file here: <code>/wp-content/mu-plugins/s2-hacks.php</code>. If you don\'t have an <code>/mu-plugins/</code> directory, please create one. These are <em>(mu)</em> <a href="http://codex.wordpress.org/Must_Use_Plugins" target="_blank" rel="external">MUST USE plugins</a>, which are loaded into WordPress® automatically; that\'s what you want!</p>' . "\n";
|
1061 |
-
echo '<p><strong>Attn Developers:</strong> There are simply too many Hooks/Filters spread throughout s2Member\'s framework <em>( over 1000 total )</em>. Rather than documenting each Hook/Filter, it is easier to browse through the files inside: <code>/s2member/includes/classes/</code>. Inspecting Hooks/Filters in this way, also leads you to a better understanding of how they work. One way to save time, is to run a search for <code>do_action</code> and/or <code>apply_filters</code>. If you\'re new to the concept of Hooks/Filters for WordPress/s2Member, we suggest <a href="http://www.
|
1062 |
do_action ("ws_plugin__s2member_during_scripting_page_during_left_sections_during_api_hooks", get_defined_vars ());
|
1063 |
/**/
|
1064 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
1065 |
/**/
|
1066 |
-
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.
|
1067 |
-
echo '<strong>See Also:</strong> <a href="http://www.
|
1068 |
echo '</div>' . "\n";
|
1069 |
/**/
|
1070 |
echo '</div>' . "\n";
|
136 |
/**/
|
137 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
138 |
/**/
|
139 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
140 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
141 |
/**/
|
142 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
143 |
/**/
|
208 |
/**/
|
209 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
210 |
/**/
|
211 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
212 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
213 |
/**/
|
214 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
215 |
/**/
|
277 |
/**/
|
278 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
279 |
/**/
|
280 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
281 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
282 |
/**/
|
283 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
284 |
/**/
|
336 |
/**/
|
337 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
338 |
/**/
|
339 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
340 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.<br />' . "\n";
|
341 |
echo '<strong>See Also:</strong> <a href="http://wordpress.org/extend/plugins/user-role-editor/" target="_blank" rel="external">Plugins -> User Role Editor</a> <em>( may come in handy for some )</em>.</p>' . "\n";
|
342 |
/**/
|
343 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
368 |
/**/
|
369 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
370 |
/**/
|
371 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
372 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
373 |
/**/
|
374 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
375 |
/**/
|
408 |
/**/
|
409 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
410 |
/**/
|
411 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
412 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
413 |
/**/
|
414 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
415 |
/**/
|
713 |
/**/
|
714 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
715 |
/**/
|
716 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
717 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
718 |
/**/
|
719 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
720 |
/**/
|
1026 |
/**/
|
1027 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
1028 |
/**/
|
1029 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
1030 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
1031 |
/**/
|
1032 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
1033 |
/**/
|
1058 |
echo '<div class="ws-menu-page-section ws-plugin--s2member-api-hooks-section">' . "\n";
|
1059 |
echo '<h3>WP® Hooks For Theme/Plugin Developers ( scripting required )</h3>' . "\n";
|
1060 |
echo '<p>In addition to its API Constants, s2Member also makes several Hooks/Filters available throughout its framework. This makes it possible to build onto <em>( or even modify )</em> s2Member in lots of different ways. If you need to add custom processing routines, modify the behavior of existing processing routines, or tinker with things otherwise; you should use API Hooks/Filters. API Hooks & Filters, give you the ability to "hook into", and/or "filter" processing routines, with files/functions of your own; instead of editing the s2Member plugin files directly. If you don\'t use a Hook/Filter, and instead, you edit the plugin files for s2Member, you\'ll have to merge all of your changes every time a new version of s2Member is released. If you create custom processing routines, you could place those routines into a PHP file here: <code>/wp-content/mu-plugins/s2-hacks.php</code>. If you don\'t have an <code>/mu-plugins/</code> directory, please create one. These are <em>(mu)</em> <a href="http://codex.wordpress.org/Must_Use_Plugins" target="_blank" rel="external">MUST USE plugins</a>, which are loaded into WordPress® automatically; that\'s what you want!</p>' . "\n";
|
1061 |
+
echo '<p><strong>Attn Developers:</strong> There are simply too many Hooks/Filters spread throughout s2Member\'s framework <em>( over 1000 total )</em>. Rather than documenting each Hook/Filter, it is easier to browse through the files inside: <code>/s2member/includes/classes/</code>. Inspecting Hooks/Filters in this way, also leads you to a better understanding of how they work. One way to save time, is to run a search for <code>do_action</code> and/or <code>apply_filters</code>. If you\'re new to the concept of Hooks/Filters for WordPress/s2Member, we suggest <a href="http://www.s2member.com/codex/#src_doc_overview_description" target="_blank" rel="external">this article</a> as a primer. The <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a> also contains information about all Hooks/Filters that come with s2Member.</p>' . "\n";
|
1062 |
do_action ("ws_plugin__s2member_during_scripting_page_during_left_sections_during_api_hooks", get_defined_vars ());
|
1063 |
/**/
|
1064 |
echo '<div class="ws-menu-page-hr"></div>' . "\n";
|
1065 |
/**/
|
1066 |
+
echo '<p><strong>TIP:</strong> In addition to this documentation, you may also want to have a look at the <a href="http://www.s2member.com/codex/" target="_blank" rel="external">s2Member Codex</a>.<br />' . "\n";
|
1067 |
+
echo '<strong>See Also:</strong> <a href="http://www.s2member.com/codex/stable/s2member/api_constants/package-summary/" target="_blank" rel="external">s2Member Codex -> API Constants</a>, and <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/" target="_blank" rel="external">s2Member Codex -> API Functions</a>.</p>' . "\n";
|
1068 |
echo '</div>' . "\n";
|
1069 |
/**/
|
1070 |
echo '</div>' . "\n";
|
includes/s2member.css
CHANGED
@@ -18,10 +18,6 @@ Structural styles for s2Member Security Badge.
|
|
18 |
|
19 |
These are basic CSS rules. You can override any of these
|
20 |
through the `/style.css` file for your WordPress® theme.
|
21 |
-
|
22 |
-
If you're using a `PriMo Theme`, you can use:
|
23 |
-
PriMoTheme Options -> Custom CSS
|
24 |
-
See: http://www.primothemes.com/
|
25 |
*/
|
26 |
div.ws-plugin--s2member-s-badge
|
27 |
{
|
@@ -33,10 +29,6 @@ Structural styles for Password strength indicators.
|
|
33 |
|
34 |
These are basic CSS rules. You can override any of these
|
35 |
through the `/style.css` file for your WordPress® theme.
|
36 |
-
|
37 |
-
If you're using a `PriMo Theme`, you can use:
|
38 |
-
PriMoTheme Options -> Custom CSS
|
39 |
-
See: http://www.primothemes.com/
|
40 |
*/
|
41 |
div.ws-plugin--s2member-password-strength
|
42 |
{
|
@@ -73,10 +65,6 @@ Structural styles for Multisite Integration Forms.
|
|
73 |
|
74 |
These are basic CSS rules. You can override any of these
|
75 |
through the `/style.css` file for your WordPress® theme.
|
76 |
-
|
77 |
-
If you're using a `PriMo Theme`, you can use:
|
78 |
-
PriMoTheme Options -> Custom CSS
|
79 |
-
See: http://www.primothemes.com/
|
80 |
*/
|
81 |
div#content > div.mu_register,
|
82 |
div#content > div.mu_register h2
|
@@ -155,10 +143,6 @@ Structural styles for Return Pages.
|
|
155 |
|
156 |
These are basic CSS rules. You can override any of these
|
157 |
through the `/style.css` file for your WordPress® theme.
|
158 |
-
|
159 |
-
If you're using a `PriMo Theme`, you can use:
|
160 |
-
PriMoTheme Options -> Custom CSS
|
161 |
-
See: http://www.primothemes.com/
|
162 |
*/
|
163 |
body.s2member-return-body
|
164 |
{
|
@@ -263,10 +247,6 @@ Structural styles for Shortcode Profile Editing panel.
|
|
263 |
|
264 |
These are basic CSS rules. You can override any of these
|
265 |
through the `/style.css` file for your WordPress® theme.
|
266 |
-
|
267 |
-
If you're using a `PriMo Theme`, you can use:
|
268 |
-
PriMoTheme Options -> Custom CSS
|
269 |
-
See: http://www.primothemes.com/
|
270 |
*/
|
271 |
div#ws-plugin--s2member-profile-saved
|
272 |
{
|
@@ -348,10 +328,6 @@ Structural styles for BuddyPress Profile Field items.
|
|
348 |
|
349 |
These are basic CSS rules. You can override any of these
|
350 |
through the `/style.css` file for your WordPress® theme.
|
351 |
-
|
352 |
-
If you're using a `PriMo Theme`, you can use:
|
353 |
-
PriMoTheme Options -> Custom CSS
|
354 |
-
See: http://www.primothemes.com/
|
355 |
*/
|
356 |
body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section
|
357 |
{
|
@@ -372,10 +348,6 @@ Structural styles for BuddyPress Registration Fields.
|
|
372 |
|
373 |
These are basic CSS rules. You can override any of these
|
374 |
through the `/style.css` file for your WordPress® theme.
|
375 |
-
|
376 |
-
If you're using a `PriMo Theme`, you can use:
|
377 |
-
PriMoTheme Options -> Custom CSS
|
378 |
-
See: http://www.primothemes.com/
|
379 |
*/
|
380 |
body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section
|
381 |
{
|
@@ -437,10 +409,6 @@ Structural styles for BuddyPress Profile Field integrations.
|
|
437 |
|
438 |
These are basic CSS rules. You can override any of these
|
439 |
through the `/style.css` file for your WordPress® theme.
|
440 |
-
|
441 |
-
If you're using a `PriMo Theme`, you can use:
|
442 |
-
PriMoTheme Options -> Custom CSS
|
443 |
-
See: http://www.primothemes.com/
|
444 |
*/
|
445 |
body.logged-in.profile.profile-edit form#profile-edit-form div.editfield input[type="text"],
|
446 |
body.logged-in.profile.profile-edit form#profile-edit-form div.editfield input[type="email"],
|
18 |
|
19 |
These are basic CSS rules. You can override any of these
|
20 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
21 |
*/
|
22 |
div.ws-plugin--s2member-s-badge
|
23 |
{
|
29 |
|
30 |
These are basic CSS rules. You can override any of these
|
31 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
32 |
*/
|
33 |
div.ws-plugin--s2member-password-strength
|
34 |
{
|
65 |
|
66 |
These are basic CSS rules. You can override any of these
|
67 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
68 |
*/
|
69 |
div#content > div.mu_register,
|
70 |
div#content > div.mu_register h2
|
143 |
|
144 |
These are basic CSS rules. You can override any of these
|
145 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
146 |
*/
|
147 |
body.s2member-return-body
|
148 |
{
|
247 |
|
248 |
These are basic CSS rules. You can override any of these
|
249 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
250 |
*/
|
251 |
div#ws-plugin--s2member-profile-saved
|
252 |
{
|
328 |
|
329 |
These are basic CSS rules. You can override any of these
|
330 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
331 |
*/
|
332 |
body.profile.public div.ws-plugin--s2member-profile-field-4bp-divider-section
|
333 |
{
|
348 |
|
349 |
These are basic CSS rules. You can override any of these
|
350 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
351 |
*/
|
352 |
body.registration form div#ws-plugin--s2member-custom-reg-fields-4bp-section
|
353 |
{
|
409 |
|
410 |
These are basic CSS rules. You can override any of these
|
411 |
through the `/style.css` file for your WordPress® theme.
|
|
|
|
|
|
|
|
|
412 |
*/
|
413 |
body.logged-in.profile.profile-edit form#profile-edit-form div.editfield input[type="text"],
|
414 |
body.logged-in.profile.profile-edit form#profile-edit-form div.editfield input[type="email"],
|
includes/templates/cfg-files/s2member-files-no-gzip.php
CHANGED
@@ -11,7 +11,7 @@ $ws_plugin__s2member_temp_s_base = (!empty ($base)) ? $base : c_ws_plugin__s2mem
|
|
11 |
<IfModule mod_rewrite.c>
|
12 |
RewriteEngine On
|
13 |
RewriteBase <?php echo $ws_plugin__s2member_temp_s_base . "\n"; ?>
|
14 |
-
RewriteCond %{QUERY_STRING} (
|
15 |
RewriteRule .* - [E=no-gzip:1]
|
16 |
</IfModule>
|
17 |
|
11 |
<IfModule mod_rewrite.c>
|
12 |
RewriteEngine On
|
13 |
RewriteBase <?php echo $ws_plugin__s2member_temp_s_base . "\n"; ?>
|
14 |
+
RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+
|
15 |
RewriteRule .* - [E=no-gzip:1]
|
16 |
</IfModule>
|
17 |
|
includes/translations/s2member.pot
CHANGED
@@ -4,7 +4,7 @@ msgid ""
|
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: s2Member® Framework 120213\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/__s2member\n"
|
7 |
-
"POT-Creation-Date: 2012-02-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -652,7 +652,7 @@ msgstr ""
|
|
652 |
|
653 |
#: s2member/includes/classes/paypal-return-in.inc.php:132
|
654 |
msgctxt "s2member-front"
|
655 |
-
msgid "<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows® server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows® server.<br /><br />Please see <a href=\"http://www.
|
656 |
msgstr ""
|
657 |
|
658 |
#. translators: Exclude `%2$s` and `%3$s`. These are English details returned
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: s2Member® Framework 120213\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/__s2member\n"
|
7 |
+
"POT-Creation-Date: 2012-02-19 18:06:50+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
652 |
|
653 |
#: s2member/includes/classes/paypal-return-in.inc.php:132
|
654 |
msgctxt "s2member-front"
|
655 |
+
msgid "<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows® server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows® server.<br /><br />Please see <a href=\"http://www.s2member.com/forums/topic/ideal-server-configuration-for-s2member/\" target=\"_blank\">this thread</a> for details regarding the ideal server configuration for s2Member."
|
656 |
msgstr ""
|
657 |
|
658 |
#. translators: Exclude `%2$s` and `%3$s`. These are English details returned
|
includes/translations/translators.txt
CHANGED
@@ -8,6 +8,6 @@ Like WordPress® itself, we chose to use the GNU `gettext` localization framewor
|
|
8 |
|
9 |
The file: `/s2member/includes/translations/s2member.pot` will be updated with each new release of s2Member.
|
10 |
|
11 |
-
If this is your first translation of a WordPress® plugin, [this article](http://codex.wordpress.org/Translating_WordPress#Localization_Technology) and/or [this article](http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/), might be of some assistance. When you are finished translating the `s2member.pot` file, place your completed `s2member-[locale].mo` file into this directory: `/wp-content/plugins/`; and please feel free to [share your translation](http://www.
|
12 |
|
13 |
Quick Tip: If you only need to translate the front-end of s2Member, please ignore entries in the `s2member.pot` file with a context matching `s2member-admin`. Those sections of s2Member are only seen by site Administrators; they are NOT used in s2Member's front-end integration with WordPress®. Skipping over translation entries with a context matching `s2member-admin` can save you time.
|
8 |
|
9 |
The file: `/s2member/includes/translations/s2member.pot` will be updated with each new release of s2Member.
|
10 |
|
11 |
+
If this is your first translation of a WordPress® plugin, [this article](http://codex.wordpress.org/Translating_WordPress#Localization_Technology) and/or [this article](http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/), might be of some assistance. When you are finished translating the `s2member.pot` file, place your completed `s2member-[locale].mo` file into this directory: `/wp-content/plugins/`; and please feel free to [share your translation](http://www.s2member.com/forums/forum/community/) with the rest of the s2Member® community.
|
12 |
|
13 |
Quick Tip: If you only need to translate the front-end of s2Member, please ignore entries in the `s2member.pot` file with a context matching `s2member-admin`. Those sections of s2Member are only seen by site Administrators; they are NOT used in s2Member's front-end integration with WordPress®. Skipping over translation entries with a context matching `s2member-admin` can save you time.
|
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
|
@@ -85,11 +85,21 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
|
|
85 |
|
86 |
== Upgrade Notice ==
|
87 |
|
88 |
-
=
|
89 |
-
|
90 |
|
91 |
== Changelog ==
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
= v120213 =
|
94 |
* (s2Member) **File downloads**. GZIP conflicts can now been resolved for file downloads. s2Member now introduces an `.htaccess` rewrite rule, which is automatically installed during activation and/or a future upgrade of the s2Member® Framework plugin. These rewrite rules are installed into your root `.htaccess` file for WordPress (if it's writable). If your `.htaccess` file is not writable, you will get a warning in your `s2Member -> Download Options` panel.
|
95 |
|
@@ -144,7 +154,7 @@ Optimization and a few bug fixes. Upgrade immediately.
|
|
144 |
* (s2Member Pro) **Bug fix**. Automatic upgrader failing on `copy` command when running at HostGator. Fixed in this release.
|
145 |
* (s2Member/s2Member Pro) **Security fix**. The `/s2member-files/` directory *(with newly updated Mod Rewrite rules in its .htaccess file)* was allowing directory indexing inadvertently, on some servers. This was a low-level vulnerability, because although directory indexing was possible, protected file access was not. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15665&p=48984&hilit=next+release#p48984).
|
146 |
* (s2Member/s2Member Pro) **Bug fix**. A bug related to the `init()` Hook firing an early call to `c_ws_plugin__s2member_systematics::is_wp_systematic_use_page()` was identified. Fixed in this release. One symptom of this bug was for Users/Members to have trouble accessing a BuddyPress registration form after having paid for Membership, under the right scenario.
|
147 |
-
* (s2Member/s2Member Pro) **New API Functions**. New API Functions: `s2member_shorten_url()`, `s2member_user_downloads()`, `s2member_total_downloads_of()`, and `s2member_total_unique_downloads_of()`. For further details, please check the [s2Member Codex](http://www.
|
148 |
* (s2Member/s2Member Pro) **Routine maintenance**. Some code optimization, some cleanup, and some organizational improvements in preparation for new features in a coming release.
|
149 |
* (s2Member/s2Member Pro) **WordPress® 3.3-beta2**. Compatibility updates. CSS tweaks, JavaScript tweaks and other considerations for the coming release of WordPress® 3.3.
|
150 |
|
@@ -234,7 +244,7 @@ Optimization and a few bug fixes. Upgrade immediately.
|
|
234 |
* (s2Member) **PayPal® ( Bug fix )**. s2Member was incorrectly handling delayed EOT Times under a specific scenario, as [reported here](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14876&p=34414#p34414). Corrected in this release.
|
235 |
* (s2Member) **JavaScript/CSS Optimization**. s2Member now loads its dynamic JavaScript/CSS libraries through a new optimized file called `/s2member-o.php`, designed to increase the speed at which your installation of WordPress® can load these resources. The new optimized `/s2member-o.php` file loads only the core WordPress® framework and the s2Member JavaScript and/or CSS file, depending on which is being requested. This new file will eliminate a potential bottleneck on some WordPress® installations, which may have MANY other plugins running in concert with s2Member. It also works to further reduce CPU and memory consumption for all site owners. For further details about why this optimization is beneficial, please see [this article](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14359&p=33441#p33441).
|
236 |
* (s2Member Pro) **PayPal® Express Checkout / Pre-Population**. s2Member now pre-populates everything it can through PayPal® Express Checkout integration. If a Customer does NOT already have a PayPal® account when they arrive at Express Checkout, the Account Creation Form at PayPal® will be pre-populated with a minimum of their Name and Email Address. Street address information will ONLY be pre-populated, when/if s2Member collects it for tax purposes. Otherwise, the address information will NOT be pre-populated, because only PayPal® will ask for those details anyway *( i.e. s2Member doesn't ask for address details when Express Checkout is used; not unless you're collecting taxes: `s2Member -> PayPal® Options -> Tax Calculations` ).
|
237 |
-
* (s2Member) **New API Function**. This version of s2Member includes a new API Function `get_s2member_custom_fields()`, designed to provide more information about Custom Registration/Profile Field configuration and values for a specific User. The API function `get_user_field()` remains available as well. For further details, please see [this article](http://www.
|
238 |
* (s2Member Pro) **Pro Login Widget**. This version of s2Member improves the `%%automatic%%` setting for the Signup URL in Pro Login Widgets. When/if a Customer has already paid for their Membership, the Signup URL presented in the Pro Login Widget will change dynamically, pointing a Customer to the Registration Form, instead of to your Membership Options Page. Of course, this behavior could be overridden by changing the Signup URL to something other than `%%automatic%%`, if you prefer.
|
239 |
|
240 |
= v110815 =
|
1 |
=== s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
|
2 |
|
3 |
+
Version: 120219
|
4 |
+
Stable tag: 120219
|
5 |
|
6 |
SSL Compatible: yes
|
7 |
bbPress® Compatible: yes
|
85 |
|
86 |
== Upgrade Notice ==
|
87 |
|
88 |
+
= v120219 =
|
89 |
+
Link updates and a compatibility fix. Upgrade immediately.
|
90 |
|
91 |
== Changelog ==
|
92 |
|
93 |
+
= v120219 =
|
94 |
+
* (s2Member) **File downloads**. s2Member\'s `.htaccess` rules updated to also support older versions of the Apache 1.x series. However, we still recommend that you run s2Member® with Apache 2.0 or higher. Or, with another modern web server that's Apache-compatible, such as [LiteSpeed](http://litespeedtech.com/).
|
95 |
+
* (s2Member) **Link updates**. Some of the documentation built into the s2Member® plugin contained links which were outdated after our recent move to the new [s2Member.com](http://www.s2member.com/). These links have now been updated within the plugin.
|
96 |
+
* (s2Member) **New video tutorial**. [s2Member® Intros, Framework and Pro](http://www.s2member.com/videos/85E41C40550808C2/)
|
97 |
+
* (s2Member) **New video tutorial**. [s2Member® File Downloads, Complete Series / From Basics On Up](http://www.s2member.com/videos/7547A199A4385310/)
|
98 |
+
* (s2Member) **New video tutorial**. [s2Member® File Downloads, Amazon S3/CloudFront/JW Player](http://www.s2member.com/videos/BD496E5F2CCAB12A/)
|
99 |
+
* (s2Member) **New video tutorial**. [s2Member® File Downloads, Remote Auth/Podcasting](http://www.s2member.com/videos/71F49478D6983A9C/)
|
100 |
+
* (s2Member) **New video tutorial**. [s2Member® File Downloads, GZIP Conflicts?](http://www.s2member.com/videos/038A4033A8D2A2EB/)
|
101 |
+
* (s2Member) **New video tutorial**. [s2Member®, Using The PayPal Sandbox](http://www.s2member.com/videos/A7AEF89D281A75A0/)
|
102 |
+
|
103 |
= v120213 =
|
104 |
* (s2Member) **File downloads**. GZIP conflicts can now been resolved for file downloads. s2Member now introduces an `.htaccess` rewrite rule, which is automatically installed during activation and/or a future upgrade of the s2Member® Framework plugin. These rewrite rules are installed into your root `.htaccess` file for WordPress (if it's writable). If your `.htaccess` file is not writable, you will get a warning in your `s2Member -> Download Options` panel.
|
105 |
|
154 |
* (s2Member Pro) **Bug fix**. Automatic upgrader failing on `copy` command when running at HostGator. Fixed in this release.
|
155 |
* (s2Member/s2Member Pro) **Security fix**. The `/s2member-files/` directory *(with newly updated Mod Rewrite rules in its .htaccess file)* was allowing directory indexing inadvertently, on some servers. This was a low-level vulnerability, because although directory indexing was possible, protected file access was not. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15665&p=48984&hilit=next+release#p48984).
|
156 |
* (s2Member/s2Member Pro) **Bug fix**. A bug related to the `init()` Hook firing an early call to `c_ws_plugin__s2member_systematics::is_wp_systematic_use_page()` was identified. Fixed in this release. One symptom of this bug was for Users/Members to have trouble accessing a BuddyPress registration form after having paid for Membership, under the right scenario.
|
157 |
+
* (s2Member/s2Member Pro) **New API Functions**. New API Functions: `s2member_shorten_url()`, `s2member_user_downloads()`, `s2member_total_downloads_of()`, and `s2member_total_unique_downloads_of()`. For further details, please check the [s2Member Codex](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/).
|
158 |
* (s2Member/s2Member Pro) **Routine maintenance**. Some code optimization, some cleanup, and some organizational improvements in preparation for new features in a coming release.
|
159 |
* (s2Member/s2Member Pro) **WordPress® 3.3-beta2**. Compatibility updates. CSS tweaks, JavaScript tweaks and other considerations for the coming release of WordPress® 3.3.
|
160 |
|
244 |
* (s2Member) **PayPal® ( Bug fix )**. s2Member was incorrectly handling delayed EOT Times under a specific scenario, as [reported here](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14876&p=34414#p34414). Corrected in this release.
|
245 |
* (s2Member) **JavaScript/CSS Optimization**. s2Member now loads its dynamic JavaScript/CSS libraries through a new optimized file called `/s2member-o.php`, designed to increase the speed at which your installation of WordPress® can load these resources. The new optimized `/s2member-o.php` file loads only the core WordPress® framework and the s2Member JavaScript and/or CSS file, depending on which is being requested. This new file will eliminate a potential bottleneck on some WordPress® installations, which may have MANY other plugins running in concert with s2Member. It also works to further reduce CPU and memory consumption for all site owners. For further details about why this optimization is beneficial, please see [this article](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14359&p=33441#p33441).
|
246 |
* (s2Member Pro) **PayPal® Express Checkout / Pre-Population**. s2Member now pre-populates everything it can through PayPal® Express Checkout integration. If a Customer does NOT already have a PayPal® account when they arrive at Express Checkout, the Account Creation Form at PayPal® will be pre-populated with a minimum of their Name and Email Address. Street address information will ONLY be pre-populated, when/if s2Member collects it for tax purposes. Otherwise, the address information will NOT be pre-populated, because only PayPal® will ask for those details anyway *( i.e. s2Member doesn't ask for address details when Express Checkout is used; not unless you're collecting taxes: `s2Member -> PayPal® Options -> Tax Calculations` ).
|
247 |
+
* (s2Member) **New API Function**. This version of s2Member includes a new API Function `get_s2member_custom_fields()`, designed to provide more information about Custom Registration/Profile Field configuration and values for a specific User. The API function `get_user_field()` remains available as well. For further details, please see [this article](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) in the s2Member Codex.
|
248 |
* (s2Member Pro) **Pro Login Widget**. This version of s2Member improves the `%%automatic%%` setting for the Signup URL in Pro Login Widgets. When/if a Customer has already paid for their Membership, the Signup URL presented in the Pro Login Widget will change dynamically, pointing a Customer to the Registration Form, instead of to your Membership Options Page. Of course, this behavior could be overridden by changing the Signup URL to something other than `%%automatic%%`, if you prefer.
|
249 |
|
250 |
= v110815 =
|
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: 120219
|
23 |
+
Stable tag: 120219
|
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", "120219" /* !#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", "120219" /* !#distro-version#! */);
|
109 |
/*
|
110 |
Several compatibility checks.
|
111 |
If all pass, load the s2Member plugin.
|