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

Version Description

= v160423 =

(Maintenance Release) Upgrade immediately.

Download this release

Release Info

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

Code changes from version 160303 to 160423

changelog.md CHANGED
@@ -1,3 +1,42 @@
1
= v160303 =
2
3
- (s2Member/s2Member Pro) **Comet Cache Compat.:** This release improves compatibility with Comet Cache (formerly ZenCache), whenever you have it configured to cache logged-in users. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/888). Props @KTS915 for reporting!
1
+ = v160423 =
2
+
3
+ - (s2Member/s2Member Pro) **WP v4.5 Compatibility.** This release offers full compatibility with the latest release of WordPress v4.5. Nothing major was changed for standard WordPress installations, but there were a few subtle tweaks here and there to improve v4.5 compatibility. We encourage all users to upgrade right away.
4
+
5
+ **NOTE: WP v4.5 for Multisite Networks running s2Member Pro:** This release corrects a bug first introduced in the previous release of s2Member Pro that resulted in an error message (`Uncaught Error: Class 'c_ws_plugin__s2member_mms_patches' not found`) when updating to WP v4.5. It has been corrected in this release, but in order to avoid this problem altogether please follow this procedure when upgrading WordPress.
6
+
7
+ **WP v4.5 Multisite Upgrade Procedure:**
8
+
9
+ - Upgrade s2Member and s2Member Pro ​_before_​ updating WordPress core.
10
+ - Then upgrade WordPress core and observe that Multisite Patches are applied properly.
11
+
12
+ _If you have already upgraded to WP v4.5 and worked past this issue by patching manually, that's fine. You can still upgrade s2Member and s2Member Pro. After the upgrade you may feel free to enable automatic patching again if that's desirable._
13
+
14
+ - (s2Member/s2Member Pro) **Bug Fix:** This release corrects a bug first introduced in the previous release which was causing a PHP warning about `cf_stream_extn_resource_exclusions`. A symptom was to have mysterious problems with `[s2Stream /]` or the `[s2File /]` shortcode. Fixed in this release. Props at @raamdev @renzms for reporting. See also [this GitHub issue](https://github.com/websharks/s2member/issues/901) for details.
15
+
16
+ - (s2Member/s2Member Pro) **PayPal SSL Compatibility:** This release of s2Member provides an `https://` IPN URL for PayPal IPN integrations. It also provides a helpful note (in the Dashboard) about a new requirement that PayPal has with respect to the IPN URL that you configure at PayPal.com. s2Member has been updated to help you with this new requirement.
17
+
18
+ **New PayPal.com IPN Requirement:** PayPal.com is now requiring any new IPN URL that you configure to be entered as an `https://` URL; i.e., if you log into your PayPal.com account and try to configure a _brand new_ IPN URL, that URL _must_ use `https://`. PayPal.com will refuse it otherwise.
19
+
20
+ However, the `notify_url=` parameter in standard PayPal buttons should continue to work with either `http://` or `https://`, and any existing configurations out there that still use an `http://` IPN URL should continue to work as well. So this is about planning for the future. We have been told that PayPal will eventually _require_ that all IPN URLs use an `https://` protocol; i.e., they will eventually stop supporting `http://` IPN URLs altogether (at some point in the future), they are not giving anyone a date yet. For this reason we strongly suggest that you [review the details given here](https://github.com/websharks/s2member/issues/914).
21
+
22
+ Since PayPal is moving in a direction that will eventually require all site owners to have an SSL certificate in the future, s2Member's instructions (and the IPN URL it provides you with) will now be presented in the form of an `https://` URL with additional details to help you through the process of configuring an IPN handler for PayPal.
23
+
24
+ See: **Dashboard → s2Member → PayPal Options → PayPal IPN Integration**
25
+
26
+ Props @codeforest for reporting. See [this GitHub issue](https://github.com/websharks/s2member/issues/914) for further details.
27
+
28
+ - (s2Member/s2Member Pro) **Bug Fix:** Email field on Registration page not shown as required via `*` symbol like other fields in this form. Caused by a change in WordPress core. Fixed in this release. Props @spottydog63 @renzms. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/907) for details.
29
+
30
+ - (s2Member/s2Member Pro) **Bug Fix:** `E_NOTICE` level errors in cache handler when running in `WP_DEBUG` mode. Props at @KTS915 for reporting. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/917).
31
+
32
+ - (s2Member/s2Member Pro) **i18n Compatibility:** This release of s2Member moves the `load_plugin_textdomain()` call into the `plugins_loaded` hook instead of it being run on `init`. Props @KTS915 for reporting. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/899) for details.
33
+
34
+ - (s2Member Pro) **Multisite Patches:** Fixed a bug (`Uncaught Error: Class 'c_ws_plugin__s2member_mms_patches' not found`) whenever WordPress was being updated and Multisite Patches were being applied in the pro version of s2Member. See: [this GitHub issue](https://github.com/websharks/s2member/issues/929) for details.
35
+
36
+ - (s2Member/s2Member Pro) **Security Enhancement:** This release of s2Member defaults PayPal Button Encryption to a value of `on` instead of `off`; i.e., there is a new default behavior. Existing s2Member installations are unaffected by this change, but if you install s2Member on a new site you will notice that (if using PayPal Buttons), Button Encryption will be enabled by default.
37
+
38
+ _Note that in order for Button Encryption to work, you must fill-in the API credentials for s2Member under: **Dashboard → s2Member → PayPal Options → PayPal Account Details**_
39
+
40
= v160303 =
41
42
- (s2Member/s2Member Pro) **Comet Cache Compat.:** This release improves compatibility with Comet Cache (formerly ZenCache), whenever you have it configured to cache logged-in users. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/888). Props @KTS915 for reporting!
checksum.txt CHANGED
@@ -1 +1 @@
1
- b155b61fde7bcce8dfd5e9eb3e002338
1
+ 65cb8fb2c54e7bc8e9bc128514c4b0f5
includes/classes/cache.inc.php CHANGED
@@ -11,94 +11,82 @@
11
* along with this software. In the main directory, see: /licensing/
12
* If not, see: {@link http://www.gnu.org/licenses/}.
13
*
14
- * @package s2Member\Cache
15
* @since 3.5
16
*/
17
- if(!defined('WPINC')) // MUST have WordPress.
18
- exit("Do not access this file directly.");
19
20
- if (!class_exists ("c_ws_plugin__s2member_cache"))
21
- {
22
- /**
23
- * s2Member's caching routines.
24
- *
25
- * @package s2Member\Cache
26
- * @since 3.5
27
- */
28
- class c_ws_plugin__s2member_cache
29
- {
30
- /**
31
- * Page links needed for Constants.
32
- *
33
- * Page links are cached into the s2Member options on 15 min intervals.
34
- * This allows the API Constants to provide quick access to them without being
35
- * forced to execute {@link http://codex.wordpress.org/Function_Reference/get_page_link get_page_link()}
36
- * all the time, which piles up DB queries.
37
- *
38
- * @package s2Member\Cache
39
- * @since 3.5
40
- *
41
- * @return array Array of cached Page links.
42
- */
43
- public static function cached_page_links ()
44
- {
45
- do_action("ws_plugin__s2member_before_cached_page_links", get_defined_vars ());
46
47
- $lwp = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"];
48
- $mop = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_options_page"];
49
- $fdlep = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["file_download_limit_exceeded_page"];
50
51
- $lwp_cache = @$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["login_welcome_page"];
52
- $mop_cache = @$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["membership_options_page"];
53
- $fdlep_cache = @$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["file_download_limit_exceeded_page"];
54
55
- $links = array("login_welcome_page" => "", "membership_options_page" => "", "file_download_limit_exceeded_page" => "");
56
57
- if (isset ($lwp_cache["page"], $lwp_cache["time"], $lwp_cache["link"]) && $lwp_cache["page"] === $lwp && $lwp_cache["time"] >= strtotime ("-15 minutes") && $lwp_cache["link"])
58
- {
59
- $links["login_welcome_page"] = $lwp_cache["link"];
60
- }
61
- else // Otherwise, query the database using ``get_page_link()`` and update the cache.
62
- {
63
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["login_welcome_page"]["page"] = $lwp;
64
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["login_welcome_page"]["time"] = time ();
65
- $links["login_welcome_page"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["login_welcome_page"]["link"] = ($lwp) ? get_page_link ($lwp) : home_url("/");
66
67
- $cache_needs_updating = /* Flag for cache update. */ true;
68
- }
69
- if (isset ($mop_cache["page"], $mop_cache["time"], $mop_cache["link"]) && $mop_cache["page"] === $mop && $mop_cache["time"] >= strtotime ("-15 minutes") && $mop_cache["link"])
70
- {
71
- $links["membership_options_page"] = $mop_cache["link"];
72
- }
73
- else // Otherwise, query the database using ``get_page_link()`` and update the cache.
74
- {
75
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["membership_options_page"]["page"] = $mop;
76
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["membership_options_page"]["time"] = time ();
77
- $links["membership_options_page"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["membership_options_page"]["link"] = ($mop) ? get_page_link ($mop) : home_url("/");
78
-
79
- $cache_needs_updating = /* Flag for cache update. */ true;
80
- }
81
- if (isset ($fdlep_cache["page"], $fdlep_cache["time"], $fdlep_cache["link"]) && $fdlep_cache["page"] === $fdlep && $fdlep_cache["time"] >= strtotime ("-15 minutes") && $fdlep_cache["link"])
82
- {
83
- $links["file_download_limit_exceeded_page"] = $fdlep_cache["link"];
84
- }
85
- else // Otherwise, query the database using ``get_page_link()`` and update the cache.
86
- {
87
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["file_download_limit_exceeded_page"]["page"] = $fdlep;
88
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["file_download_limit_exceeded_page"]["time"] = time ();
89
- $links["file_download_limit_exceeded_page"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["file_download_limit_exceeded_page"]["link"] = ($fdlep) ? get_page_link ($fdlep) : home_url("/");
90
-
91
- $cache_needs_updating = /* Flag for cache update. */ true;
92
- }
93
- if /* Cache is also reset dynamically during back-end option updates. */ (isset($cache_needs_updating) && $cache_needs_updating)
94
- {
95
- update_option ("ws_plugin__s2member_cache", $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]);
96
- }
97
- $scheme = /* SSL mode? */ (is_ssl ()) ? "https" : "http";
98
- foreach /* Conversions for SSL and non-SSL mode. */ ($links as &$link)
99
- $link = preg_replace ("/^https?\:\/\//i", $scheme . "://", $link);
100
-
101
- return apply_filters("ws_plugin__s2member_cached_page_links", $links, get_defined_vars ());
102
- }
103
- }
104
- }
11
* along with this software. In the main directory, see: /licensing/
12
* If not, see: {@link http://www.gnu.org/licenses/}.
13
*
14
* @since 3.5
15
*/
16
+ if (!defined('WPINC')) { // MUST have WordPress.
17
+ exit('Do not access this file directly.');
18
+ }
19
+ if (!class_exists('c_ws_plugin__s2member_cache')) {
20
+ /**
21
+ * s2Member's caching routines.
22
+ *
23
+ * @since 3.5
24
+ */
25
+ class c_ws_plugin__s2member_cache
26
+ {
27
+ /**
28
+ * Page links needed for Constants.
29
+ *
30
+ * Page links are cached into the s2Member options on 15 min intervals.
31
+ * This allows the API Constants to provide quick access to them without being
32
+ * forced to execute {@link http://codex.wordpress.org/Function_Reference/get_page_link get_page_link()}
33
+ * all the time, which piles up DB queries.
34
+ *
35
+ * @since 3.5
36
+ *
37
+ * @return array Array of cached Page links.
38
+ */
39
+ public static function cached_page_links()
40
+ {
41
+ do_action('ws_plugin__s2member_before_cached_page_links', get_defined_vars());
42
43
+ $lwp = $GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page'];
44
+ $mop = $GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_options_page'];
45
+ $fdlep = $GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_limit_exceeded_page'];
46
47
+ $lwp_cache = isset($GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['login_welcome_page'])
48
+ ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['login_welcome_page'] : null;
49
50
+ $mop_cache = isset($GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['membership_options_page'])
51
+ ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['membership_options_page'] : null;
52
53
+ $fdlep_cache = isset($GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['file_download_limit_exceeded_page'])
54
+ ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['file_download_limit_exceeded_page'] : null;
55
56
+ $links = ['login_welcome_page' => '', 'membership_options_page' => '', 'file_download_limit_exceeded_page' => ''];
57
58
+ if (isset($lwp_cache['page'], $lwp_cache['time'], $lwp_cache['link']) && $lwp_cache['page'] === $lwp && $lwp_cache['time'] >= strtotime('-15 minutes') && $lwp_cache['link']) {
59
+ $links['login_welcome_page'] = $lwp_cache['link'];
60
+ } else { // Otherwise, query the database using ``get_page_link()`` and update the cache.
61
+ $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['login_welcome_page']['page'] = $lwp;
62
+ $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['login_welcome_page']['time'] = time();
63
+ $links['login_welcome_page'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['login_welcome_page']['link'] = ($lwp) ? get_page_link($lwp) : home_url('/');
64
+ $cache_needs_updating = true; // Flag for cache update.
65
+ }
66
+ if (isset($mop_cache['page'], $mop_cache['time'], $mop_cache['link']) && $mop_cache['page'] === $mop && $mop_cache['time'] >= strtotime('-15 minutes') && $mop_cache['link']) {
67
+ $links['membership_options_page'] = $mop_cache['link'];
68
+ } else { // Otherwise, query the database using ``get_page_link()`` and update the cache.
69
+ $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['membership_options_page']['page'] = $mop;
70
+ $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['membership_options_page']['time'] = time();
71
+ $links['membership_options_page'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['membership_options_page']['link'] = ($mop) ? get_page_link($mop) : home_url('/');
72
+ $cache_needs_updating = true; // Flag for cache update.
73
+ }
74
+ if (isset($fdlep_cache['page'], $fdlep_cache['time'], $fdlep_cache['link']) && $fdlep_cache['page'] === $fdlep && $fdlep_cache['time'] >= strtotime('-15 minutes') && $fdlep_cache['link']) {
75
+ $links['file_download_limit_exceeded_page'] = $fdlep_cache['link'];
76
+ } else { // Otherwise, query the database using ``get_page_link()`` and update the cache.
77
+ $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['file_download_limit_exceeded_page']['page'] = $fdlep;
78
+ $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['file_download_limit_exceeded_page']['time'] = time();
79
+ $links['file_download_limit_exceeded_page'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']['file_download_limit_exceeded_page']['link'] = ($fdlep) ? get_page_link($fdlep) : home_url('/');
80
+ $cache_needs_updating = true; // Flag for cache update.
81
+ }
82
+ if (isset($cache_needs_updating) && $cache_needs_updating) {
83
+ update_option('ws_plugin__s2member_cache', $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache']);
84
+ }
85
+ $scheme = is_ssl() ? 'https' : 'http';
86
+ foreach ($links as &$link) { // Update scheme.
87
+ $link = preg_replace('/^https?\:\/\//i', $scheme.'://', $link);
88
+ }
89
+ return apply_filters('ws_plugin__s2member_cached_page_links', $links, get_defined_vars());
90
+ }
91
+ }
92
+ }
includes/classes/files-in.inc.php CHANGED
@@ -996,8 +996,9 @@ if(!class_exists('c_ws_plugin__s2member_files_in'))
996
997
$cfc['expires'] = strtotime('+'.apply_filters('ws_plugin__s2member_amazon_cf_file_expires_time', '24 hours', get_defined_vars()));
998
999
- $cf_extn = strtolower(substr($file, strrpos($file, '.') + 1)); // Parses the file extension out so we can scan it in some special scenarios.
1000
$cf_ip_res = c_ws_plugin__s2member_utils_conds::is_localhost() || ($stream && !$cfc['rtmp_policy_include_ip']) ? FALSE : TRUE;
1001
$cf_resource = ($stream) ? ((in_array($cf_extn, $cf_stream_extn_resource_exclusions)) ? substr($file, 0, strrpos($file, '.')) : $file) : 'http'.(($ssl) ? 's' : '').'://'.(($cfc['distro_downloads_cname']) ? $cfc['distro_downloads_cname'] : $cfc['distro_downloads_dname']).'/'.$url_e_file;
1002
$cf_url = ($stream) ? 'rtmp'.(($ssl) ? 'e' : '').'://'.(($cfc['distro_streaming_cname']) ? $cfc['distro_streaming_cname'] : $cfc['distro_streaming_dname']).'/cfx/st/'.$file : 'http'.(($ssl) ? 's' : '').'://'.(($cfc['distro_downloads_cname']) ? $cfc['distro_downloads_cname'] : $cfc['distro_downloads_dname']).'/'.$url_e_file;
1003
$cf_policy = '{"Statement":[{"Resource":"'.c_ws_plugin__s2member_utils_strings::esc_dq($cf_resource).'","Condition":{'.(($cf_ip_res) ? '"IpAddress":{"AWS:SourceIp":"'.c_ws_plugin__s2member_utils_strings::esc_dq($_SERVER['REMOTE_ADDR']).'/32"},' : '').'"DateLessThan":{"AWS:EpochTime":'.(int)$cfc['expires'].'}}}]}';
996
997
$cfc['expires'] = strtotime('+'.apply_filters('ws_plugin__s2member_amazon_cf_file_expires_time', '24 hours', get_defined_vars()));
998
999
+ $cf_extn = strtolower(substr($file, strrpos($file, '.') + 1));
1000
$cf_ip_res = c_ws_plugin__s2member_utils_conds::is_localhost() || ($stream && !$cfc['rtmp_policy_include_ip']) ? FALSE : TRUE;
1001
+ $cf_stream_extn_resource_exclusions = array_unique((array)apply_filters('ws_plugin__s2member_amazon_cf_file_streaming_extension_resource_exclusions', array('mp3'), get_defined_vars())); // MP3 files should NOT include an extension in their resource reference.
1002
$cf_resource = ($stream) ? ((in_array($cf_extn, $cf_stream_extn_resource_exclusions)) ? substr($file, 0, strrpos($file, '.')) : $file) : 'http'.(($ssl) ? 's' : '').'://'.(($cfc['distro_downloads_cname']) ? $cfc['distro_downloads_cname'] : $cfc['distro_downloads_dname']).'/'.$url_e_file;
1003
$cf_url = ($stream) ? 'rtmp'.(($ssl) ? 'e' : '').'://'.(($cfc['distro_streaming_cname']) ? $cfc['distro_streaming_cname'] : $cfc['distro_streaming_dname']).'/cfx/st/'.$file : 'http'.(($ssl) ? 's' : '').'://'.(($cfc['distro_downloads_cname']) ? $cfc['distro_downloads_cname'] : $cfc['distro_downloads_dname']).'/'.$url_e_file;
1004
$cf_policy = '{"Statement":[{"Resource":"'.c_ws_plugin__s2member_utils_strings::esc_dq($cf_resource).'","Condition":{'.(($cf_ip_res) ? '"IpAddress":{"AWS:SourceIp":"'.c_ws_plugin__s2member_utils_strings::esc_dq($_SERVER['REMOTE_ADDR']).'/32"},' : '').'"DateLessThan":{"AWS:EpochTime":'.(int)$cfc['expires'].'}}}]}';
includes/classes/paypal-notify-in.inc.php CHANGED
@@ -158,6 +158,11 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in'))
158
}
159
else // Extensive log reporting here. This is an area where many site owners find trouble. Depending on server configuration; remote HTTPS connections may fail.
160
{
161
$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.';
162
$paypal['s2member_log'][] = 'Please see this KB article: `http://www.s2member.com/kb/server-scanner/`. We suggest that you run the s2Member Server Scanner.';
163
$paypal['s2member_log'][] = var_export($_REQUEST, TRUE); // Recording _POST + _GET vars for analysis and debugging.
@@ -195,11 +200,20 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in'))
195
do_action('ws_plugin__s2member_during_paypal_notify', get_defined_vars());
196
unset($__refs, $__v);
197
/*
198
- Output response headers; and perhaps a proxy return URL upon request.
199
*/
200
- status_header(200);
201
header('Content-Type: text/plain; charset=UTF-8');
202
- while(@ob_end_clean()); exit (!empty($paypal['s2member_paypal_proxy_return_url']) ? $paypal['s2member_paypal_proxy_return_url'] : '');
203
}
204
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $__v;
205
do_action('ws_plugin__s2member_after_paypal_notify', get_defined_vars());
158
}
159
else // Extensive log reporting here. This is an area where many site owners find trouble. Depending on server configuration; remote HTTPS connections may fail.
160
{
161
+ if (!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'GET' && !empty($_SERVER['HTTP_USER_AGENT'])) {
162
+ if (preg_match('/(msie|trident|gecko|webkit|presto|konqueror|playstation)[\/ ]([0-9\.]+)/i', $_SERVER['HTTP_USER_AGENT'])) {
163
+ $paypal['s2member_indicator'] = 'This PayPal IPN Handler by s2Member® is active & listening.';
164
+ }
165
+ }
166
$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.';
167
$paypal['s2member_log'][] = 'Please see this KB article: `http://www.s2member.com/kb/server-scanner/`. We suggest that you run the s2Member Server Scanner.';
168
$paypal['s2member_log'][] = var_export($_REQUEST, TRUE); // Recording _POST + _GET vars for analysis and debugging.
200
do_action('ws_plugin__s2member_during_paypal_notify', get_defined_vars());
201
unset($__refs, $__v);
202
/*
203
+ Output response headers & content body.
204
*/
205
+ status_header(200); // OK status code.
206
header('Content-Type: text/plain; charset=UTF-8');
207
+
208
+ while(@ob_end_clean()); // Clean output buffers.
209
+
210
+ if (!empty($paypal['s2member_paypal_proxy_return_url'])) {
211
+ exit($paypal['s2member_paypal_proxy_return_url']);
212
+ } elseif (!empty($paypal['s2member_indicator'])) {
213
+ exit($paypal['s2member_indicator']);
214
+ } else {
215
+ exit(); // Default behavior.
216
+ }
217
}
218
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $__v;
219
do_action('ws_plugin__s2member_after_paypal_notify', get_defined_vars());
includes/classes/sc-paypal-button-e.inc.php CHANGED
@@ -46,7 +46,12 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_e"))
46
do_action("ws_plugin__s2member_before_sc_paypal_button_encryption", get_defined_vars ());
47
unset($__refs, $__v);
48
49
- if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"] && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"] && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"])
50
{
51
$cache = /* Are we caching? */ apply_filters("ws_plugin__s2member_sc_paypal_button_encryption_cache", true, get_defined_vars ());
52
46
do_action("ws_plugin__s2member_before_sc_paypal_button_encryption", get_defined_vars ());
47
unset($__refs, $__v);
48
49
+ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]
50
+ && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"]
51
+ && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"]
52
+ && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"]
53
+ && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"]
54
+ ) // Only if it is possible to connect to the PayPal API.
55
{
56
$cache = /* Are we caching? */ apply_filters("ws_plugin__s2member_sc_paypal_button_encryption_cache", true, get_defined_vars ());
57
includes/classes/sc-paypal-button-in.inc.php CHANGED
@@ -64,6 +64,9 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
64
$attr["rr"] = /* Independent Ccaps require Buy Now. Only after running shortcode_atts(). */ ($attr["level"] === "*") ? "BN" : $attr["rr"];
65
$attr["ns"] = /* No shipping directive must be 1 for digital items. After shortcode_atts(). */ ($attr["dg"] === "1") ? "1" : $attr["ns"];
66
67
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$__v;
68
do_action("ws_plugin__s2member_before_sc_paypal_button_after_shortcode_atts", get_defined_vars ());
69
unset($__refs, $__v);
@@ -106,7 +109,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
106
107
$attr["sp_ids_exp"] = /* Combined "sp:ids:expiration hours". */ "sp:" . $attr["ids"] . ":" . $attr["exp"];
108
109
- $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered. */ home_url ("/?s2member_paypal_return=1");
110
$success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
111
112
$code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-sp-checkout-button.php")));
@@ -117,7 +120,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
117
$code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code);
118
$code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code);
119
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code);
120
- $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1"))), $code);
121
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code);
122
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code);
123
@@ -162,7 +165,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
162
$attr["level_ccaps_eotper"] = ($attr["rr"] === "BN" && $attr["rt"] !== "L") ? $attr["level"] . ":" . $attr["ccaps"] . ":" . $attr["rp"] . " " . $attr["rt"] : $attr["level"] . ":" . $attr["ccaps"];
163
$attr["level_ccaps_eotper"] = /* Clean any trailing separators from this string. */ rtrim ($attr["level_ccaps_eotper"], ":");
164
165
- $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered. */ home_url ("/?s2member_paypal_return=1");
166
$success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
167
168
$code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-ccaps-checkout-button.php")));
@@ -173,7 +176,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
173
$code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code);
174
$code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code);
175
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code);
176
- $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1"))), $code);
177
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code);
178
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code);
179
@@ -222,7 +225,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
222
223
$success_return_tra = array("ta" => $attr["ta"], "tp" => $attr["tp"], "tt" => $attr["tt"], "ra" => $attr["ra"], "rp" => $attr["rp"], "rt" => $attr["rt"], "rr" => $attr["rr"], "rrt" => $attr["rrt"], "rra" => $attr["rra"], "invoice" => $paypal_invoice_input_value, "checksum" => md5 ($paypal_invoice_input_value . $_SERVER["REMOTE_ADDR"] . $attr["level_ccaps_eotper"]));
224
225
- $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered (see below). */ home_url ("/?s2member_paypal_return=1");
226
$success_return_url = add_query_arg ("s2member_paypal_return_tra", urlencode (c_ws_plugin__s2member_utils_encryption::encrypt (serialize ($success_return_tra))), $success_return_url);
227
$success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
228
@@ -235,7 +238,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_in"))
235
$code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code);
236
$code = preg_replace ("/%%level_label%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $attr["level"] . "_label"])), $code);
237
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code); // This brings them back to Front Page.
238
- $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1"))), $code);
239
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code);
240
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code);
241
$code = preg_replace ("/%%level%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["level"])), $code);
64
$attr["rr"] = /* Independent Ccaps require Buy Now. Only after running shortcode_atts(). */ ($attr["level"] === "*") ? "BN" : $attr["rr"];
65
$attr["ns"] = /* No shipping directive must be 1 for digital items. After shortcode_atts(). */ ($attr["dg"] === "1") ? "1" : $attr["ns"];
66
67
+ $force_notify_url_scheme = apply_filters("ws_plugin__s2member_during_sc_paypal_button_force_notify_url_scheme", null, get_defined_vars ());
68
+ $force_return_url_scheme = apply_filters("ws_plugin__s2member_during_sc_paypal_button_force_return_url_scheme", null, get_defined_vars ());
69
+
70
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$__v;
71
do_action("ws_plugin__s2member_before_sc_paypal_button_after_shortcode_atts", get_defined_vars ());
72
unset($__refs, $__v);
109
110
$attr["sp_ids_exp"] = /* Combined "sp:ids:expiration hours". */ "sp:" . $attr["ids"] . ":" . $attr["exp"];
111
112
+ $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered. */ home_url ("/?s2member_paypal_return=1", $force_return_url_scheme);
113
$success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
114
115
$code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-sp-checkout-button.php")));
120
$code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code);
121
$code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code);
122
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code);
123
+ $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1", $force_notify_url_scheme))), $code);
124
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code);
125
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code);
126
165
$attr["level_ccaps_eotper"] = ($attr["rr"] === "BN" && $attr["rt"] !== "L") ? $attr["level"] . ":" . $attr["ccaps"] . ":" . $attr["rp"] . " " . $attr["rt"] : $attr["level"] . ":" . $attr["ccaps"];
166
$attr["level_ccaps_eotper"] = /* Clean any trailing separators from this string. */ rtrim ($attr["level_ccaps_eotper"], ":");
167
168
+ $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered. */ home_url ("/?s2member_paypal_return=1", $force_return_url_scheme);
169
$success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
170
171
$code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-ccaps-checkout-button.php")));
176
$code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code);
177
$code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code);
178
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code);
179
+ $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1", $force_notify_url_scheme))), $code);
180
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code);
181
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code);
182
225
226
$success_return_tra = array("ta" => $attr["ta"], "tp" => $attr["tp"], "tt" => $attr["tt"], "ra" => $attr["ra"], "rp" => $attr["rp"], "rt" => $attr["rt"], "rr" => $attr["rr"], "rrt" => $attr["rrt"], "rra" => $attr["rra"], "invoice" => $paypal_invoice_input_value, "checksum" => md5 ($paypal_invoice_input_value . $_SERVER["REMOTE_ADDR"] . $attr["level_ccaps_eotper"]));
227
228
+ $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered (see below). */ home_url ("/?s2member_paypal_return=1", $force_return_url_scheme);
229
$success_return_url = add_query_arg ("s2member_paypal_return_tra", urlencode (c_ws_plugin__s2member_utils_encryption::encrypt (serialize ($success_return_tra))), $success_return_url);
230
$success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ());
231
238
$code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code);
239
$code = preg_replace ("/%%level_label%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $attr["level"] . "_label"])), $code);
240
$code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code); // This brings them back to Front Page.
241
+ $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1", $force_notify_url_scheme))), $code);
242
$code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code);
243
$code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code);
244
$code = preg_replace ("/%%level%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["level"])), $code);
includes/classes/translations.inc.php CHANGED
@@ -33,7 +33,7 @@ if(!class_exists("c_ws_plugin__s2member_translations"))
33
* @package s2Member\Translations
34
* @since 110815
35
*
36
- * @attaches-to ``add_action("init");``
37
*
38
* @return null
39
*/
@@ -73,6 +73,8 @@ if(!class_exists("c_ws_plugin__s2member_translations"))
73
global $current_site, $current_blog; // In support of Multisite Networking.
74
static $s = array(); // This static array optimizes all of these routines.
75
76
if((isset ($s["is_wp_login"]) && $s["is_wp_login"]) || (!isset ($s["is_wp_login"]) && ($s["is_wp_login"] = (strpos($_SERVER["REQUEST_URI"], "/wp-login.php") !== FALSE && empty($_REQUEST["action"]) && empty($_REQUEST["checkemail"])) ? TRUE : FALSE)))
77
{
78
if($original === "Username") // Give Filters a chance here.
@@ -94,7 +96,7 @@ if(!class_exists("c_ws_plugin__s2member_translations"))
94
{
95
$translated = apply_filters("ws_plugin__s2member_translation_mangler", _x("Password *", "s2member-front", "s2member"), get_defined_vars());
96
}
97
- else if($original === "E-mail") // Give Filters a chance here.
98
{
99
$translated = apply_filters("ws_plugin__s2member_translation_mangler", _x("Email Address *", "s2member-front", "s2member"), get_defined_vars());
100
}
33
* @package s2Member\Translations
34
* @since 110815
35
*
36
+ * @attaches-to ``add_action("plugins_loaded");``
37
*
38
* @return null
39
*/
73
global $current_site, $current_blog; // In support of Multisite Networking.
74
static $s = array(); // This static array optimizes all of these routines.
75
76
+ if(!did_action("init")) return $translated; // Do nothing until `init` has been fired by WP core.
77
+
78
if((isset ($s["is_wp_login"]) && $s["is_wp_login"]) || (!isset ($s["is_wp_login"]) && ($s["is_wp_login"] = (strpos($_SERVER["REQUEST_URI"], "/wp-login.php") !== FALSE && empty($_REQUEST["action"]) && empty($_REQUEST["checkemail"])) ? TRUE : FALSE)))
79
{
80
if($original === "Username") // Give Filters a chance here.
96
{
97
$translated = apply_filters("ws_plugin__s2member_translation_mangler", _x("Password *", "s2member-front", "s2member"), get_defined_vars());
98
}
99
+ else if($original === "Email") // Give Filters a chance here.
100
{
101
$translated = apply_filters("ws_plugin__s2member_translation_mangler", _x("Email Address *", "s2member-front", "s2member"), get_defined_vars());
102
}
includes/hooks.inc.php CHANGED
@@ -19,9 +19,9 @@ if(!defined('WPINC')) // MUST have WordPress.
19
/*
20
Add the plugin Actions/Filters here.
21
*/
22
- add_action('set_current_user', 'c_ws_plugin__s2member_user_securities::set_current_user', 2);
23
24
- add_action('init', 'c_ws_plugin__s2member_translations::load', 2);
25
26
add_action('init', 'c_ws_plugin__s2member_ssl::check_force_ssl', 3);
27
add_action('init', 'c_ws_plugin__s2member_user_securities::initialize', 3);
19
/*
20
Add the plugin Actions/Filters here.
21
*/
22
+ add_action('plugins_loaded', 'c_ws_plugin__s2member_translations::load');
23
24
+ add_action('set_current_user', 'c_ws_plugin__s2member_user_securities::set_current_user', 2);
25
26
add_action('init', 'c_ws_plugin__s2member_ssl::check_force_ssl', 3);
27
add_action('init', 'c_ws_plugin__s2member_user_securities::initialize', 3);
includes/menu-pages/down-ops.inc.php CHANGED
@@ -58,7 +58,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
58
echo '<div class="ws-menu-page-section ws-plugin--s2member-restrictions-section">'."\n";
59
echo '<h3>File Download Restrictions (required, if providing access to protected files)</h3>'."\n";
60
echo '<p>If your Membership offering allows access to restricted files, you\'ll want to configure these options.</p>'."\n";
61
- echo '<p class="info"><strong>NOTE:</strong> If you intend to offer File Downloads in one way or another, you must configure at least one of the options below. For security purposes, s2Member\'s File Download functionality is disabled unless &amp; until at least one of the options below have been configured; i.e., s2Member expects you to configure Basic Downloads for at least one Membership Level before any sort of download-related functionality will work. This includes functionality associated with the <code>[s2File /]</code> and <code>[s2Stream /]</code> Shortcodes also.</p>'."\n";
62
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_restrictions", get_defined_vars());
63
64
echo '<div class="ws-menu-page-hr"></div>'."\n";
58
echo '<div class="ws-menu-page-section ws-plugin--s2member-restrictions-section">'."\n";
59
echo '<h3>File Download Restrictions (required, if providing access to protected files)</h3>'."\n";
60
echo '<p>If your Membership offering allows access to restricted files, you\'ll want to configure these options.</p>'."\n";
61
+ echo '<p class="info"><strong>NOTE:</strong> If you intend to offer File Downloads in one way or another, you must configure at least one of the options below (i.e., by filling in at least one row w/ the number of downloads and the number of days too). For security purposes, s2Member\'s File Download functionality is disabled unless &amp; until at least one of the options below have been configured; i.e., s2Member expects you to configure Basic Downloads for at least one Membership Level before any sort of download-related functionality will work. This includes functionality associated with the <code>[s2File /]</code> and <code>[s2Stream /]</code> Shortcodes also.</p>'."\n";
62
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_restrictions", get_defined_vars());
63
64
echo '<div class="ws-menu-page-hr"></div>'."\n";
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -348,11 +348,16 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
348
349
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-ipn-section">'."\n";
350
echo '<h3>PayPal IPN / Instant Payment Notifications (required, please enable)</h3>'."\n";
351
- echo '<p>Log into your PayPal account and navigate to this section:<br /><strong>Account Profile → Instant Payment Notification Preferences</strong></p>'."\n";
352
echo '<p>Edit your IPN settings &amp; turn IPN Notifications: <strong><code>On</code></strong></p>'."\n";
353
- echo '<p>You\'ll need your IPN URL, which is:<br /><code>'.esc_html(home_url("/?s2member_paypal_notify=1")).'</code></p>'."\n";
354
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn", get_defined_vars());
355
356
echo '<h3 style="margin:0;">More Information (<a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-ipn-details\').toggle(); return false;" class="ws-dotted-link">click here</a>)</h3>'."\n";
357
echo '<div id="ws-plugin--s2member-paypal-ipn-details" style="margin-top:10px; display:none;">'."\n";
358
echo '<p><em><strong>Quick Tip:</strong> In addition to the <a href="http://s2member.com/r/paypal-ipn-setup/" target="_blank" rel="external">default IPN settings inside your PayPal account</a>, the IPN URL is also set on a per-transaction basis by the special PayPal Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal account, that\'s OK. s2Member dynamically sets the IPN URL for each transaction. The result is that the IPN URL configured from within your PayPal account, becomes the default, which is then overwritten on a per-transaction basis. In fact, PayPal recently updated their system to support IPN URL preservation. One PayPal account can handle multiple sites, all using different IPN URLs.</em></p>'."\n";
@@ -365,7 +370,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
365
echo '<h3 style="margin:0;">IPN w/ Proxy Key (<a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-ipn-proxy-details\').toggle(); return false;" class="ws-dotted-link">optional, for 3rd-party integrations</a>)</h3>'."\n";
366
echo '<div id="ws-plugin--s2member-paypal-ipn-proxy-details" style="margin-top:10px; display:none;">'."\n";
367
echo '<p>If you\'re using a 3rd-party application that needs to POST simulated IPN transactions to your s2Member installation, you can use this alternate IPN URL, which includes a Proxy Key. This encrypted Proxy Key verifies incoming data being received by s2Member\'s IPN processor. You can change <em>[proxy-gateway]</em> to whatever you like. The <em>[proxy-gateway]</em> value is required. It will be stored by s2Member as the Customer\'s Paid Subscr. Gateway. Your [proxy-gateway] value will also be reflected in s2Member\'s IPN log.</p>'."\n";
368
- echo '<input type="text" autocomplete="off" value="'.format_to_edit(home_url("/?s2member_paypal_notify=1&s2member_paypal_proxy=[proxy-gateway]&s2member_paypal_proxy_verification=".urlencode(c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()))).'" style="width:99%;" />'."\n";
369
echo '<p><em>Any 3rd-party application that is sending IPN transactions to your s2Member installation must include the <code>custom</code> POST variable, and that variable must always start with your installation domain (i.e., custom=<code>'.esc_html($_SERVER["HTTP_HOST"]).'</code>). In addition, the <code>item_number</code> variable must always match a format that s2Member looks for. Generally speaking, the <code>item_number</code> should be <code>1, 2, 3, or 4</code>, indicating a specific s2Member Level #. However, s2Member also uses some advanced formats in this field. Just to be sure, we suggest creating a PayPal Button with the s2Member Button Generator, and then taking a look at the Full Button Code to see how s2Member expects <code>item_number</code> to be formatted. Other than the aforementioned exceptions, all other POST variables should follow PayPal standards. Please see: <a href="http://www.s2member.com/paypal-ipn-pdt-vars" target="_blank" rel="external">PayPal\'s IPN/PDT reference guide</a> for full documentation.</em></p>'."\n";
370
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn_after_proxy", get_defined_vars());
371
echo '</div>'."\n";
348
349
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-ipn-section">'."\n";
350
echo '<h3>PayPal IPN / Instant Payment Notifications (required, please enable)</h3>'."\n";
351
+ echo '<p>Log into your PayPal account and navigate to this section:<br /><strong>Account Profile → <a href="http://s2member.com/r/paypal-com-ipn-configuration-page/" target="_blank" rel="external">Instant Payment Notification Preferences</a></strong></p>'."\n";
352
echo '<p>Edit your IPN settings &amp; turn IPN Notifications: <strong><code>On</code></strong></p>'."\n";
353
+ echo '<p>You\'ll need your IPN URL, which is:<br /><code>'.esc_html(home_url("/?s2member_paypal_notify=1", "https")).'</code></p>'."\n";
354
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn", get_defined_vars());
355
356
+ echo '<h4 style="margin-bottom:0;"><strong class="ws-menu-page-hilite">Note: SSL is required by PayPal</strong></h4>'."\n";
357
+ echo '<p style="margin-top:0;">If you configure your PayPal.com account using the URL above, your site <strong><em>must</em> support SSL</strong> (i.e., the <code>https://</code> protocol). In other words, PayPal\'s system will refuse to accept any URL that does not begin with <code>https://</code>. The IPN URL that s2Member provides (see above) <em>does</em> start with <code>https://</code>. However, that doesn\'t necessarily mean that the URL actually works. Please be sure that your hosting account is configured with a valid SSL certificate before giving this URL to PayPal.</p>'."\n";
358
+
359
+ echo '<div class="ws-menu-page-hr"></div>'."\n";
360
+
361
echo '<h3 style="margin:0;">More Information (<a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-ipn-details\').toggle(); return false;" class="ws-dotted-link">click here</a>)</h3>'."\n";
362
echo '<div id="ws-plugin--s2member-paypal-ipn-details" style="margin-top:10px; display:none;">'."\n";
363
echo '<p><em><strong>Quick Tip:</strong> In addition to the <a href="http://s2member.com/r/paypal-ipn-setup/" target="_blank" rel="external">default IPN settings inside your PayPal account</a>, the IPN URL is also set on a per-transaction basis by the special PayPal Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal account, that\'s OK. s2Member dynamically sets the IPN URL for each transaction. The result is that the IPN URL configured from within your PayPal account, becomes the default, which is then overwritten on a per-transaction basis. In fact, PayPal recently updated their system to support IPN URL preservation. One PayPal account can handle multiple sites, all using different IPN URLs.</em></p>'."\n";
370
echo '<h3 style="margin:0;">IPN w/ Proxy Key (<a href="#" onclick="jQuery(\'div#ws-plugin--s2member-paypal-ipn-proxy-details\').toggle(); return false;" class="ws-dotted-link">optional, for 3rd-party integrations</a>)</h3>'."\n";
371
echo '<div id="ws-plugin--s2member-paypal-ipn-proxy-details" style="margin-top:10px; display:none;">'."\n";
372
echo '<p>If you\'re using a 3rd-party application that needs to POST simulated IPN transactions to your s2Member installation, you can use this alternate IPN URL, which includes a Proxy Key. This encrypted Proxy Key verifies incoming data being received by s2Member\'s IPN processor. You can change <em>[proxy-gateway]</em> to whatever you like. The <em>[proxy-gateway]</em> value is required. It will be stored by s2Member as the Customer\'s Paid Subscr. Gateway. Your [proxy-gateway] value will also be reflected in s2Member\'s IPN log.</p>'."\n";
373
+ echo '<input type="text" autocomplete="off" value="'.format_to_edit(home_url("/?s2member_paypal_notify=1&s2member_paypal_proxy=[proxy-gateway]&s2member_paypal_proxy_verification=".urlencode(c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()), "https")).'" style="width:99%;" />'."\n";
374
echo '<p><em>Any 3rd-party application that is sending IPN transactions to your s2Member installation must include the <code>custom</code> POST variable, and that variable must always start with your installation domain (i.e., custom=<code>'.esc_html($_SERVER["HTTP_HOST"]).'</code>). In addition, the <code>item_number</code> variable must always match a format that s2Member looks for. Generally speaking, the <code>item_number</code> should be <code>1, 2, 3, or 4</code>, indicating a specific s2Member Level #. However, s2Member also uses some advanced formats in this field. Just to be sure, we suggest creating a PayPal Button with the s2Member Button Generator, and then taking a look at the Full Button Code to see how s2Member expects <code>item_number</code> to be formatted. Other than the aforementioned exceptions, all other POST variables should follow PayPal standards. Please see: <a href="http://www.s2member.com/paypal-ipn-pdt-vars" target="_blank" rel="external">PayPal\'s IPN/PDT reference guide</a> for full documentation.</em></p>'."\n";
375
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn_after_proxy", get_defined_vars());
376
echo '</div>'."\n";
includes/syscon.inc.php CHANGED
@@ -225,7 +225,7 @@ if(!function_exists('ws_plugin__s2member_configure_options_and_their_defaults'))
225
$default_options['paypal_api_password'] = '';
226
$default_options['paypal_api_signature'] = '';
227
$default_options['paypal_identity_token'] = '';
228
- $default_options['paypal_btn_encryption'] = '0';
229
230
$default_options['paypal_payflow_api_username'] = '';
231
$default_options['paypal_payflow_api_partner'] = 'PayPal';
225
$default_options['paypal_api_password'] = '';
226
$default_options['paypal_api_signature'] = '';
227
$default_options['paypal_identity_token'] = '';
228
+ $default_options['paypal_btn_encryption'] = '1';
229
230
$default_options['paypal_payflow_api_username'] = '';
231
$default_options['paypal_payflow_api_partner'] = 'PayPal';
includes/translations/s2member.pot CHANGED
@@ -2,9 +2,9 @@
2
# This file is distributed under the same license as the package.
3
msgid ""
4
msgstr ""
5
- "Project-Id-Version: 160303\n"
6
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2016-03-03 23:56:02+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
@@ -401,7 +401,7 @@ msgctxt "s2member-admin"
401
msgid "Unable to auto-configure existing Amazon S3 Bucket ACLs. Incomplete Amazon S3 configuration options. Missing one of: Amazon S3 Bucket, Access Key, or Secret Key."
402
msgstr ""
403
404
- #: s2member/includes/classes/files-in.inc.php:1041
405
msgctxt "s2member-admin"
406
msgid "Unable to delete existing Amazon CloudFront Downloads Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
407
msgstr ""
@@ -409,12 +409,12 @@ msgstr ""
409
#. translators: In this translation, `%s` may be filled with an English
410
#. message, which comes from the Amazon CloudFront API call. Feel free to
411
#. exclude `%s` if you like.
412
- #: s2member/includes/classes/files-in.inc.php:1048
413
msgctxt "s2member-admin"
414
msgid "Unable to delete existing Amazon CloudFront Downloads Distro. %s"
415
msgstr ""
416
417
- #: s2member/includes/classes/files-in.inc.php:1060
418
msgctxt "s2member-admin"
419
msgid "Unable to delete existing Amazon CloudFront Streaming Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
420
msgstr ""
@@ -422,7 +422,7 @@ msgstr ""
422
#. translators: In this translation, `%s` may be filled with an English
423
#. message, which comes from the Amazon CloudFront API call. Feel free to
424
#. exclude `%s` if you like.
425
- #: s2member/includes/classes/files-in.inc.php:1067
426
msgctxt "s2member-admin"
427
msgid "Unable to delete existing Amazon CloudFront Streaming Distro. %s"
428
msgstr ""
@@ -430,8 +430,8 @@ msgstr ""
430
#. translators: In this translation, `%s` may be filled with an English
431
#. message, which comes from the Amazon CloudFront API call. Feel free to
432
#. exclude `%s` if you like.
433
- #: s2member/includes/classes/files-in.inc.php:1083
434
- #: s2member/includes/classes/files-in.inc.php:1271
435
msgctxt "s2member-admin"
436
msgid "Unable to delete existing Amazon CloudFront Origin Access Identity. %s"
437
msgstr ""
@@ -439,12 +439,12 @@ msgstr ""
439
#. translators: In this translation, `%s` may be filled with an English
440
#. message, which comes from the Amazon S3 API call. Feel free to exclude `%s`
441
#. if you like.
442
- #: s2member/includes/classes/files-in.inc.php:1124
443
msgctxt "s2member-admin"
444
msgid "Unable to update existing Amazon S3 ACLs. %s"
445
msgstr ""
446
447
- #: s2member/includes/classes/files-in.inc.php:1127
448
msgctxt "s2member-admin"
449
msgid "Unable to update existing Amazon S3 ACLs. Connection failed."
450
msgstr ""
@@ -452,14 +452,14 @@ msgstr ""
452
#. translators: In this translation, `%s` may be filled with an English
453
#. message, which comes from the Amazon CloudFront API call. Feel free to
454
#. exclude `%s` if you like.
455
- #: s2member/includes/classes/files-in.inc.php:1131
456
- #: s2member/includes/classes/files-in.inc.php:1566
457
msgctxt "s2member-admin"
458
msgid "Unable to create Amazon CloudFront Streaming Distro. %s"
459
msgstr ""
460
461
- #: s2member/includes/classes/files-in.inc.php:1134
462
- #: s2member/includes/classes/files-in.inc.php:1569
463
msgctxt "s2member-admin"
464
msgid "Unable to create Amazon CloudFront Streaming Distro. Connection failed."
465
msgstr ""
@@ -467,14 +467,14 @@ msgstr ""
467
#. translators: In this translation, `%s` may be filled with an English
468
#. message, which comes from the Amazon CloudFront API call. Feel free to
469
#. exclude `%s` if you like.
470
- #: s2member/includes/classes/files-in.inc.php:1138
471
- #: s2member/includes/classes/files-in.inc.php:1544
472
msgctxt "s2member-admin"
473
msgid "Unable to create Amazon CloudFront Downloads Distro. %s"
474
msgstr ""
475
476
- #: s2member/includes/classes/files-in.inc.php:1141
477
- #: s2member/includes/classes/files-in.inc.php:1547
478
msgctxt "s2member-admin"
479
msgid "Unable to create Amazon CloudFront Downloads Distro. Connection failed."
480
msgstr ""
@@ -482,19 +482,19 @@ msgstr ""
482
#. translators: In this translation, `%s` may be filled with an English
483
#. message, which comes from the Amazon CloudFront API call. Feel free to
484
#. exclude `%s` if you like.
485
- #: s2member/includes/classes/files-in.inc.php:1145
486
- #: s2member/includes/classes/files-in.inc.php:1317
487
msgctxt "s2member-admin"
488
msgid "Unable to create Amazon CloudFront Origin Access Identity. %s"
489
msgstr ""
490
491
- #: s2member/includes/classes/files-in.inc.php:1148
492
- #: s2member/includes/classes/files-in.inc.php:1320
493
msgctxt "s2member-admin"
494
msgid "Unable to create Amazon CloudFront Origin Access Identity. Connection failed."
495
msgstr ""
496
497
- #: s2member/includes/classes/files-in.inc.php:1151
498
msgctxt "s2member-admin"
499
msgid "Unable to clear existing Amazon CloudFront Origin Access Identity."
500
msgstr ""
@@ -502,19 +502,19 @@ msgstr ""
502
#. translators: In this translation, `%s` may be filled with an English
503
#. message, which comes from the Amazon CloudFront API call. Feel free to
504
#. exclude `%s` if you like.
505
- #: s2member/includes/classes/files-in.inc.php:1155
506
- #: s2member/includes/classes/files-in.inc.php:1226
507
msgctxt "s2member-admin"
508
msgid "Unable to acquire existing Amazon CloudFront Origin Access Identity. %s"
509
msgstr ""
510
511
- #: s2member/includes/classes/files-in.inc.php:1158
512
- #: s2member/includes/classes/files-in.inc.php:1229
513
msgctxt "s2member-admin"
514
msgid "Unable to acquire existing Amazon CloudFront Origin Access Identity. Connection failed."
515
msgstr ""
516
517
- #: s2member/includes/classes/files-in.inc.php:1161
518
msgctxt "s2member-admin"
519
msgid "Unable to clear existing Amazon CloudFront Streaming Distro."
520
msgstr ""
@@ -522,17 +522,17 @@ msgstr ""
522
#. translators: In this translation, `%s` may be filled with an English
523
#. message, which comes from the Amazon CloudFront API call. Feel free to
524
#. exclude `%s` if you like.
525
- #: s2member/includes/classes/files-in.inc.php:1165
526
msgctxt "s2member-admin"
527
msgid "Unable to acquire existing Amazon CloudFront Streaming Distro. %s"
528
msgstr ""
529
530
- #: s2member/includes/classes/files-in.inc.php:1168
531
msgctxt "s2member-admin"
532
msgid "Unable to acquire existing Amazon CloudFront Streaming Distro. Connection failed."
533
msgstr ""
534
535
- #: s2member/includes/classes/files-in.inc.php:1171
536
msgctxt "s2member-admin"
537
msgid "Unable to clear existing Amazon CloudFront Downloads Distro."
538
msgstr ""
@@ -540,22 +540,22 @@ msgstr ""
540
#. translators: In this translation, `%s` may be filled with an English
541
#. message, which comes from the Amazon CloudFront API call. Feel free to
542
#. exclude `%s` if you like.
543
- #: s2member/includes/classes/files-in.inc.php:1175
544
msgctxt "s2member-admin"
545
msgid "Unable to acquire existing Amazon CloudFront Downloads Distro. %s"
546
msgstr ""
547
548
- #: s2member/includes/classes/files-in.inc.php:1178
549
msgctxt "s2member-admin"
550
msgid "Unable to acquire existing Amazon CloudFront Downloads Distro. Connection failed."
551
msgstr ""
552
553
- #: s2member/includes/classes/files-in.inc.php:1181
554
msgctxt "s2member-admin"
555
msgid "Unable to auto-configure Amazon CloudFront Distros. Incomplete Amazon CloudFront configuration options. Missing of one: Amazon CloudFront Private Key-Pair-ID, or Private Key file contents."
556
msgstr ""
557
558
- #: s2member/includes/classes/files-in.inc.php:1184
559
msgctxt "s2member-admin"
560
msgid "Unable to auto-configure Amazon S3/CloudFront Distros. Incomplete Amazon S3 configuration options. Missing one of: Amazon S3 Bucket, Access Key, or Secret Key. You must provide s2Member with an Amazon S3 configuration before enabling CloudFront."
561
msgstr ""
@@ -563,34 +563,34 @@ msgstr ""
563
#. translators: In this translation, `%s` may be filled with an English
564
#. message, which comes from the Amazon CloudFront API call. Feel free to
565
#. exclude `%s` if you like.
566
- #: s2member/includes/classes/files-in.inc.php:1222
567
msgctxt "s2member-admin"
568
msgid "Existing Amazon CloudFront Origin Access Identity NOT found. %s"
569
msgstr ""
570
571
- #: s2member/includes/classes/files-in.inc.php:1232
572
msgctxt "s2member-admin"
573
msgid "Unable to acquire existing Amazon CloudFront Origin Access Identity. Invalid Access ID."
574
msgstr ""
575
576
- #: s2member/includes/classes/files-in.inc.php:1274
577
msgctxt "s2member-admin"
578
msgid "Unable to delete existing Amazon CloudFront Origin Access Identity. Connection failed."
579
msgstr ""
580
581
- #: s2member/includes/classes/files-in.inc.php:1277
582
msgctxt "s2member-admin"
583
msgid "Unable to delete existing Amazon CloudFront Origin Access Identity. Invalid Access ID, ETag, or XML config."
584
msgstr ""
585
586
- #: s2member/includes/classes/files-in.inc.php:1304
587
- #: s2member/includes/classes/files-in.inc.php:1531
588
- #: s2member/includes/classes/files-in.inc.php:1553
589
msgctxt "s2member-admin"
590
msgid "Created by s2Member, for S3 Bucket: %s."
591
msgstr ""
592
593
- #: s2member/includes/classes/files-in.inc.php:1313
594
msgctxt "s2member-admin"
595
msgid "Unable to create/read Amazon CloudFront Origin Access Identity. Unexpected response."
596
msgstr ""
@@ -598,7 +598,7 @@ msgstr ""
598
#. translators: In this translation, `%s` may be filled with an English
599
#. message, which comes from the Amazon CloudFront API call. Feel free to
600
#. exclude `%s` if you like.
601
- #: s2member/includes/classes/files-in.inc.php:1359
602
msgctxt "s2member-admin"
603
msgid "Existing Amazon CloudFront Distro NOT found. %s"
604
msgstr ""
@@ -606,17 +606,17 @@ msgstr ""
606
#. translators: In this translation, `%s` may be filled with an English
607
#. message, which comes from the Amazon CloudFront API call. Feel free to
608
#. exclude `%s` if you like.
609
- #: s2member/includes/classes/files-in.inc.php:1363
610
msgctxt "s2member-admin"
611
msgid "Unable to acquire existing Amazon CloudFront Distro. %s"
612
msgstr ""
613
614
- #: s2member/includes/classes/files-in.inc.php:1366
615
msgctxt "s2member-admin"
616
msgid "Unable to acquire existing Amazon CloudFront Distro. Connection failed."
617
msgstr ""
618
619
- #: s2member/includes/classes/files-in.inc.php:1369
620
msgctxt "s2member-admin"
621
msgid "Unable to acquire existing Amazon CloudFront Distro. Invalid Distro ID and/or Distro type."
622
msgstr ""
@@ -624,24 +624,24 @@ msgstr ""
624
#. translators: In this translation, `%s` may be filled with an English
625
#. message, which comes from the Amazon CloudFront API call. Feel free to
626
#. exclude `%s` if you like.
627
- #: s2member/includes/classes/files-in.inc.php:1413
628
- #: s2member/includes/classes/files-in.inc.php:1488
629
msgctxt "s2member-admin"
630
msgid "Unable to disable existing Amazon CloudFront Distro. %s"
631
msgstr ""
632
633
- #: s2member/includes/classes/files-in.inc.php:1416
634
- #: s2member/includes/classes/files-in.inc.php:1491
635
msgctxt "s2member-admin"
636
msgid "Unable to disable existing Amazon CloudFront Distro. Connection failed."
637
msgstr ""
638
639
- #: s2member/includes/classes/files-in.inc.php:1419
640
msgctxt "s2member-admin"
641
msgid "Existing Amazon CloudFront Distro cannot be disabled at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
642
msgstr ""
643
644
- #: s2member/includes/classes/files-in.inc.php:1425
645
msgctxt "s2member-admin"
646
msgid "Unable to disable existing Amazon CloudFront Distro. Invalid Distro ID, ETag, or XML config."
647
msgstr ""
@@ -649,12 +649,12 @@ msgstr ""
649
#. translators: In this translation, `%s` may be filled with an English
650
#. message, which comes from the Amazon CloudFront API call. Feel free to
651
#. exclude `%s` if you like.
652
- #: s2member/includes/classes/files-in.inc.php:1470
653
msgctxt "s2member-admin"
654
msgid "Unable to delete existing Amazon CloudFront Distro. %s"
655
msgstr ""
656
657
- #: s2member/includes/classes/files-in.inc.php:1473
658
msgctxt "s2member-admin"
659
msgid "Unable to delete existing Amazon CloudFront Distro. Connection failed."
660
msgstr ""
@@ -662,7 +662,7 @@ msgstr ""
662
#. translators: In this translation, `%s` may be filled with an English
663
#. message, which comes from the Amazon CloudFront API call. Feel free to
664
#. exclude `%s` if you like.
665
- #: s2member/includes/classes/files-in.inc.php:1477
666
msgctxt "s2member-admin"
667
msgid "Existing Amazon CloudFront Distro cannot be deleted at this time. Still in a `pending` state after having been disabled by s2Member. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
668
msgstr ""
@@ -670,37 +670,37 @@ msgstr ""
670
#. translators: In this translation, `%s` may be filled with an English
671
#. message, which comes from the Amazon CloudFront API call. Feel free to
672
#. exclude `%s` if you like.
673
- #: s2member/includes/classes/files-in.inc.php:1481
674
msgctxt "s2member-admin"
675
msgid "Unable to check status of existing Amazon CloudFront Distro. %s"
676
msgstr ""
677
678
- #: s2member/includes/classes/files-in.inc.php:1484
679
msgctxt "s2member-admin"
680
msgid "Unable to check status of existing Amazon CloudFront Distro. Connection failed."
681
msgstr ""
682
683
- #: s2member/includes/classes/files-in.inc.php:1494
684
msgctxt "s2member-admin"
685
msgid "Existing Amazon CloudFront Distro cannot be deleted at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
686
msgstr ""
687
688
- #: s2member/includes/classes/files-in.inc.php:1497
689
msgctxt "s2member-admin"
690
msgid "Unable to delete existing Amazon CloudFront Distro. Invalid Distro ID or ETag."
691
msgstr ""
692
693
- #: s2member/includes/classes/files-in.inc.php:1540
694
msgctxt "s2member-admin"
695
msgid "Unable to create/read Amazon CloudFront Downloads Distro. Unexpected response."
696
msgstr ""
697
698
- #: s2member/includes/classes/files-in.inc.php:1562
699
msgctxt "s2member-admin"
700
msgid "Unable to create/read Amazon CloudFront Streaming Distro. Unexpected response."
701
msgstr ""
702
703
- #: s2member/includes/classes/files-in.inc.php:1573
704
msgctxt "s2member-admin"
705
msgid "Unable to create Amazon CloudFront Distro. Invalid Distro type."
706
msgstr ""
@@ -1033,11 +1033,11 @@ msgctxt "s2member-front"
1033
msgid "—"
1034
msgstr ""
1035
1036
- #: s2member/includes/classes/sc-paypal-button-e.inc.php:77
1037
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:73
1038
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:97
1039
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:152
1040
- #: s2member/includes/classes/sc-paypal-button-in.inc.php:208
1041
#: s2member/includes/templates/buttons/paypal-cancellation-button.php:7
1042
#: s2member/includes/templates/buttons/paypal-ccaps-checkout-button.php:34
1043
#: s2member/includes/templates/buttons/paypal-checkout-button.php:46
@@ -1049,37 +1049,37 @@ msgctxt "s2member-front paypal-button-lang-code"
1049
msgid "en_US"
1050
msgstr ""
1051
1052
- #: s2member/includes/classes/translations.inc.php:80
1053
msgctxt "s2member-front"
1054
msgid "Username:"
1055
msgstr ""
1056
1057
- #: s2member/includes/classes/translations.inc.php:84
1058
msgctxt "s2member-front"
1059
msgid "My Password:"
1060
msgstr ""
1061
1062
- #: s2member/includes/classes/translations.inc.php:91
1063
msgctxt "s2member-front"
1064
msgid "Username *"
1065
msgstr ""
1066
1067
- #: s2member/includes/classes/translations.inc.php:95
1068
msgctxt "s2member-front"
1069
msgid "Password *"
1070
msgstr ""
1071
1072
- #: s2member/includes/classes/translations.inc.php:99
1073
msgctxt "s2member-front"
1074
msgid "Email Address *"
1075
msgstr ""
1076
1077
- #: s2member/includes/classes/translations.inc.php:106
1078
msgctxt "s2member-front"
1079
msgid "Registration complete. Please log in."
1080
msgstr ""
1081
1082
- #: s2member/includes/classes/translations.inc.php:113
1083
msgctxt "s2member-front"
1084
msgid ""
1085
"You have been invited to join `%1$s` at\n"
@@ -1088,25 +1088,25 @@ msgid ""
1088
"%4$s\n"
1089
msgstr ""
1090
1091
- #: s2member/includes/classes/translations.inc.php:120
1092
msgctxt "s2member-front"
1093
msgid "Your account is now active. <a href=\"%1$s\">Visit site</a> or <a href=\"%2$s\">Log in</a>."
1094
msgstr ""
1095
1096
- #: s2member/includes/classes/translations.inc.php:140
1097
- #: s2member/includes/classes/translations.inc.php:161
1098
msgctxt "s2member-front"
1099
msgid "By filling out the form below, you can <strong>add a site to your account</strong>."
1100
msgstr ""
1101
1102
- #: s2member/includes/classes/translations.inc.php:140
1103
msgctxt "s2member-front"
1104
msgid "You may create <strong>%s</strong> site."
1105
msgid_plural "You may create up to <strong>%s</strong> sites."
1106
msgstr[0] ""
1107
msgstr[1] ""
1108
1109
- #: s2member/includes/classes/translations.inc.php:161
1110
msgctxt "s2member-front"
1111
msgid "You may create up to <strong>%s</strong> site."
1112
msgid_plural "You may create up to <strong>%s</strong> sites."
2
# This file is distributed under the same license as the package.
3
msgid ""
4
msgstr ""
5
+ "Project-Id-Version: 160423\n"
6
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
+ "POT-Creation-Date: 2016-04-23 17:22:23+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
401
msgid "Unable to auto-configure existing Amazon S3 Bucket ACLs. Incomplete Amazon S3 configuration options. Missing one of: Amazon S3 Bucket, Access Key, or Secret Key."
402
msgstr ""
403
404
+ #: s2member/includes/classes/files-in.inc.php:1042
405
msgctxt "s2member-admin"
406
msgid "Unable to delete existing Amazon CloudFront Downloads Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
407
msgstr ""
409
#. translators: In this translation, `%s` may be filled with an English
410
#. message, which comes from the Amazon CloudFront API call. Feel free to
411
#. exclude `%s` if you like.
412
+ #: s2member/includes/classes/files-in.inc.php:1049
413
msgctxt "s2member-admin"
414
msgid "Unable to delete existing Amazon CloudFront Downloads Distro. %s"
415
msgstr ""
416
417
+ #: s2member/includes/classes/files-in.inc.php:1061
418
msgctxt "s2member-admin"
419
msgid "Unable to delete existing Amazon CloudFront Streaming Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
420
msgstr ""
422
#. translators: In this translation, `%s` may be filled with an English
423
#. message, which comes from the Amazon CloudFront API call. Feel free to
424
#. exclude `%s` if you like.
425
+ #: s2member/includes/classes/files-in.inc.php:1068
426
msgctxt "s2member-admin"
427
msgid "Unable to delete existing Amazon CloudFront Streaming Distro. %s"
428
msgstr ""
430
#. translators: In this translation, `%s` may be filled with an English
431
#. message, which comes from the Amazon CloudFront API call. Feel free to
432
#. exclude `%s` if you like.
433
+ #: s2member/includes/classes/files-in.inc.php:1084
434
+ #: s2member/includes/classes/files-in.inc.php:1272
435
msgctxt "s2member-admin"
436
msgid "Unable to delete existing Amazon CloudFront Origin Access Identity. %s"
437
msgstr ""
439
#. translators: In this translation, `%s` may be filled with an English
440
#. message, which comes from the Amazon S3 API call. Feel free to exclude `%s`
441
#. if you like.
442
+ #: s2member/includes/classes/files-in.inc.php:1125
443
msgctxt "s2member-admin"
444
msgid "Unable to update existing Amazon S3 ACLs. %s"
445
msgstr ""
446
447
+ #: s2member/includes/classes/files-in.inc.php:1128
448
msgctxt "s2member-admin"
449
msgid "Unable to update existing Amazon S3 ACLs. Connection failed."
450
msgstr ""
452
#. translators: In this translation, `%s` may be filled with an English
453
#. message, which comes from the Amazon CloudFront API call. Feel free to
454
#. exclude `%s` if you like.
455
+ #: s2member/includes/classes/files-in.inc.php:1132
456
+ #: s2member/includes/classes/files-in.inc.php:1567
457
msgctxt "s2member-admin"
458
msgid "Unable to create Amazon CloudFront Streaming Distro. %s"
459
msgstr ""
460
461
+ #: s2member/includes/classes/files-in.inc.php:1135
462
+ #: s2member/includes/classes/files-in.inc.php:1570
463
msgctxt "s2member-admin"
464
msgid "Unable to create Amazon CloudFront Streaming Distro. Connection failed."
465
msgstr ""
467
#. translators: In this translation, `%s` may be filled with an English
468
#. message, which comes from the Amazon CloudFront API call. Feel free to
469
#. exclude `%s` if you like.
470
+ #: s2member/includes/classes/files-in.inc.php:1139
471
+ #: s2member/includes/classes/files-in.inc.php:1545
472
msgctxt "s2member-admin"
473
msgid "Unable to create Amazon CloudFront Downloads Distro. %s"
474
msgstr ""
475
476
+ #: s2member/includes/classes/files-in.inc.php:1142
477
+ #: s2member/includes/classes/files-in.inc.php:1548
478
msgctxt "s2member-admin"
479
msgid "Unable to create Amazon CloudFront Downloads Distro. Connection failed."
480
msgstr ""
482
#. translators: In this translation, `%s` may be filled with an English
483
#. message, which comes from the Amazon CloudFront API call. Feel free to
484
#. exclude `%s` if you like.
485
+ #: s2member/includes/classes/files-in.inc.php:1146
486
+ #: s2member/includes/classes/files-in.inc.php:1318
487
msgctxt "s2member-admin"
488
msgid "Unable to create Amazon CloudFront Origin Access Identity. %s"
489
msgstr ""
490
491
+ #: s2member/includes/classes/files-in.inc.php:1149
492
+ #: s2member/includes/classes/files-in.inc.php:1321
493
msgctxt "s2member-admin"
494
msgid "Unable to create Amazon CloudFront Origin Access Identity. Connection failed."
495
msgstr ""
496
497
+ #: s2member/includes/classes/files-in.inc.php:1152
498
msgctxt "s2member-admin"
499
msgid "Unable to clear existing Amazon CloudFront Origin Access Identity."
500
msgstr ""
502
#. translators: In this translation, `%s` may be filled with an English
503
#. message, which comes from the Amazon CloudFront API call. Feel free to
504
#. exclude `%s` if you like.
505
+ #: s2member/includes/classes/files-in.inc.php:1156
506
+ #: s2member/includes/classes/files-in.inc.php:1227
507
msgctxt "s2member-admin"
508
msgid "Unable to acquire existing Amazon CloudFront Origin Access Identity. %s"
509
msgstr ""
510
511
+ #: s2member/includes/classes/files-in.inc.php:1159
512
+ #: s2member/includes/classes/files-in.inc.php:1230
513
msgctxt "s2member-admin"
514
msgid "Unable to acquire existing Amazon CloudFront Origin Access Identity. Connection failed."
515
msgstr ""
516
517
+ #: s2member/includes/classes/files-in.inc.php:1162
518
msgctxt "s2member-admin"
519
msgid "Unable to clear existing Amazon CloudFront Streaming Distro."
520
msgstr ""
522
#. translators: In this translation, `%s` may be filled with an English
523
#. message, which comes from the Amazon CloudFront API call. Feel free to
524
#. exclude `%s` if you like.
525
+ #: s2member/includes/classes/files-in.inc.php:1166
526
msgctxt "s2member-admin"
527
msgid "Unable to acquire existing Amazon CloudFront Streaming Distro. %s"
528
msgstr ""
529
530
+ #: s2member/includes/classes/files-in.inc.php:1169
531
msgctxt "s2member-admin"
532
msgid "Unable to acquire existing Amazon CloudFront Streaming Distro. Connection failed."
533
msgstr ""
534
535
+ #: s2member/includes/classes/files-in.inc.php:1172
536
msgctxt "s2member-admin"
537
msgid "Unable to clear existing Amazon CloudFront Downloads Distro."
538
msgstr ""
540
#. translators: In this translation, `%s` may be filled with an English
541
#. message, which comes from the Amazon CloudFront API call. Feel free to
542
#. exclude `%s` if you like.
543
+ #: s2member/includes/classes/files-in.inc.php:1176
544
msgctxt "s2member-admin"
545
msgid "Unable to acquire existing Amazon CloudFront Downloads Distro. %s"
546
msgstr ""
547
548
+ #: s2member/includes/classes/files-in.inc.php:1179
549
msgctxt "s2member-admin"
550
msgid "Unable to acquire existing Amazon CloudFront Downloads Distro. Connection failed."
551
msgstr ""
552
553
+ #: s2member/includes/classes/files-in.inc.php:1182
554
msgctxt "s2member-admin"
555
msgid "Unable to auto-configure Amazon CloudFront Distros. Incomplete Amazon CloudFront configuration options. Missing of one: Amazon CloudFront Private Key-Pair-ID, or Private Key file contents."
556
msgstr ""
557
558
+ #: s2member/includes/classes/files-in.inc.php:1185
559
msgctxt "s2member-admin"
560
msgid "Unable to auto-configure Amazon S3/CloudFront Distros. Incomplete Amazon S3 configuration options. Missing one of: Amazon S3 Bucket, Access Key, or Secret Key. You must provide s2Member with an Amazon S3 configuration before enabling CloudFront."
561
msgstr ""
563
#. translators: In this translation, `%s` may be filled with an English
564
#. message, which comes from the Amazon CloudFront API call. Feel free to
565
#. exclude `%s` if you like.
566
+ #: s2member/includes/classes/files-in.inc.php:1223
567
msgctxt "s2member-admin"
568
msgid "Existing Amazon CloudFront Origin Access Identity NOT found. %s"
569
msgstr ""
570
571
+ #: s2member/includes/classes/files-in.inc.php:1233
572
msgctxt "s2member-admin"
573
msgid "Unable to acquire existing Amazon CloudFront Origin Access Identity. Invalid Access ID."
574
msgstr ""
575
576
+ #: s2member/includes/classes/files-in.inc.php:1275
577
msgctxt "s2member-admin"
578
msgid "Unable to delete existing Amazon CloudFront Origin Access Identity. Connection failed."
579
msgstr ""
580
581
+ #: s2member/includes/classes/files-in.inc.php:1278
582
msgctxt "s2member-admin"
583
msgid "Unable to delete existing Amazon CloudFront Origin Access Identity. Invalid Access ID, ETag, or XML config."
584
msgstr ""
585
586
+ #: s2member/includes/classes/files-in.inc.php:1305
587
+ #: s2member/includes/classes/files-in.inc.php:1532
588
+ #: s2member/includes/classes/files-in.inc.php:1554
589
msgctxt "s2member-admin"
590
msgid "Created by s2Member, for S3 Bucket: %s."
591
msgstr ""
592
593
+ #: s2member/includes/classes/files-in.inc.php:1314
594
msgctxt "s2member-admin"
595
msgid "Unable to create/read Amazon CloudFront Origin Access Identity. Unexpected response."
596
msgstr ""
598
#. translators: In this translation, `%s` may be filled with an English
599
#. message, which comes from the Amazon CloudFront API call. Feel free to
600
#. exclude `%s` if you like.
601
+ #: s2member/includes/classes/files-in.inc.php:1360
602
msgctxt "s2member-admin"
603
msgid "Existing Amazon CloudFront Distro NOT found. %s"
604
msgstr ""
606
#. translators: In this translation, `%s` may be filled with an English
607
#. message, which comes from the Amazon CloudFront API call. Feel free to
608
#. exclude `%s` if you like.
609
+ #: s2member/includes/classes/files-in.inc.php:1364
610
msgctxt "s2member-admin"
611
msgid "Unable to acquire existing Amazon CloudFront Distro. %s"
612
msgstr ""
613
614
+ #: s2member/includes/classes/files-in.inc.php:1367
615
msgctxt "s2member-admin"
616
msgid "Unable to acquire existing Amazon CloudFront Distro. Connection failed."
617
msgstr ""
618
619
+ #: s2member/includes/classes/files-in.inc.php:1370
620
msgctxt "s2member-admin"
621
msgid "Unable to acquire existing Amazon CloudFront Distro. Invalid Distro ID and/or Distro type."
622
msgstr ""
624
#. translators: In this translation, `%s` may be filled with an English
625
#. message, which comes from the Amazon CloudFront API call. Feel free to
626
#. exclude `%s` if you like.
627
+ #: s2member/includes/classes/files-in.inc.php:1414
628
+ #: s2member/includes/classes/files-in.inc.php:1489
629
msgctxt "s2member-admin"
630
msgid "Unable to disable existing Amazon CloudFront Distro. %s"
631
msgstr ""
632
633
+ #: s2member/includes/classes/files-in.inc.php:1417
634
+ #: s2member/includes/classes/files-in.inc.php:1492
635
msgctxt "s2member-admin"
636
msgid "Unable to disable existing Amazon CloudFront Distro. Connection failed."
637
msgstr ""
638
639
+ #: s2member/includes/classes/files-in.inc.php:1420
640
msgctxt "s2member-admin"
641
msgid "Existing Amazon CloudFront Distro cannot be disabled at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
642
msgstr ""
643
644
+ #: s2member/includes/classes/files-in.inc.php:1426
645
msgctxt "s2member-admin"
646
msgid "Unable to disable existing Amazon CloudFront Distro. Invalid Distro ID, ETag, or XML config."
647
msgstr ""
649
#. translators: In this translation, `%s` may be filled with an English
650
#. message, which comes from the Amazon CloudFront API call. Feel free to
651
#. exclude `%s` if you like.
652
+ #: s2member/includes/classes/files-in.inc.php:1471
653
msgctxt "s2member-admin"
654
msgid "Unable to delete existing Amazon CloudFront Distro. %s"
655
msgstr ""
656
657
+ #: s2member/includes/classes/files-in.inc.php:1474
658
msgctxt "s2member-admin"
659
msgid "Unable to delete existing Amazon CloudFront Distro. Connection failed."
660
msgstr ""
662
#. translators: In this translation, `%s` may be filled with an English
663
#. message, which comes from the Amazon CloudFront API call. Feel free to
664
#. exclude `%s` if you like.
665
+ #: s2member/includes/classes/files-in.inc.php:1478
666
msgctxt "s2member-admin"
667
msgid "Existing Amazon CloudFront Distro cannot be deleted at this time. Still in a `pending` state after having been disabled by s2Member. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
668
msgstr ""
670
#. translators: In this translation, `%s` may be filled with an English
671
#. message, which comes from the Amazon CloudFront API call. Feel free to
672
#. exclude `%s` if you like.
673
+ #: s2member/includes/classes/files-in.inc.php:1482
674
msgctxt "s2member-admin"
675
msgid "Unable to check status of existing Amazon CloudFront Distro. %s"
676
msgstr ""
677
678
+ #: s2member/includes/classes/files-in.inc.php:1485
679
msgctxt "s2member-admin"
680
msgid "Unable to check status of existing Amazon CloudFront Distro. Connection failed."
681
msgstr ""
682
683
+ #: s2member/includes/classes/files-in.inc.php:1495
684
msgctxt "s2member-admin"
685
msgid "Existing Amazon CloudFront Distro cannot be deleted at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
686
msgstr ""
687
688
+ #: s2member/includes/classes/files-in.inc.php:1498
689
msgctxt "s2member-admin"
690
msgid "Unable to delete existing Amazon CloudFront Distro. Invalid Distro ID or ETag."
691
msgstr ""
692
693
+ #: s2member/includes/classes/files-in.inc.php:1541
694
msgctxt "s2member-admin"
695
msgid "Unable to create/read Amazon CloudFront Downloads Distro. Unexpected response."
696
msgstr ""
697
698
+ #: s2member/includes/classes/files-in.inc.php:1563
699
msgctxt "s2member-admin"
700
msgid "Unable to create/read Amazon CloudFront Streaming Distro. Unexpected response."
701
msgstr ""
702
703
+ #: s2member/includes/classes/files-in.inc.php:1574
704
msgctxt "s2member-admin"
705
msgid "Unable to create Amazon CloudFront Distro. Invalid Distro type."
706
msgstr ""
1033
msgid "—"
1034
msgstr ""
1035
1036
+ #: s2member/includes/classes/sc-paypal-button-e.inc.php:82
1037
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:76
1038
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:100
1039
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:155
1040
+ #: s2member/includes/classes/sc-paypal-button-in.inc.php:211
1041
#: s2member/includes/templates/buttons/paypal-cancellation-button.php:7
1042
#: s2member/includes/templates/buttons/paypal-ccaps-checkout-button.php:34
1043
#: s2member/includes/templates/buttons/paypal-checkout-button.php:46
1049
msgid "en_US"
1050
msgstr ""
1051
1052
+ #: s2member/includes/classes/translations.inc.php:82
1053
msgctxt "s2member-front"
1054
msgid "Username:"
1055
msgstr ""
1056
1057
+ #: s2member/includes/classes/translations.inc.php:86
1058
msgctxt "s2member-front"
1059
msgid "My Password:"
1060
msgstr ""
1061
1062
+ #: s2member/includes/classes/translations.inc.php:93
1063
msgctxt "s2member-front"
1064
msgid "Username *"
1065
msgstr ""
1066
1067
+ #: s2member/includes/classes/translations.inc.php:97
1068
msgctxt "s2member-front"
1069
msgid "Password *"
1070
msgstr ""
1071
1072
+ #: s2member/includes/classes/translations.inc.php:101
1073
msgctxt "s2member-front"
1074
msgid "Email Address *"
1075
msgstr ""
1076
1077
+ #: s2member/includes/classes/translations.inc.php:108
1078
msgctxt "s2member-front"
1079
msgid "Registration complete. Please log in."
1080
msgstr ""
1081
1082
+ #: s2member/includes/classes/translations.inc.php:115
1083
msgctxt "s2member-front"
1084
msgid ""
1085
"You have been invited to join `%1$s` at\n"
1088
"%4$s\n"
1089
msgstr ""
1090
1091
+ #: s2member/includes/classes/translations.inc.php:122
1092
msgctxt "s2member-front"
1093
msgid "Your account is now active. <a href=\"%1$s\">Visit site</a> or <a href=\"%2$s\">Log in</a>."
1094
msgstr ""
1095
1096
+ #: s2member/includes/classes/translations.inc.php:142
1097
+ #: s2member/includes/classes/translations.inc.php:163
1098
msgctxt "s2member-front"
1099
msgid "By filling out the form below, you can <strong>add a site to your account</strong>."
1100
msgstr ""
1101
1102
+ #: s2member/includes/classes/translations.inc.php:142
1103
msgctxt "s2member-front"
1104
msgid "You may create <strong>%s</strong> site."
1105
msgid_plural "You may create up to <strong>%s</strong> sites."
1106
msgstr[0] ""
1107
msgstr[1] ""
1108
1109
+ #: s2member/includes/classes/translations.inc.php:163
1110
msgctxt "s2member-front"
1111
msgid "You may create up to <strong>%s</strong> site."
1112
msgid_plural "You may create up to <strong>%s</strong> sites."
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
3
- Version: 160303
4
- Stable tag: 160303
5
6
SSL Compatible: yes
7
bbPress® Compatible: yes
@@ -169,12 +169,51 @@ Released under the terms of the [GNU General Public License](http://www.gnu.org/
169
170
== Upgrade Notice ==
171
172
- = v160303 =
173
174
(Maintenance Release) Upgrade immediately.
175
176
== Changelog ==
177
178
= v160303 =
179
180
- (s2Member/s2Member Pro) **Comet Cache Compat.:** This release improves compatibility with Comet Cache (formerly ZenCache), whenever you have it configured to cache logged-in users. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/888). Props @KTS915 for reporting!
1
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
3
+ Version: 160423
4
+ Stable tag: 160423
5
6
SSL Compatible: yes
7
bbPress® Compatible: yes
169
170
== Upgrade Notice ==
171
172
+ = v160423 =
173
174
(Maintenance Release) Upgrade immediately.
175
176
== Changelog ==
177
178
+ = v160423 =
179
+
180
+ - (s2Member/s2Member Pro) **WP v4.5 Compatibility.** This release offers full compatibility with the latest release of WordPress v4.5. Nothing major was changed for standard WordPress installations, but there were a few subtle tweaks here and there to improve v4.5 compatibility. We encourage all users to upgrade right away.
181
+
182
+ **NOTE: WP v4.5 for Multisite Networks running s2Member Pro:** This release corrects a bug first introduced in the previous release of s2Member Pro that resulted in an error message (`Uncaught Error: Class 'c_ws_plugin__s2member_mms_patches' not found`) when updating to WP v4.5. It has been corrected in this release, but in order to avoid this problem altogether please follow this procedure when upgrading WordPress.
183
+
184
+ **WP v4.5 Multisite Upgrade Procedure:**
185
+
186
+ - Upgrade s2Member and s2Member Pro ​_before_​ updating WordPress core.
187
+ - Then upgrade WordPress core and observe that Multisite Patches are applied properly.
188
+
189
+ _If you have already upgraded to WP v4.5 and worked past this issue by patching manually, that's fine. You can still upgrade s2Member and s2Member Pro. After the upgrade you may feel free to enable automatic patching again if that's desirable._
190
+
191
+ - (s2Member/s2Member Pro) **Bug Fix:** This release corrects a bug first introduced in the previous release which was causing a PHP warning about `cf_stream_extn_resource_exclusions`. A symptom was to have mysterious problems with `[s2Stream /]` or the `[s2File /]` shortcode. Fixed in this release. Props at @raamdev @renzms for reporting. See also [this GitHub issue](https://github.com/websharks/s2member/issues/901) for details.
192
+
193
+ - (s2Member/s2Member Pro) **PayPal SSL Compatibility:** This release of s2Member provides an `https://` IPN URL for PayPal IPN integrations. It also provides a helpful note (in the Dashboard) about a new requirement that PayPal has with respect to the IPN URL that you configure at PayPal.com. s2Member has been updated to help you with this new requirement.
194
+
195
+ **New PayPal.com IPN Requirement:** PayPal.com is now requiring any new IPN URL that you configure to be entered as an `https://` URL; i.e., if you log into your PayPal.com account and try to configure a _brand new_ IPN URL, that URL _must_ use `https://`. PayPal.com will refuse it otherwise.
196
+
197
+ However, the `notify_url=` parameter in standard PayPal buttons should continue to work with either `http://` or `https://`, and any existing configurations out there that still use an `http://` IPN URL should continue to work as well. So this is about planning for the future. We have been told that PayPal will eventually _require_ that all IPN URLs use an `https://` protocol; i.e., they will eventually stop supporting `http://` IPN URLs altogether (at some point in the future), they are not giving anyone a date yet. For this reason we strongly suggest that you [review the details given here](https://github.com/websharks/s2member/issues/914).
198
+
199
+ Since PayPal is moving in a direction that will eventually require all site owners to have an SSL certificate in the future, s2Member's instructions (and the IPN URL it provides you with) will now be presented in the form of an `https://` URL with additional details to help you through the process of configuring an IPN handler for PayPal.
200
+
201
+ See: **Dashboard → s2Member → PayPal Options → PayPal IPN Integration**
202
+
203
+ Props @codeforest for reporting. See [this GitHub issue](https://github.com/websharks/s2member/issues/914) for further details.
204
+
205
+ - (s2Member/s2Member Pro) **Bug Fix:** Email field on Registration page not shown as required via `*` symbol like other fields in this form. Caused by a change in WordPress core. Fixed in this release. Props @spottydog63 @renzms. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/907) for details.
206
+
207
+ - (s2Member/s2Member Pro) **Bug Fix:** `E_NOTICE` level errors in cache handler when running in `WP_DEBUG` mode. Props at @KTS915 for reporting. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/917).
208
+
209
+ - (s2Member/s2Member Pro) **i18n Compatibility:** This release of s2Member moves the `load_plugin_textdomain()` call into the `plugins_loaded` hook instead of it being run on `init`. Props @KTS915 for reporting. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/899) for details.
210
+
211
+ - (s2Member Pro) **Multisite Patches:** Fixed a bug (`Uncaught Error: Class 'c_ws_plugin__s2member_mms_patches' not found`) whenever WordPress was being updated and Multisite Patches were being applied in the pro version of s2Member. See: [this GitHub issue](https://github.com/websharks/s2member/issues/929) for details.
212
+
213
+ - (s2Member/s2Member Pro) **Security Enhancement:** This release of s2Member defaults PayPal Button Encryption to a value of `on` instead of `off`; i.e., there is a new default behavior. Existing s2Member installations are unaffected by this change, but if you install s2Member on a new site you will notice that (if using PayPal Buttons), Button Encryption will be enabled by default.
214
+
215
+ _Note that in order for Button Encryption to work, you must fill-in the API credentials for s2Member under: **Dashboard → s2Member → PayPal Options → PayPal Account Details**_
216
+
217
= v160303 =
218
219
- (s2Member/s2Member Pro) **Comet Cache Compat.:** This release improves compatibility with Comet Cache (formerly ZenCache), whenever you have it configured to cache logged-in users. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/888). Props @KTS915 for reporting!
s2member.php CHANGED
@@ -19,8 +19,8 @@
19
*/
20
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
22
- Version: 160303
23
- Stable tag: 160303
24
25
SSL Compatible: yes
26
bbPress Compatible: yes
@@ -81,7 +81,7 @@ if(!defined('WPINC')) // MUST have WordPress.
81
* @var string
82
*/
83
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
84
- define('WS_PLUGIN__S2MEMBER_VERSION', '160303' /* !#distro-version#! */);
85
/**
86
* Minimum PHP version required to run s2Member.
87
*
@@ -111,7 +111,7 @@ if(!defined('WS_PLUGIN__S2MEMBER_MIN_WP_VERSION'))
111
* @var string
112
*/
113
if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
114
- define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '160303' /* !#distro-version#! */);
115
/*
116
Several compatibility checks.
117
If all pass, load the s2Member plugin.
19
*/
20
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
22
+ Version: 160423
23
+ Stable tag: 160423
24
25
SSL Compatible: yes
26
bbPress Compatible: yes
81
* @var string
82
*/
83
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
84
+ define('WS_PLUGIN__S2MEMBER_VERSION', '160423' /* !#distro-version#! */);
85
/**
86
* Minimum PHP version required to run s2Member.
87
*
111
* @var string
112
*/
113
if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
114
+ define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '160423' /* !#distro-version#! */);
115
/*
116
Several compatibility checks.
117
If all pass, load the s2Member plugin.