Version Description
= v160423 =
(Maintenance Release) Upgrade immediately.
Download this release
Release Info
Developer | JasWSInc |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 160423 |
Comparing to | |
See all releases |
Code changes from version 160303 to 160423
- changelog.md +39 -0
- checksum.txt +1 -1
- includes/classes/cache.inc.php +71 -83
- includes/classes/files-in.inc.php +2 -1
- includes/classes/paypal-notify-in.inc.php +17 -3
- includes/classes/sc-paypal-button-e.inc.php +6 -1
- includes/classes/sc-paypal-button-in.inc.php +9 -6
- includes/classes/translations.inc.php +4 -2
- includes/hooks.inc.php +2 -2
- includes/menu-pages/down-ops.inc.php +1 -1
- includes/menu-pages/paypal-ops.inc.php +8 -3
- includes/syscon.inc.php +1 -1
- includes/translations/s2member.pot +80 -80
- readme.txt +42 -3
- s2member.php +4 -4
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 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
-
|
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 |
-
|
48 |
-
|
49 |
-
$fdlep = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["file_download_limit_exceeded_page"];
|
50 |
|
51 |
-
|
52 |
-
|
53 |
-
$fdlep_cache = @$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"]["file_download_limit_exceeded_page"];
|
54 |
|
55 |
-
|
|
|
56 |
|
57 |
-
|
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 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
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));
|
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
|
199 |
*/
|
200 |
-
status_header(200);
|
201 |
header('Content-Type: text/plain; charset=UTF-8');
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"]
|
|
|
|
|
|
|
|
|
|
|
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("
|
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 === "
|
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('
|
23 |
|
24 |
-
add_action('
|
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 & 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 & 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 & 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 & 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'] = '
|
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:
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
|
7 |
-
"POT-Creation-Date: 2016-
|
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:
|
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:
|
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:
|
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:
|
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:
|
434 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
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:
|
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:
|
456 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
462 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
471 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
477 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
486 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
492 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
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:
|
506 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
512 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
587 |
-
#: s2member/includes/classes/files-in.inc.php:
|
588 |
-
#: s2member/includes/classes/files-in.inc.php:
|
589 |
msgctxt "s2member-admin"
|
590 |
msgid "Created by s2Member, for S3 Bucket: %s."
|
591 |
msgstr ""
|
592 |
|
593 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
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:
|
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:
|
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:
|
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:
|
628 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
634 |
-
#: s2member/includes/classes/files-in.inc.php:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
1037 |
-
#: s2member/includes/classes/sc-paypal-button-in.inc.php:
|
1038 |
-
#: s2member/includes/classes/sc-paypal-button-in.inc.php:
|
1039 |
-
#: s2member/includes/classes/sc-paypal-button-in.inc.php:
|
1040 |
-
#: s2member/includes/classes/sc-paypal-button-in.inc.php:
|
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:
|
1053 |
msgctxt "s2member-front"
|
1054 |
msgid "Username:"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
-
#: s2member/includes/classes/translations.inc.php:
|
1058 |
msgctxt "s2member-front"
|
1059 |
msgid "My Password:"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
-
#: s2member/includes/classes/translations.inc.php:
|
1063 |
msgctxt "s2member-front"
|
1064 |
msgid "Username *"
|
1065 |
msgstr ""
|
1066 |
|
1067 |
-
#: s2member/includes/classes/translations.inc.php:
|
1068 |
msgctxt "s2member-front"
|
1069 |
msgid "Password *"
|
1070 |
msgstr ""
|
1071 |
|
1072 |
-
#: s2member/includes/classes/translations.inc.php:
|
1073 |
msgctxt "s2member-front"
|
1074 |
msgid "Email Address *"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
-
#: s2member/includes/classes/translations.inc.php:
|
1078 |
msgctxt "s2member-front"
|
1079 |
msgid "Registration complete. Please log in."
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: s2member/includes/classes/translations.inc.php:
|
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:
|
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:
|
1097 |
-
#: s2member/includes/classes/translations.inc.php:
|
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:
|
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:
|
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:
|
4 |
-
Stable tag:
|
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 |
-
=
|
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:
|
23 |
-
Stable tag:
|
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', '
|
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', '
|
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.
|