Version Description
= v150311 =
(Maintenance Release) Upgrade immediately.
Download this release
Release Info
Developer | JasWSInc |
Plugin | s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) |
Version | 150311 |
Comparing to | |
See all releases |
Code changes from version 150225 to 150311
- changelog.md +9 -0
- checksum.txt +1 -1
- includes/classes/brute-force.inc.php +98 -87
- includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php +2 -2
- includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php +2 -2
- includes/classes/paypal-notify-in.inc.php +1 -1
- includes/classes/users-list.inc.php +297 -285
- includes/classes/utils-urls.inc.php +3 -0
- includes/translations/s2member.pot +57 -57
- readme.txt +12 -3
- s2member.php +4 -4
changelog.md
CHANGED
@@ -1,3 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
= v150225 =
|
2 |
|
3 |
- (s2Member Pro) **Accept Bitcoin via Stripe!** This release of s2Member Pro comes integrated with the latest version of the Stripe API, where it is now possible to accept Bitcoin right along with most major credit cards—made possible by [Stripe's latest update to support Bitcoin](https://stripe.com/bitcoin). It's as easy as flipping a switch :-) Please see: `Dashboard ⥱ s2Member Pro ⥱ Stripe Options ⥱ Account Details ⥱ Accept Bitcoin`. Referencing [this GitHub issue](https://github.com/websharks/s2member/issues/482); i.e., the original feature request.
|
1 |
+
= v150311 =
|
2 |
+
|
3 |
+
- (s2Member/s2Member) **Bug Fix:** The list of users in the WordPress Dashboard was going blank in a particular scenario where a search was attempted in concert with a sortable s2Member column. Fixed in this release. Props to @bridgeport for finding this. See also [this GitHub issue](https://github.com/websharks/s2member/issues/496#issuecomment-76821470) if you'd like technical details.
|
4 |
+
- (s2Member Pro) **`[s2Member-List /]` Bug Fix:** This release resolves an issue with pagination in the `[s2Member-List /]` shortcode after recent changes in the `WP_User_Query` class. See [this GitHub issue](https://github.com/websharks/s2member/issues/493) if you'd like additional details.
|
5 |
+
- (s2Member Pro) **Remote Operations API (Bug Fix):** If a remote API call was made to find a user by `user_login`, and that username was all numeric, the `WP_User` class treated it like a user ID instead of as an actual username. Resolved in this release by calling `new WP_User(0, [user login])` as the second argument to the constructor. Thereby forcing `WP_User` to consider it a username. See also [this GitHub issue](https://github.com/websharks/s2member/issues/498) if you'd like technical details.
|
6 |
+
- (s2Member Pro) **Stripe Bug Fix:** Stripe Pro-Forms for Specific Post/Page Access should not disable the email address field for logged-in users. Resolved in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/500) if you'd like technical details.
|
7 |
+
- (s2Member Pro) **Stripe Pro-Forms:** This release corrects a bug first introduced in the last release that prevented custom templates for Stripe Pro-Forms from working as intended. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/510) if you'd like additional details.
|
8 |
+
- (s2Member Pro) **Bug Fix for Gift/Redemption Codes:** This release of s2Member corrects a bug that impacted the generation of Gift/Redemption Codes whenever they were sold with Specific Post/Page Access. See also [this GitHub issue](https://github.com/websharks/s2member/issues/512) if you'd like additional details.
|
9 |
+
|
10 |
= v150225 =
|
11 |
|
12 |
- (s2Member Pro) **Accept Bitcoin via Stripe!** This release of s2Member Pro comes integrated with the latest version of the Stripe API, where it is now possible to accept Bitcoin right along with most major credit cards—made possible by [Stripe's latest update to support Bitcoin](https://stripe.com/bitcoin). It's as easy as flipping a switch :-) Please see: `Dashboard ⥱ s2Member Pro ⥱ Stripe Options ⥱ Account Details ⥱ Accept Bitcoin`. Referencing [this GitHub issue](https://github.com/websharks/s2member/issues/482); i.e., the original feature request.
|
checksum.txt
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
6e978345db7617c401da82504eb6d20b
|
includes/classes/brute-force.inc.php
CHANGED
@@ -1,101 +1,112 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* s2Member's Brute Force protection routines.
|
4 |
-
*
|
5 |
-
* Copyright: © 2009-2011
|
6 |
-
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
|
7 |
-
* (coded in the USA)
|
8 |
-
*
|
9 |
-
* Released under the terms of the GNU General Public License.
|
10 |
-
* You should have received a copy of the GNU General Public License,
|
11 |
-
* along with this software. In the main directory, see: /licensing/
|
12 |
-
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
-
*
|
14 |
-
* @package s2Member\Brute_Force
|
15 |
-
* @since 3.5
|
16 |
-
*/
|
17 |
if(!defined('WPINC')) // MUST have WordPress.
|
18 |
-
exit(
|
19 |
|
20 |
-
if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
{
|
22 |
/**
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
{
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
public static function track_failed_logins ($username = FALSE)
|
45 |
-
{
|
46 |
-
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
47 |
-
do_action("ws_plugin__s2member_before_track_failed_logins", get_defined_vars ());
|
48 |
-
unset($__refs, $__v);
|
49 |
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
|
|
|
|
|
|
59 |
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
*
|
65 |
-
* Prevents an attacker from guessing Usernames/Passwords.
|
66 |
-
* Allows only 5 failed login attempts every 30 minutes.
|
67 |
-
*
|
68 |
-
* @package s2Member\Brute_Force
|
69 |
-
* @since 3.5
|
70 |
-
*
|
71 |
-
* @attaches-to ``add_filter("authenticate");``
|
72 |
-
*
|
73 |
-
* @param object $user Expects a WP_User object, or possibly a null value.
|
74 |
-
* This parameter value is simply passed through this routine.
|
75 |
-
* @return obj|null Either null, the ``$user`` obj, or a `WP_Error` obj.
|
76 |
-
*/
|
77 |
-
public static function stop_brute_force_logins ($user = FALSE)
|
78 |
-
{
|
79 |
-
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
80 |
-
do_action("ws_plugin__s2member_before_stop_brute_force_logins", get_defined_vars ());
|
81 |
-
unset($__refs, $__v);
|
82 |
|
83 |
-
|
84 |
-
|
85 |
-
if ((int)get_transient ("s2m_ipr_" . md5 ("s2member_transient_failed_login_attempts_" . $_SERVER["REMOTE_ADDR"])) > $max)
|
86 |
-
{
|
87 |
-
$exp_secs = strtotime ("+" . apply_filters("ws_plugin__s2member_track_failed_logins__exp_time", "30 minutes", get_defined_vars ())) - time ();
|
88 |
-
// If you add Filters to this value, you should use a string that is compatible with PHP's strtotime() function.
|
89 |
-
$about = c_ws_plugin__s2member_utils_time::approx_time_difference (time (), time () + $exp_secs);
|
90 |
-
$errors = new WP_Error ("incorrect_password", sprintf (_x ("Max failed logins. Please wait %s and try again.", "s2member-front", "s2member"), $about));
|
91 |
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
}
|
97 |
-
return apply_filters("ws_plugin__s2member_stop_brute_force_logins", ((!empty($errors)) ? $errors : $user), get_defined_vars ());
|
98 |
-
}
|
99 |
}
|
|
|
|
|
100 |
}
|
101 |
-
|
1 |
<?php
|
2 |
/**
|
3 |
+
* s2Member's Brute Force protection routines.
|
4 |
+
*
|
5 |
+
* Copyright: © 2009-2011
|
6 |
+
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
|
7 |
+
* (coded in the USA)
|
8 |
+
*
|
9 |
+
* Released under the terms of the GNU General Public License.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\Brute_Force
|
15 |
+
* @since 3.5
|
16 |
+
*/
|
17 |
if(!defined('WPINC')) // MUST have WordPress.
|
18 |
+
exit('Do not access this file directly.');
|
19 |
|
20 |
+
if(!class_exists('c_ws_plugin__s2member_brute_force'))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* s2Member's Brute Force protection routines.
|
24 |
+
*
|
25 |
+
* @package s2Member\Brute_Force
|
26 |
+
* @since 3.5
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_brute_force
|
29 |
{
|
30 |
/**
|
31 |
+
* Tracks failed login attempts.
|
32 |
+
*
|
33 |
+
* Prevents an attacker from guessing Usernames/Passwords.
|
34 |
+
* Allows only 5 failed login attempts every 30 minutes.
|
35 |
+
*
|
36 |
+
* @package s2Member\Brute_Force
|
37 |
+
* @since 3.5
|
38 |
+
*
|
39 |
+
* @attaches-to ``add_action('wp_login_failed');``
|
40 |
+
*
|
41 |
+
* @param string $username Expects the $username to be passed in through the Hook.
|
42 |
+
*/
|
43 |
+
public static function track_failed_logins($username = '')
|
44 |
+
{
|
45 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
46 |
+
do_action('ws_plugin__s2member_before_track_failed_logins', get_defined_vars());
|
47 |
+
unset($__refs, $__v);
|
48 |
+
|
49 |
+
if(($max = $GLOBALS['WS_PLUGIN__']['s2member']['o']['max_failed_login_attempts']))
|
50 |
{
|
51 |
+
$exp_secs = strtotime('+'.apply_filters('ws_plugin__s2member_track_failed_logins__exp_time', '30 minutes', get_defined_vars())) - time();
|
52 |
+
// If you add Filters to this value, you should use a string that is compatible with PHP's strtotime() function.
|
53 |
+
|
54 |
+
$ip = $_SERVER['REMOTE_ADDR']; // Default value.
|
55 |
+
if(!empty($GLOBALS['s2member_pro_remote_op_auth_check_user_ip'])
|
56 |
+
&& c_ws_plugin__s2member_utils_conds::pro_is_installed()
|
57 |
+
&& c_ws_plugin__s2member_pro_remote_ops::is_remote_op('auth_check_user')
|
58 |
+
) $ip = $GLOBALS['s2member_pro_remote_op_auth_check_user_ip'];
|
59 |
+
|
60 |
+
$transient = 's2m_ipr_'.md5('s2member_transient_failed_login_attempts_'.$ip);
|
61 |
+
set_transient($transient, (int)get_transient($transient) + 1, $exp_secs);
|
62 |
+
}
|
63 |
+
do_action('ws_plugin__s2member_after_track_failed_logins', get_defined_vars());
|
64 |
+
}
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
+
/**
|
67 |
+
* Stops anyone attempting a Brute Force attack.
|
68 |
+
*
|
69 |
+
* Prevents an attacker from guessing Usernames/Passwords.
|
70 |
+
* Allows only 5 failed login attempts every 30 minutes.
|
71 |
+
*
|
72 |
+
* @package s2Member\Brute_Force
|
73 |
+
* @since 3.5
|
74 |
+
*
|
75 |
+
* @attaches-to ``add_filter('authenticate');``
|
76 |
+
*
|
77 |
+
* @param WP_User $user Expects a WP_User object, or possibly a null value.
|
78 |
+
* This parameter value is simply passed through this routine.
|
79 |
+
*
|
80 |
+
* @return WP_User|null Either null, the ``$user`` obj, or a `WP_Error` obj.
|
81 |
+
*/
|
82 |
+
public static function stop_brute_force_logins($user = NULL)
|
83 |
+
{
|
84 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
85 |
+
do_action('ws_plugin__s2member_before_stop_brute_force_logins', get_defined_vars());
|
86 |
+
unset($__refs, $__v);
|
87 |
|
88 |
+
if(($max = $GLOBALS['WS_PLUGIN__']['s2member']['o']['max_failed_login_attempts']))
|
89 |
+
{
|
90 |
+
$ip = $_SERVER['REMOTE_ADDR']; // Default value.
|
91 |
+
if(!empty($GLOBALS['s2member_pro_remote_op_auth_check_user_ip'])
|
92 |
+
&& c_ws_plugin__s2member_utils_conds::pro_is_installed()
|
93 |
+
&& c_ws_plugin__s2member_pro_remote_ops::is_remote_op('auth_check_user')
|
94 |
+
) $ip = $GLOBALS['s2member_pro_remote_op_auth_check_user_ip'];
|
95 |
|
96 |
+
if((int)get_transient('s2m_ipr_'.md5('s2member_transient_failed_login_attempts_'.$ip)) > $max)
|
97 |
+
{
|
98 |
+
$exp_secs = strtotime('+'.apply_filters('ws_plugin__s2member_track_failed_logins__exp_time', '30 minutes', get_defined_vars())) - time();
|
99 |
+
// If you add Filters to this value, you should use a string that is compatible with PHP's strtotime() function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
101 |
+
$about = c_ws_plugin__s2member_utils_time::approx_time_difference(time(), time() + $exp_secs);
|
102 |
+
$errors = new WP_Error('incorrect_password', sprintf(_x('Max failed logins. Please wait %s and try again.', 's2member-front', 's2member'), $about));
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
|
104 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
105 |
+
do_action('ws_plugin__s2member_during_stop_brute_force_logins', get_defined_vars());
|
106 |
+
unset($__refs, $__v);
|
107 |
+
}
|
|
|
|
|
|
|
108 |
}
|
109 |
+
return apply_filters('ws_plugin__s2member_stop_brute_force_logins', !empty($errors) ? $errors : $user, get_defined_vars());
|
110 |
+
}
|
111 |
}
|
112 |
+
}
|
includes/classes/paypal-notify-in-subscr-or-rp-eots-w-level.inc.php
CHANGED
@@ -76,8 +76,8 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_eots_w_lev
|
|
76 |
|
77 |
if(empty($_REQUEST['s2member_paypal_proxy'])) // Only on true PayPal IPNs; e.g., we can bypass this on proxied IPNs.
|
78 |
{
|
79 |
-
$paypal['s2member_log'][] = 'Sleeping for
|
80 |
-
sleep(
|
81 |
$paypal['s2member_log'][] = 'Awake. It\'s '.date('D M j, Y g:i:s a T').'. s2Member `txn_type` identified as '.$identified_as.'.';
|
82 |
}
|
83 |
$paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
|
76 |
|
77 |
if(empty($_REQUEST['s2member_paypal_proxy'])) // Only on true PayPal IPNs; e.g., we can bypass this on proxied IPNs.
|
78 |
{
|
79 |
+
$paypal['s2member_log'][] = 'Sleeping for 15 seconds. Waiting for a possible ( `subscr_signup|subscr_modify|recurring_payment_profile_created` ).';
|
80 |
+
sleep(15); // Sleep here for a moment. PayPal sometimes sends a subscr_eot before the subscr_signup, subscr_modify.
|
81 |
$paypal['s2member_log'][] = 'Awake. It\'s '.date('D M j, Y g:i:s a T').'. s2Member `txn_type` identified as '.$identified_as.'.';
|
82 |
}
|
83 |
$paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
|
includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php
CHANGED
@@ -62,8 +62,8 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_
|
|
62 |
|
63 |
if(empty($_REQUEST['s2member_paypal_proxy'])) // Only on true PayPal IPNs; e.g., we can bypass this on proxied IPNs.
|
64 |
{
|
65 |
-
$paypal['s2member_log'][] = 'Sleeping for
|
66 |
-
sleep(
|
67 |
$paypal['s2member_log'][] = 'Awake. It\'s '.date('D M j, Y g:i:s a T').'. s2Member `txn_type` identified as '.$identified_as.'.';
|
68 |
}
|
69 |
list($paypal['level'], $paypal['ccaps']) = preg_split('/\:/', $paypal['item_number'], 3);
|
62 |
|
63 |
if(empty($_REQUEST['s2member_paypal_proxy'])) // Only on true PayPal IPNs; e.g., we can bypass this on proxied IPNs.
|
64 |
{
|
65 |
+
$paypal['s2member_log'][] = 'Sleeping for 15 seconds. Waiting for a possible ( `subscr_signup|subscr_modify|recurring_payment_profile_created` ).';
|
66 |
+
sleep(15); // Sleep here for a moment. PayPal sometimes sends a subscr_payment before the subscr_signup, subscr_modify.
|
67 |
$paypal['s2member_log'][] = 'Awake. It\'s '.date('D M j, Y g:i:s a T').'. s2Member `txn_type` identified as '.$identified_as.'.';
|
68 |
}
|
69 |
list($paypal['level'], $paypal['ccaps']) = preg_split('/\:/', $paypal['item_number'], 3);
|
includes/classes/paypal-notify-in.inc.php
CHANGED
@@ -78,7 +78,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in'))
|
|
78 |
|
79 |
if(!empty($paypal['txn_type']) && $paypal['txn_type'] === 'merch_pmt')
|
80 |
// This is mostly irrelevant, but it helps to keep the logs cleaner.
|
81 |
-
sleep(
|
82 |
|
83 |
if(empty($paypal['custom']) && !empty($paypal['recurring_payment_id'])) // Recurring Profile ID.
|
84 |
$paypal['custom'] = c_ws_plugin__s2member_utils_users::get_user_custom_with($paypal['recurring_payment_id']);
|
78 |
|
79 |
if(!empty($paypal['txn_type']) && $paypal['txn_type'] === 'merch_pmt')
|
80 |
// This is mostly irrelevant, but it helps to keep the logs cleaner.
|
81 |
+
sleep(15); // Wait for Pro-Form procesing to complete.
|
82 |
|
83 |
if(empty($paypal['custom']) && !empty($paypal['recurring_payment_id'])) // Recurring Profile ID.
|
84 |
$paypal['custom'] = c_ws_plugin__s2member_utils_users::get_user_custom_with($paypal['recurring_payment_id']);
|
includes/classes/users-list.inc.php
CHANGED
@@ -1,309 +1,321 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* Users list.
|
4 |
-
*
|
5 |
-
* Copyright: © 2009-2011
|
6 |
-
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
|
7 |
-
* (coded in the USA)
|
8 |
-
*
|
9 |
-
* Released under the terms of the GNU General Public License.
|
10 |
-
* You should have received a copy of the GNU General Public License,
|
11 |
-
* along with this software. In the main directory, see: /licensing/
|
12 |
-
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
-
*
|
14 |
-
* @package s2Member\Users_List
|
15 |
-
* @since 3.5
|
16 |
-
*/
|
17 |
if(!defined('WPINC')) // MUST have WordPress.
|
18 |
exit ("Do not access this file directly.");
|
19 |
|
20 |
-
if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
{
|
22 |
/**
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
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 |
-
$query->query_where .= " OR (`" . $wpdb->usermeta . "`.`meta_key` = '" . $wpdb->base_prefix . "s2member_custom_fields' AND `" . $wpdb->usermeta . "`.`meta_value` LIKE '" . $s . "')";
|
95 |
-
if(apply_filters("ws_plugin__s2member_users_list_search_admin_notes", false, get_defined_vars())) // Off by default; this can get very slow on large sites.
|
96 |
-
$query->query_where .= " OR (`" . $wpdb->usermeta . "`.`meta_key` = '" . $wpdb->base_prefix . "s2member_notes' AND `" . $wpdb->usermeta . "`.`meta_value` LIKE '" . $s . "')";
|
97 |
-
$query->query_where .= apply_filters("ws_plugin__s2member_before_users_list_search_where_or_after", "", get_defined_vars ()) . ")"; // Leaving room for additional searches here.
|
98 |
-
|
99 |
-
if(is_multisite()) // On a Multisite Network we need to make sure we're searching only users w/ capabilities on this blog.
|
100 |
-
$query->query_where .= " AND `" . $wpdb->users . "`.`ID` IN(SELECT DISTINCT(`user_id`) FROM `" . $wpdb->usermeta . "` WHERE `meta_key` = '" . $wpdb->prefix . "capabilities')";
|
101 |
-
|
102 |
-
$query->query_from = apply_filters("ws_plugin__s2member_before_users_list_search_from", $query->query_from, get_defined_vars ());
|
103 |
-
$query->query_where = apply_filters("ws_plugin__s2member_before_users_list_search_where", $query->query_where, get_defined_vars ());
|
104 |
-
}
|
105 |
-
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
106 |
-
do_action("ws_plugin__s2member_after_users_list_search", get_defined_vars ());
|
107 |
-
unset($__refs, $__v);
|
108 |
}
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
* @since 3.5
|
114 |
-
*
|
115 |
-
* @attaches-to ``add_filter ("manage_users_columns");``
|
116 |
-
*
|
117 |
-
* @param array $columns Expects an array of columns to be passed through by the Filter.
|
118 |
-
* @return array Array of columns, merged with columns introduced by this routine.
|
119 |
-
*/
|
120 |
-
public static function users_list_cols ($cols = FALSE)
|
121 |
-
{
|
122 |
-
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
123 |
-
do_action("ws_plugin__s2member_before_users_list_cols", get_defined_vars ());
|
124 |
-
unset($__refs, $__v);
|
125 |
|
126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
|
128 |
-
|
129 |
-
|
|
|
130 |
|
131 |
-
|
|
|
132 |
|
133 |
-
|
134 |
-
|
|
|
135 |
|
136 |
-
|
|
|
137 |
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
|
144 |
-
|
145 |
-
|
146 |
-
|
|
|
|
|
|
|
|
|
|
|
147 |
|
148 |
-
|
149 |
-
|
|
|
|
|
|
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
|
|
|
154 |
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
*
|
160 |
-
* @package s2Member\Users_List
|
161 |
-
* @since 3.5
|
162 |
-
*
|
163 |
-
* @attaches-to ``add_filter ("manage_users_custom_column");``
|
164 |
-
*
|
165 |
-
* @param string $val A value for this column, passed through by the Filter.
|
166 |
-
* @param string $col The name of the column for which we might need to supply data for.
|
167 |
-
* @param int|string $user_id Expects a WordPress User ID, passed through by the Filter.
|
168 |
-
* @return string A column value introduced by this routine, or existing value, or, if empty, a dash.
|
169 |
-
*/
|
170 |
-
public static function users_list_display_cols ($val = FALSE, $col = FALSE, $user_id = FALSE)
|
171 |
-
{
|
172 |
-
static $user, $last_user_id; // Used internally for optimization.
|
173 |
-
static $fields, $last_fields_id; // Used for optimization.
|
174 |
-
|
175 |
-
foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
|
176 |
-
do_action("ws_plugin__s2member_before_users_list_display_cols", get_defined_vars ());
|
177 |
-
unset($__refs, $__v);
|
178 |
-
|
179 |
-
$user = (is_object ($user) && $user_id === $last_user_id) ? $user : new WP_User ($user_id);
|
180 |
-
|
181 |
-
if ($col === "s2member_registration_time")
|
182 |
-
$val = (($time = strtotime (get_date_from_gmt ($user->user_registered)))) ? esc_html (date ("D M jS, Y", $time)) . '<br /><small>@ precisely ' . esc_html (date ("g:i a", $time)) . '</small>' : "—";
|
183 |
-
|
184 |
-
else if ($col === "s2member_paid_registration_times")
|
185 |
-
{
|
186 |
-
$val = ""; // Initialize $val before we begin.
|
187 |
-
if (is_array($v = get_user_option ("s2member_paid_registration_times", $user_id)))
|
188 |
-
foreach ($v as $level => $time) // Go through each Paid Registration Time.
|
189 |
-
{
|
190 |
-
$time = strtotime (get_date_from_gmt (date ("Y-m-d H:i:s", $time)));
|
191 |
-
|
192 |
-
if ($level === "level") // First Payment Time, regardless of Level.
|
193 |
-
$val .= (($val) ? "<br />" : "") . '<span title="' . esc_attr (date ("D M jS, Y", $time)) . ' @ precisely ' . esc_attr (date ("g:i a", $time)) . '">' . esc_html (date ("D M jS, Y", $time)) . '</span>';
|
194 |
-
else if (preg_match ("/^level([0-9]+)$/i", $level) && ($level = preg_replace ("/^level/", "", $level)))
|
195 |
-
$val .= (($val) ? "<br />" : "") . '<small><em>@Level ' . esc_html ($level) . ': <span title="' . esc_attr (date ("D M jS, Y", $time)) . ' @ precisely ' . esc_attr (date ("g:i a", $time)) . '">' . esc_html (date ("D M jS, Y", $time)) . '</span></em></small>';
|
196 |
-
}
|
197 |
-
}
|
198 |
-
else if ($col === "s2member_subscr_id")
|
199 |
-
$val = ($v = get_user_option ("s2member_subscr_id", $user_id)) ? esc_html ($v) : "—";
|
200 |
-
|
201 |
-
else if ($col === "s2member_ccaps") // Custom Capabilities.
|
202 |
-
{
|
203 |
-
foreach ($user->allcaps as $cap => $cap_enabled)
|
204 |
-
if (preg_match ("/^access_s2member_ccap_/", $cap))
|
205 |
-
$ccaps[] = preg_replace ("/^access_s2member_ccap_/", "", $cap);
|
206 |
-
|
207 |
-
$val = (!empty($ccaps)) ? implode ("<br />", $ccaps) : "—";
|
208 |
-
}
|
209 |
-
else if($col === "s2member_auto_eot_time")
|
210 |
-
$val = ($v = get_user_option ("s2member_auto_eot_time", $user_id)) ? date("D M jS, Y", (integer)$v) . "<br /><small>@ precisely " . date ("g:i a", (integer)$v)."</small>" : "—";
|
211 |
-
|
212 |
-
else if (preg_match ("/^s2member_custom_field_/", $col))
|
213 |
-
{
|
214 |
-
if (!$last_fields_id || $last_fields_id !== $user_id)
|
215 |
-
$fields = get_user_option ("s2member_custom_fields", $user_id);
|
216 |
-
|
217 |
-
$field_var = preg_replace ("/^s2member_custom_field_/", "", $col);
|
218 |
-
|
219 |
-
if (isset ($fields[$field_var]) && is_string ($fields[$field_var]) && preg_match ("/^http(s?)\:/i", $fields[$field_var]))
|
220 |
-
$val = '<a href="' . esc_attr ($fields[$field_var]) . '" target="_blank">' . esc_html (substr ($fields[$field_var], strpos ($fields[$field_var], ":") + 3, 25) . "...") . '</a>';
|
221 |
-
|
222 |
-
else if (isset ($fields[$field_var]) && is_array($fields[$field_var]) && !empty($fields[$field_var]))
|
223 |
-
$val = preg_replace ("/-\|br\|-/", "<br />", esc_html (implode ("-|br|-", $fields[$field_var])));
|
224 |
-
|
225 |
-
else if (isset ($fields[$field_var]) && is_string ($fields[$field_var]) && strlen ($fields[$field_var]))
|
226 |
-
$val = esc_html ($fields[$field_var]);
|
227 |
-
|
228 |
-
$last_fields_id = $user_id; // Record this.
|
229 |
-
}
|
230 |
-
else if ($col === "s2member_login_counter")
|
231 |
-
$val = ($v = get_user_option ("s2member_login_counter", $user_id)) ? esc_html ($v) : "—";
|
232 |
-
|
233 |
-
else if ($col === "s2member_last_login_time")
|
234 |
-
{
|
235 |
-
if(($time = get_user_option ("s2member_last_login_time", $user_id)))
|
236 |
-
{
|
237 |
-
$time = strtotime (get_date_from_gmt (date ("Y-m-d H:i:s", $time)));
|
238 |
-
$val = esc_html (date ("D M jS, Y", $time)) . '<br /><small>@ precisely ' . esc_html (date ("g:i a", $time)) . '</small>';
|
239 |
-
}
|
240 |
-
else $val = "—"; // Not applicable (we've never recorded them logging into the site).
|
241 |
-
}
|
242 |
-
$last_user_id = $user_id; // Record this for internal optimizations.
|
243 |
-
|
244 |
-
return apply_filters("ws_plugin__s2member_users_list_display_cols", ((strlen ($val)) ? $val : "—"), get_defined_vars ());
|
245 |
-
}
|
246 |
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
*
|
255 |
-
* @param array $columns An Array of sortable User List Columns
|
256 |
-
*/
|
257 |
-
public static function users_list_add_sortable($columns)
|
258 |
-
{
|
259 |
-
$columns['s2member_registration_time'] = 's2member_registration_time';
|
260 |
-
$columns['s2member_subscr_id'] = 's2member_subscr_id';
|
261 |
-
$columns['s2member_auto_eot_time'] = 's2member_auto_eot_time';
|
262 |
-
$columns['s2member_login_counter'] = 's2member_login_counter';
|
263 |
-
$columns['s2member_last_login_time'] = 's2member_last_login_time';
|
264 |
-
return $columns;
|
265 |
-
}
|
266 |
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
{
|
279 |
-
|
280 |
-
|
281 |
-
|| !isset ($query->query_vars))
|
282 |
-
return;
|
283 |
-
|
284 |
-
global $wpdb; /** @var $wpdb wpdb */
|
285 |
-
$vars = $query->query_vars;
|
286 |
-
|
287 |
-
switch($vars['orderby'])
|
288 |
-
{
|
289 |
-
// This isn't a usermeta value, so we don't need to `LEFT JOIN` here.
|
290 |
-
case 's2member_registration_time':
|
291 |
-
$query->query_orderby = "ORDER BY CAST(`user_registered` AS UNSIGNED) " . $vars['order'];
|
292 |
-
break;
|
293 |
-
|
294 |
-
// s2Member Subscription ID can contain non-integer characters. We don't `CAST` this value as `UNSIGNED`
|
295 |
-
case 's2member_subscr_id':
|
296 |
-
$query->query_from .= " LEFT JOIN `" . $wpdb->usermeta . "` `m` ON (`" . $wpdb->users . "`.`ID` = `m`.`user_id` AND `m`.`meta_key` = '" . esc_sql($wpdb->prefix . $vars['orderby']) . "')";
|
297 |
-
$query->query_orderby = "ORDER BY `m`.`meta_value` " . $vars['order'];
|
298 |
-
break;
|
299 |
-
|
300 |
-
case 's2member_auto_eot_time':
|
301 |
-
case 's2member_login_counter':
|
302 |
-
case 's2member_last_login_time':
|
303 |
-
$query->query_from .= " LEFT JOIN `" . $wpdb->usermeta . "` `m` ON (`" . $wpdb->users . "`.`ID` = `m`.`user_id` AND `m`.`meta_key` = '" . esc_sql($wpdb->prefix . $vars['orderby']) . "')";
|
304 |
-
$query->query_orderby = "ORDER BY CAST(`m`.`meta_value` AS UNSIGNED) " . $vars['order'];
|
305 |
-
break;
|
306 |
-
}
|
307 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
308 |
}
|
309 |
-
|
|
|
|
1 |
<?php
|
2 |
/**
|
3 |
+
* Users list.
|
4 |
+
*
|
5 |
+
* Copyright: © 2009-2011
|
6 |
+
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
|
7 |
+
* (coded in the USA)
|
8 |
+
*
|
9 |
+
* Released under the terms of the GNU General Public License.
|
10 |
+
* You should have received a copy of the GNU General Public License,
|
11 |
+
* along with this software. In the main directory, see: /licensing/
|
12 |
+
* If not, see: {@link http://www.gnu.org/licenses/}.
|
13 |
+
*
|
14 |
+
* @package s2Member\Users_List
|
15 |
+
* @since 3.5
|
16 |
+
*/
|
17 |
if(!defined('WPINC')) // MUST have WordPress.
|
18 |
exit ("Do not access this file directly.");
|
19 |
|
20 |
+
if(!class_exists("c_ws_plugin__s2member_users_list"))
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* Users list.
|
24 |
+
*
|
25 |
+
* @package s2Member\Users_List
|
26 |
+
* @since 3.5
|
27 |
+
*/
|
28 |
+
class c_ws_plugin__s2member_users_list
|
29 |
{
|
30 |
/**
|
31 |
+
* Adds Custom Fields to the admin Profile editing page.
|
32 |
+
*
|
33 |
+
* @package s2Member\Users_List
|
34 |
+
* @since 3.5
|
35 |
+
*
|
36 |
+
* @attaches-to ``add_action("edit_user_profile");``
|
37 |
+
* @attaches-to ``add_action("show_user_profile");``
|
38 |
+
*
|
39 |
+
* @param WP_User $user Expects a `WP_User` object passed in by the Action Hook.
|
40 |
+
*/
|
41 |
+
public static function users_list_edit_cols($user = NULL)
|
42 |
+
{
|
43 |
+
c_ws_plugin__s2member_users_list_in::users_list_edit_cols($user);
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Saves Custom Fields after an admin updates Profile.
|
48 |
+
*
|
49 |
+
* @package s2Member\Users_List
|
50 |
+
* @since 3.5
|
51 |
+
*
|
52 |
+
* @attaches-to ``add_action("edit_user_profile_update");``
|
53 |
+
* @attaches-to ``add_action("personal_options_update");``
|
54 |
+
*
|
55 |
+
* @param int|string $user_id Expects a numeric WordPress User ID passed in by the Action Hook.
|
56 |
+
*/
|
57 |
+
public static function users_list_update_cols($user_id = NULL)
|
58 |
+
{
|
59 |
+
return c_ws_plugin__s2member_users_list_in::users_list_update_cols($user_id);
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Modifies the search query.
|
64 |
+
*
|
65 |
+
* Affects searches performed in the list of Users.
|
66 |
+
*
|
67 |
+
* @package s2Member\Users_List
|
68 |
+
* @since 3.5
|
69 |
+
*
|
70 |
+
* @attaches-to ``add_action("pre_user_query");``
|
71 |
+
*
|
72 |
+
* @param WP_User_Query $query Expects a `WP_User_Query` object, by reference.
|
73 |
+
*/
|
74 |
+
public static function users_list_query(&$query = NULL)
|
75 |
+
{
|
76 |
+
global $wpdb;
|
77 |
+
/** @var $wpdb wpdb */
|
78 |
+
|
79 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
80 |
+
do_action("ws_plugin__s2member_before_users_list_search", get_defined_vars());
|
81 |
+
unset($__refs, $__v);
|
82 |
+
|
83 |
+
if(is_admin() && !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'users.php')
|
84 |
+
if(isset ($query->query_vars) && !is_network_admin()) // NOT in Network admin panels.
|
85 |
+
if(is_array($qv = $query->query_vars) && ($s = trim($qv["search"], "* \t\n\r\0\x0B")) && ($s = "%".esc_sql(c_ws_plugin__s2member_utils_strings::like_escape($s))."%"))
|
86 |
{
|
87 |
+
$query->query_fields = "SQL_CALC_FOUND_ROWS DISTINCT(`".$wpdb->users."`.`ID`)";
|
88 |
+
$query->query_from = " FROM `".$wpdb->users."`, `".$wpdb->usermeta."`"; // Include meta table also.
|
89 |
+
$query->query_where = " WHERE `".$wpdb->users."`.`ID` = `".$wpdb->usermeta."`.`user_id`"; // Join w/ meta table.
|
90 |
+
$query->query_where .= " AND (".apply_filters("ws_plugin__s2member_before_users_list_search_where_or_before", "", get_defined_vars());
|
91 |
+
$query->query_where .= " (`".$wpdb->users."`.`user_login` LIKE '".$s."' OR `".$wpdb->users."`.`user_nicename` LIKE '".$s."' OR `".$wpdb->users."`.`display_name` LIKE '".$s."' OR `".$wpdb->users."`.`user_email` LIKE '".$s."' OR `".$wpdb->users."`.`user_url` LIKE '".$s."')";
|
92 |
+
$query->query_where .= " OR ((`".$wpdb->usermeta."`.`meta_key` = 'first_name' OR `".$wpdb->usermeta."`.`meta_key` = 'last_name') AND `".$wpdb->usermeta."`.`meta_value` LIKE '".$s."')";
|
93 |
+
$query->query_where .= " OR (`".$wpdb->usermeta."`.`meta_key` = '".$wpdb->base_prefix."s2member_subscr_id' AND `".$wpdb->usermeta."`.`meta_value` LIKE '".$s."')";
|
94 |
+
$query->query_where .= " OR (`".$wpdb->usermeta."`.`meta_key` = '".$wpdb->base_prefix."s2member_custom' AND `".$wpdb->usermeta."`.`meta_value` LIKE '".$s."')";
|
95 |
+
$query->query_where .= " OR (`".$wpdb->usermeta."`.`meta_key` = '".$wpdb->base_prefix."s2member_custom_fields' AND `".$wpdb->usermeta."`.`meta_value` LIKE '".$s."')";
|
96 |
+
if(apply_filters("ws_plugin__s2member_users_list_search_admin_notes", FALSE, get_defined_vars())) // Off by default; this can get very slow on large sites.
|
97 |
+
$query->query_where .= " OR (`".$wpdb->usermeta."`.`meta_key` = '".$wpdb->base_prefix."s2member_notes' AND `".$wpdb->usermeta."`.`meta_value` LIKE '".$s."')";
|
98 |
+
$query->query_where .= apply_filters("ws_plugin__s2member_before_users_list_search_where_or_after", "", get_defined_vars()).")"; // Leaving room for additional searches here.
|
99 |
+
|
100 |
+
if(is_multisite()) // On a Multisite Network we need to make sure we're searching only users w/ capabilities on this blog.
|
101 |
+
$query->query_where .= " AND `".$wpdb->users."`.`ID` IN(SELECT DISTINCT(`user_id`) FROM `".$wpdb->usermeta."` WHERE `meta_key` = '".$wpdb->prefix."capabilities')";
|
102 |
+
|
103 |
+
$query->query_from = apply_filters("ws_plugin__s2member_before_users_list_search_from", $query->query_from, get_defined_vars());
|
104 |
+
$query->query_where = apply_filters("ws_plugin__s2member_before_users_list_search_where", $query->query_where, get_defined_vars());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
}
|
106 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
107 |
+
do_action("ws_plugin__s2member_after_users_list_search", get_defined_vars());
|
108 |
+
unset($__refs, $__v);
|
109 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
|
111 |
+
/**
|
112 |
+
* Adds columns to the list of Users.
|
113 |
+
*
|
114 |
+
* @package s2Member\Users_List
|
115 |
+
* @since 3.5
|
116 |
+
*
|
117 |
+
* @attaches-to ``add_filter ("manage_users_columns");``
|
118 |
+
*
|
119 |
+
* @param array $cols Expects an array of columns to be passed through by the Filter.
|
120 |
+
*
|
121 |
+
* @return array Array of columns, merged with columns introduced by this routine.
|
122 |
+
*/
|
123 |
+
public static function users_list_cols($cols = array())
|
124 |
+
{
|
125 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
126 |
+
do_action("ws_plugin__s2member_before_users_list_cols", get_defined_vars());
|
127 |
+
unset($__refs, $__v);
|
128 |
+
|
129 |
+
$cols["s2member_registration_time"] = "Registration Date";
|
130 |
+
|
131 |
+
if(apply_filters("ws_plugin__s2member_users_list_cols_display_paid_registration_times", FALSE))
|
132 |
+
$cols["s2member_paid_registration_times"] = "Paid Registr. Date";
|
133 |
+
|
134 |
+
$cols["s2member_subscr_id"] = "Paid Subscr. ID";
|
135 |
+
|
136 |
+
if(!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site())
|
137 |
+
$cols["s2member_ccaps"] = "Custom Capabilities";
|
138 |
+
|
139 |
+
$cols["s2member_auto_eot_time"] = "EOT Time";
|
140 |
+
|
141 |
+
if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
|
142 |
+
foreach(json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], TRUE) as $field)
|
143 |
+
{
|
144 |
+
$field_var = preg_replace("/[^a-z0-9]/i", "_", strtolower($field["id"]));
|
145 |
+
$field_id_class = preg_replace("/_/", "-", $field_var);
|
146 |
|
147 |
+
$field_title = ucwords(preg_replace("/_/", " ", $field_var));
|
148 |
+
$cols["s2member_custom_field_".$field_var] = $field_title;
|
149 |
+
}
|
150 |
|
151 |
+
$cols["s2member_login_counter"] = "# Of Logins";
|
152 |
+
$cols["s2member_last_login_time"] = "Last Login Time";
|
153 |
|
154 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
155 |
+
do_action("ws_plugin__s2member_during_users_list_cols", get_defined_vars());
|
156 |
+
unset($__refs, $__v);
|
157 |
|
158 |
+
return apply_filters("ws_plugin__s2member_users_list_cols", $cols, get_defined_vars());
|
159 |
+
}
|
160 |
|
161 |
+
/**
|
162 |
+
* Displays column data in the row of details.
|
163 |
+
*
|
164 |
+
* @package s2Member\Users_List
|
165 |
+
* @since 3.5
|
166 |
+
*
|
167 |
+
* @attaches-to ``add_filter ("manage_users_custom_column");``
|
168 |
+
*
|
169 |
+
* @param string $val A value for this column, passed through by the Filter.
|
170 |
+
* @param string $col The name of the column for which we might need to supply data for.
|
171 |
+
* @param int|string $user_id Expects a WordPress User ID, passed through by the Filter.
|
172 |
+
*
|
173 |
+
* @return string A column value introduced by this routine, or existing value, or, if empty, a dash.
|
174 |
+
*/
|
175 |
+
public static function users_list_display_cols($val = '', $col = '', $user_id = '')
|
176 |
+
{
|
177 |
+
static $user, $last_user_id; // Used internally for optimization.
|
178 |
+
static $fields, $last_fields_id; // Used for optimization.
|
179 |
+
|
180 |
+
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
|
181 |
+
do_action("ws_plugin__s2member_before_users_list_display_cols", get_defined_vars());
|
182 |
+
unset($__refs, $__v);
|
183 |
+
|
184 |
+
$user = (is_object($user) && $user_id === $last_user_id) ? $user : new WP_User ($user_id);
|
185 |
+
|
186 |
+
if($col === "s2member_registration_time")
|
187 |
+
$val = (($time = strtotime(get_date_from_gmt($user->user_registered)))) ? esc_html(date("D M jS, Y", $time)).'<br /><small>@ precisely '.esc_html(date("g:i a", $time)).'</small>' : "—";
|
188 |
+
|
189 |
+
else if($col === "s2member_paid_registration_times")
|
190 |
+
{
|
191 |
+
$val = ""; // Initialize $val before we begin.
|
192 |
+
if(is_array($v = get_user_option("s2member_paid_registration_times", $user_id)))
|
193 |
+
foreach($v as $level => $time) // Go through each Paid Registration Time.
|
194 |
+
{
|
195 |
+
$time = strtotime(get_date_from_gmt(date("Y-m-d H:i:s", $time)));
|
196 |
|
197 |
+
if($level === "level") // First Payment Time, regardless of Level.
|
198 |
+
$val .= (($val) ? "<br />" : "").'<span title="'.esc_attr(date("D M jS, Y", $time)).' @ precisely '.esc_attr(date("g:i a", $time)).'">'.esc_html(date("D M jS, Y", $time)).'</span>';
|
199 |
+
else if(preg_match("/^level([0-9]+)$/i", $level) && ($level = preg_replace("/^level/", "", $level)))
|
200 |
+
$val .= (($val) ? "<br />" : "").'<small><em>@Level '.esc_html($level).': <span title="'.esc_attr(date("D M jS, Y", $time)).' @ precisely '.esc_attr(date("g:i a", $time)).'">'.esc_html(date("D M jS, Y", $time)).'</span></em></small>';
|
201 |
+
}
|
202 |
+
}
|
203 |
+
else if($col === "s2member_subscr_id")
|
204 |
+
$val = ($v = get_user_option("s2member_subscr_id", $user_id)) ? esc_html($v) : "—";
|
205 |
|
206 |
+
else if($col === "s2member_ccaps") // Custom Capabilities.
|
207 |
+
{
|
208 |
+
foreach($user->allcaps as $cap => $cap_enabled)
|
209 |
+
if(preg_match("/^access_s2member_ccap_/", $cap))
|
210 |
+
$ccaps[] = preg_replace("/^access_s2member_ccap_/", "", $cap);
|
211 |
|
212 |
+
$val = (!empty($ccaps)) ? implode("<br />", $ccaps) : "—";
|
213 |
+
}
|
214 |
+
else if($col === "s2member_auto_eot_time")
|
215 |
+
$val = ($v = get_user_option("s2member_auto_eot_time", $user_id)) ? date("D M jS, Y", (integer)$v)."<br /><small>@ precisely ".date("g:i a", (integer)$v)."</small>" : "—";
|
216 |
|
217 |
+
else if(preg_match("/^s2member_custom_field_/", $col))
|
218 |
+
{
|
219 |
+
if(!$last_fields_id || $last_fields_id !== $user_id)
|
220 |
+
$fields = get_user_option("s2member_custom_fields", $user_id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
|
222 |
+
$field_var = preg_replace("/^s2member_custom_field_/", "", $col);
|
223 |
+
|
224 |
+
if(isset ($fields[$field_var]) && is_string($fields[$field_var]) && preg_match("/^http(s?)\:/i", $fields[$field_var]))
|
225 |
+
$val = '<a href="'.esc_attr($fields[$field_var]).'" target="_blank">'.esc_html(substr($fields[$field_var], strpos($fields[$field_var], ":") + 3, 25)."...").'</a>';
|
226 |
+
|
227 |
+
else if(isset ($fields[$field_var]) && is_array($fields[$field_var]) && !empty($fields[$field_var]))
|
228 |
+
$val = preg_replace("/-\|br\|-/", "<br />", esc_html(implode("-|br|-", $fields[$field_var])));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
|
230 |
+
else if(isset ($fields[$field_var]) && is_string($fields[$field_var]) && strlen($fields[$field_var]))
|
231 |
+
$val = esc_html($fields[$field_var]);
|
232 |
+
|
233 |
+
$last_fields_id = $user_id; // Record this.
|
234 |
+
}
|
235 |
+
else if($col === "s2member_login_counter")
|
236 |
+
$val = ($v = get_user_option("s2member_login_counter", $user_id)) ? esc_html($v) : "—";
|
237 |
+
|
238 |
+
else if($col === "s2member_last_login_time")
|
239 |
+
{
|
240 |
+
if(($time = get_user_option("s2member_last_login_time", $user_id)))
|
241 |
{
|
242 |
+
$time = strtotime(get_date_from_gmt(date("Y-m-d H:i:s", $time)));
|
243 |
+
$val = esc_html(date("D M jS, Y", $time)).'<br /><small>@ precisely '.esc_html(date("g:i a", $time)).'</small>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
}
|
245 |
+
else $val = "—"; // Not applicable (we've never recorded them logging into the site).
|
246 |
+
}
|
247 |
+
$last_user_id = $user_id; // Record this for internal optimizations.
|
248 |
+
|
249 |
+
return apply_filters("ws_plugin__s2member_users_list_display_cols", ((strlen($val)) ? $val : "—"), get_defined_vars());
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Tells WordPress certain fields s2Member adds are sortable
|
254 |
+
*
|
255 |
+
* @package s2Member\Users_List
|
256 |
+
* @since 140518
|
257 |
+
*
|
258 |
+
* @attaches-to ``add_filter ("manage_users_sortable_columns");``
|
259 |
+
*
|
260 |
+
* @param array $columns An array of sortable user list columns.
|
261 |
+
*
|
262 |
+
* @return array The input array after having been filtered here.
|
263 |
+
*/
|
264 |
+
public static function users_list_add_sortable($columns = array())
|
265 |
+
{
|
266 |
+
if(!empty($_REQUEST['s']))
|
267 |
+
return $columns;
|
268 |
+
|
269 |
+
$columns['s2member_registration_time'] = 's2member_registration_time';
|
270 |
+
$columns['s2member_subscr_id'] = 's2member_subscr_id';
|
271 |
+
$columns['s2member_auto_eot_time'] = 's2member_auto_eot_time';
|
272 |
+
$columns['s2member_login_counter'] = 's2member_login_counter';
|
273 |
+
$columns['s2member_last_login_time'] = 's2member_last_login_time';
|
274 |
+
|
275 |
+
return $columns;
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Alters WP_Query object to make custom columns sortable
|
280 |
+
*
|
281 |
+
* @package s2Member\Users_List
|
282 |
+
* @since 140518
|
283 |
+
*
|
284 |
+
* @attaches-to ``add_filter ("pre_user_query");``
|
285 |
+
*
|
286 |
+
* @param WP_User_Query $query `WP_Query` Object passed from WordPress
|
287 |
+
*/
|
288 |
+
public static function users_list_make_sortable($query)
|
289 |
+
{
|
290 |
+
if(!is_admin()
|
291 |
+
|| empty($GLOBALS['pagenow']) || $GLOBALS['pagenow'] !== 'users.php'
|
292 |
+
|| !isset ($query->query_vars) || !empty($_REQUEST['s'])
|
293 |
+
) return;
|
294 |
+
|
295 |
+
global $wpdb;
|
296 |
+
/** @var $wpdb wpdb */
|
297 |
+
$vars = $query->query_vars;
|
298 |
+
|
299 |
+
switch($vars['orderby'])
|
300 |
+
{
|
301 |
+
// This isn't a usermeta value, so we don't need to `LEFT JOIN` here.
|
302 |
+
case 's2member_registration_time':
|
303 |
+
$query->query_orderby = "ORDER BY CAST(`user_registered` AS UNSIGNED) ".$vars['order'];
|
304 |
+
break;
|
305 |
+
|
306 |
+
// s2Member Subscription ID can contain non-integer characters. We don't `CAST` this value as `UNSIGNED`
|
307 |
+
case 's2member_subscr_id':
|
308 |
+
$query->query_from .= " LEFT JOIN `".$wpdb->usermeta."` `___m` ON (`".$wpdb->users."`.`ID` = `___m`.`user_id` AND `___m`.`meta_key` = '".esc_sql($wpdb->prefix.$vars['orderby'])."')";
|
309 |
+
$query->query_orderby = "ORDER BY `___m`.`meta_value` ".$vars['order'];
|
310 |
+
break;
|
311 |
+
|
312 |
+
case 's2member_auto_eot_time':
|
313 |
+
case 's2member_login_counter':
|
314 |
+
case 's2member_last_login_time':
|
315 |
+
$query->query_from .= " LEFT JOIN `".$wpdb->usermeta."` `___m` ON (`".$wpdb->users."`.`ID` = `___m`.`user_id` AND `___m`.`meta_key` = '".esc_sql($wpdb->prefix.$vars['orderby'])."')";
|
316 |
+
$query->query_orderby = "ORDER BY CAST(`___m`.`meta_value` AS UNSIGNED) ".$vars['order'];
|
317 |
+
break;
|
318 |
}
|
319 |
+
}
|
320 |
+
}
|
321 |
+
}
|
includes/classes/utils-urls.inc.php
CHANGED
@@ -198,6 +198,9 @@ if(!class_exists("c_ws_plugin__s2member_utils_urls"))
|
|
198 |
|
199 |
$args["httpversion"] = (!isset($args["httpversion"])) ? "1.1" : $args["httpversion"];
|
200 |
|
|
|
|
|
|
|
201 |
if((is_array($post_vars) || is_string($post_vars)) && !empty($post_vars))
|
202 |
$args = array_merge($args, array("method" => "POST", "body" => $post_vars));
|
203 |
|
198 |
|
199 |
$args["httpversion"] = (!isset($args["httpversion"])) ? "1.1" : $args["httpversion"];
|
200 |
|
201 |
+
if(!isset($args["sslverify"]) && c_ws_plugin__s2member_utils_conds::is_localhost())
|
202 |
+
$args["sslverify"] = FALSE; // Force this off on localhost installs.
|
203 |
+
|
204 |
if((is_array($post_vars) || is_string($post_vars)) && !empty($post_vars))
|
205 |
$args = array_merge($args, array("method" => "POST", "body" => $post_vars));
|
206 |
|
includes/translations/s2member.pot
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
# Copyright (C) 2015
|
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: 2015-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -12,7 +12,7 @@ msgstr ""
|
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
-
#: s2member/includes/classes/brute-force.inc.php:
|
16 |
msgctxt "s2member-front"
|
17 |
msgid "Max failed logins. Please wait %s and try again."
|
18 |
msgstr ""
|
@@ -1414,12 +1414,12 @@ msgstr ""
|
|
1414 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:192
|
1415 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
|
1416 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
|
1417 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1418 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1419 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1420 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1421 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1422 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1423 |
msgctxt "s2member-front"
|
1424 |
msgid "— Oops, you missed something: —"
|
1425 |
msgstr ""
|
@@ -1434,7 +1434,7 @@ msgstr ""
|
|
1434 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:895
|
1435 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
1436 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:192
|
1437 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1438 |
msgctxt "s2member-front"
|
1439 |
msgid "Passwords do not match up. Please try again."
|
1440 |
msgstr ""
|
@@ -1449,7 +1449,7 @@ msgstr ""
|
|
1449 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:902
|
1450 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
1451 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
|
1452 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
1453 |
msgctxt "s2member-front"
|
1454 |
msgid "Password MUST be at least 6 characters. Please try again."
|
1455 |
msgstr ""
|
@@ -2621,7 +2621,7 @@ msgstr ""
|
|
2621 |
#: s2member-pro/s2member-pro/includes/classes/coupons.inc.php:236
|
2622 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:663
|
2623 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:311
|
2624 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
2625 |
msgctxt "s2member-front percentage-symbol"
|
2626 |
msgid "%"
|
2627 |
msgstr ""
|
@@ -2740,7 +2740,7 @@ msgid "You're <strong>NOT</strong> logged in."
|
|
2740 |
msgstr ""
|
2741 |
|
2742 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:290
|
2743 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2744 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:343
|
2745 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:668
|
2746 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:411
|
@@ -2752,23 +2752,23 @@ msgid "<strong>Thank you.</strong> Your account has been updated.<br />— P
|
|
2752 |
msgstr ""
|
2753 |
|
2754 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:494
|
2755 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2756 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:503
|
2757 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:821
|
2758 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:588
|
2759 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:902
|
2760 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:746
|
2761 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1071
|
2762 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2763 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2764 |
msgctxt "s2member-front"
|
2765 |
msgid "<strong>Thank you.</strong> Your account has been approved.<br />— Please <a href=\"%s\" rel=\"nofollow\">login</a>."
|
2766 |
msgstr ""
|
2767 |
|
2768 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2769 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2770 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2771 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2772 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:124
|
2773 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:141
|
2774 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:512
|
@@ -2785,33 +2785,33 @@ msgstr ""
|
|
2785 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1101
|
2786 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:124
|
2787 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:141
|
2788 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2789 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2790 |
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-registration-in.inc.php:126
|
2791 |
msgctxt "s2member-front"
|
2792 |
msgid "<strong>Oops.</strong> A slight problem. Please contact Support for assistance."
|
2793 |
msgstr ""
|
2794 |
|
2795 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2796 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2797 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:524
|
2798 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:842
|
2799 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:609
|
2800 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:923
|
2801 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:767
|
2802 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1092
|
2803 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2804 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2805 |
msgctxt "s2member-front"
|
2806 |
msgid "<strong>Thank you.</strong> Your account has been approved.<br />— You'll receive an email momentarily."
|
2807 |
msgstr ""
|
2808 |
|
2809 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:
|
2810 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:862
|
2811 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:943
|
2812 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1112
|
2813 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:136
|
2814 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
2815 |
msgctxt "s2member-front"
|
2816 |
msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
|
2817 |
msgstr ""
|
@@ -2826,11 +2826,11 @@ msgstr ""
|
|
2826 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:431
|
2827 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:571
|
2828 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:784
|
2829 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2830 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2831 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2832 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2833 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2834 |
msgctxt "s2member-front"
|
2835 |
msgid "Security Code"
|
2836 |
msgstr ""
|
@@ -2839,8 +2839,8 @@ msgstr ""
|
|
2839 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:743
|
2840 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:246
|
2841 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:752
|
2842 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2843 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:
|
2844 |
msgctxt "s2member-front"
|
2845 |
msgid "Additional Info"
|
2846 |
msgstr ""
|
@@ -3859,14 +3859,14 @@ msgstr ""
|
|
3859 |
|
3860 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:169
|
3861 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:288
|
3862 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-sp-checkout-in.inc.php:
|
3863 |
msgctxt "s2member-front"
|
3864 |
msgid "<strong>Thank you.</strong> Your purchase has been approved.<br />— Please <a href=\"%s\" rel=\"nofollow\">click here</a> to proceed."
|
3865 |
msgstr ""
|
3866 |
|
3867 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:176
|
3868 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:295
|
3869 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-sp-checkout-in.inc.php:
|
3870 |
msgctxt "s2member-front"
|
3871 |
msgid "<strong>Oops.</strong> Unable to generate Access Link. Please contact Support for assistance."
|
3872 |
msgstr ""
|
@@ -4072,8 +4072,8 @@ msgctxt "s2member-front"
|
|
4072 |
msgid "API failure. Please contact Support for assistance."
|
4073 |
msgstr ""
|
4074 |
|
4075 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
4076 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:
|
4077 |
msgctxt "s2member-front"
|
4078 |
msgid "<strong>Thank you.</strong> Your account has been updated :-)"
|
4079 |
msgstr ""
|
@@ -4131,32 +4131,32 @@ msgctxt "s2member-front"
|
|
4131 |
msgid "<strong>Oops.</strong> No Customer|Subscr. ID. Please contact Support for assistance."
|
4132 |
msgstr ""
|
4133 |
|
4134 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
4135 |
msgctxt "s2member-front"
|
4136 |
msgid "Error code: <code>%1$s</code>. %2$s."
|
4137 |
msgstr ""
|
4138 |
|
4139 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
4140 |
msgctxt "s2member-front"
|
4141 |
msgid "Invalid parameters to Stripe; please contact the site owner."
|
4142 |
msgstr ""
|
4143 |
|
4144 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
4145 |
msgctxt "s2member-front"
|
4146 |
msgid "Invalid Stripe API keys; please contact the site owner."
|
4147 |
msgstr ""
|
4148 |
|
4149 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
4150 |
msgctxt "s2member-front"
|
4151 |
msgid "Network communication failure with Stripe; please try again."
|
4152 |
msgstr ""
|
4153 |
|
4154 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
4155 |
msgctxt "s2member-front"
|
4156 |
msgid "Stripe API error; please try again."
|
4157 |
msgstr ""
|
4158 |
|
4159 |
-
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:
|
4160 |
msgctxt "s2member-front"
|
4161 |
msgid "Stripe error; please try again."
|
4162 |
msgstr ""
|
@@ -4261,8 +4261,8 @@ msgstr ""
|
|
4261 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4262 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:106
|
4263 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
|
4264 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4265 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4266 |
msgctxt "s2member-front"
|
4267 |
msgid "Security Code missing. Please try again."
|
4268 |
msgstr ""
|
@@ -4294,7 +4294,7 @@ msgstr ""
|
|
4294 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:350
|
4295 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:650
|
4296 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4297 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4298 |
msgctxt "s2member-front"
|
4299 |
msgid "calculating sales tax..."
|
4300 |
msgstr ""
|
@@ -4306,7 +4306,7 @@ msgstr ""
|
|
4306 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:361
|
4307 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:661
|
4308 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4309 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4310 |
msgctxt "s2member-front"
|
4311 |
msgid "<strong>Sales Tax%s:</strong> %s<br /><strong>— Total%s:</strong> %s"
|
4312 |
msgstr ""
|
@@ -4318,7 +4318,7 @@ msgstr ""
|
|
4318 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:361
|
4319 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:661
|
4320 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4321 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4322 |
msgctxt "s2member-front"
|
4323 |
msgid "Today"
|
4324 |
msgstr ""
|
@@ -4328,7 +4328,7 @@ msgstr ""
|
|
4328 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
|
4329 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:723
|
4330 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4331 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4332 |
#: s2member-pro/s2member-pro/includes/templates/forms/authnet-checkout-form.php:59
|
4333 |
#: s2member-pro/s2member-pro/includes/templates/forms/authnet-registration-form.php:43
|
4334 |
#: s2member-pro/s2member-pro/includes/templates/forms/paypal-checkout-form.php:59
|
@@ -4344,7 +4344,7 @@ msgstr ""
|
|
4344 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
|
4345 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:724
|
4346 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4347 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4348 |
msgctxt "s2member-front"
|
4349 |
msgid "Your Profile"
|
4350 |
msgstr ""
|
@@ -4380,15 +4380,15 @@ msgid "Submit Form"
|
|
4380 |
msgstr ""
|
4381 |
|
4382 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4383 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4384 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4385 |
msgctxt "s2member-front"
|
4386 |
msgid "Add"
|
4387 |
msgstr ""
|
4388 |
|
4389 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4390 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4391 |
-
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:
|
4392 |
msgctxt "s2member-front"
|
4393 |
msgid "No Billing Method; please try again."
|
4394 |
msgstr ""
|
1 |
+
# Copyright (C) 2015
|
2 |
# This file is distributed under the same license as the package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: 150311\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
|
7 |
+
"POT-Creation-Date: 2015-03-11 20:36:05+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
+
#: s2member/includes/classes/brute-force.inc.php:102
|
16 |
msgctxt "s2member-front"
|
17 |
msgid "Max failed logins. Please wait %s and try again."
|
18 |
msgstr ""
|
1414 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:192
|
1415 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
|
1416 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
|
1417 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:315
|
1418 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:320
|
1419 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:616
|
1420 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:621
|
1421 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:626
|
1422 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:631
|
1423 |
msgctxt "s2member-front"
|
1424 |
msgid "— Oops, you missed something: —"
|
1425 |
msgstr ""
|
1434 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:895
|
1435 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
1436 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:192
|
1437 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:621
|
1438 |
msgctxt "s2member-front"
|
1439 |
msgid "Passwords do not match up. Please try again."
|
1440 |
msgstr ""
|
1449 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:902
|
1450 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
1451 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:197
|
1452 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:626
|
1453 |
msgctxt "s2member-front"
|
1454 |
msgid "Password MUST be at least 6 characters. Please try again."
|
1455 |
msgstr ""
|
2621 |
#: s2member-pro/s2member-pro/includes/classes/coupons.inc.php:236
|
2622 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-utilities.inc.php:663
|
2623 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-utilities.inc.php:311
|
2624 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:869
|
2625 |
msgctxt "s2member-front percentage-symbol"
|
2626 |
msgid "%"
|
2627 |
msgstr ""
|
2740 |
msgstr ""
|
2741 |
|
2742 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:290
|
2743 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:634
|
2744 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:343
|
2745 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:668
|
2746 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:411
|
2752 |
msgstr ""
|
2753 |
|
2754 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:494
|
2755 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:751
|
2756 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:503
|
2757 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:821
|
2758 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:588
|
2759 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:902
|
2760 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:746
|
2761 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1071
|
2762 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:408
|
2763 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:603
|
2764 |
msgctxt "s2member-front"
|
2765 |
msgid "<strong>Thank you.</strong> Your account has been approved.<br />— Please <a href=\"%s\" rel=\"nofollow\">login</a>."
|
2766 |
msgstr ""
|
2767 |
|
2768 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:505
|
2769 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:531
|
2770 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:760
|
2771 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:781
|
2772 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:124
|
2773 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-registration-in.inc.php:141
|
2774 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:512
|
2785 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1101
|
2786 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:124
|
2787 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-registration-in.inc.php:141
|
2788 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:420
|
2789 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:615
|
2790 |
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-registration-in.inc.php:126
|
2791 |
msgctxt "s2member-front"
|
2792 |
msgid "<strong>Oops.</strong> A slight problem. Please contact Support for assistance."
|
2793 |
msgstr ""
|
2794 |
|
2795 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:520
|
2796 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:772
|
2797 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:524
|
2798 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:842
|
2799 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:609
|
2800 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:923
|
2801 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:767
|
2802 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1092
|
2803 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:409
|
2804 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:604
|
2805 |
msgctxt "s2member-front"
|
2806 |
msgid "<strong>Thank you.</strong> Your account has been approved.<br />— You'll receive an email momentarily."
|
2807 |
msgstr ""
|
2808 |
|
2809 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:792
|
2810 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:862
|
2811 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:943
|
2812 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1112
|
2813 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:136
|
2814 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:619
|
2815 |
msgctxt "s2member-front"
|
2816 |
msgid "<strong>Unknown error.</strong> Please contact Support for assistance."
|
2817 |
msgstr ""
|
2826 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:431
|
2827 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:571
|
2828 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:784
|
2829 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:164
|
2830 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:245
|
2831 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:318
|
2832 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:402
|
2833 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:556
|
2834 |
msgctxt "s2member-front"
|
2835 |
msgid "Security Code"
|
2836 |
msgstr ""
|
2839 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-form-in.inc.php:743
|
2840 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:246
|
2841 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-form-in.inc.php:752
|
2842 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:218
|
2843 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-form-in.inc.php:529
|
2844 |
msgctxt "s2member-front"
|
2845 |
msgid "Additional Info"
|
2846 |
msgstr ""
|
3859 |
|
3860 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:169
|
3861 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:288
|
3862 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-sp-checkout-in.inc.php:155
|
3863 |
msgctxt "s2member-front"
|
3864 |
msgid "<strong>Thank you.</strong> Your purchase has been approved.<br />— Please <a href=\"%s\" rel=\"nofollow\">click here</a> to proceed."
|
3865 |
msgstr ""
|
3866 |
|
3867 |
#: s2member-pro/s2member-pro/includes/classes/gateways/authnet/authnet-sp-checkout-in.inc.php:176
|
3868 |
#: s2member-pro/s2member-pro/includes/classes/gateways/paypal/paypal-sp-checkout-in.inc.php:295
|
3869 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-sp-checkout-in.inc.php:162
|
3870 |
msgctxt "s2member-front"
|
3871 |
msgid "<strong>Oops.</strong> Unable to generate Access Link. Please contact Support for assistance."
|
3872 |
msgstr ""
|
4072 |
msgid "API failure. Please contact Support for assistance."
|
4073 |
msgstr ""
|
4074 |
|
4075 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:249
|
4076 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:496
|
4077 |
msgctxt "s2member-front"
|
4078 |
msgid "<strong>Thank you.</strong> Your account has been updated :-)"
|
4079 |
msgstr ""
|
4131 |
msgid "<strong>Oops.</strong> No Customer|Subscr. ID. Please contact Support for assistance."
|
4132 |
msgstr ""
|
4133 |
|
4134 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:641
|
4135 |
msgctxt "s2member-front"
|
4136 |
msgid "Error code: <code>%1$s</code>. %2$s."
|
4137 |
msgstr ""
|
4138 |
|
4139 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:645
|
4140 |
msgctxt "s2member-front"
|
4141 |
msgid "Invalid parameters to Stripe; please contact the site owner."
|
4142 |
msgstr ""
|
4143 |
|
4144 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:648
|
4145 |
msgctxt "s2member-front"
|
4146 |
msgid "Invalid Stripe API keys; please contact the site owner."
|
4147 |
msgstr ""
|
4148 |
|
4149 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:651
|
4150 |
msgctxt "s2member-front"
|
4151 |
msgid "Network communication failure with Stripe; please try again."
|
4152 |
msgstr ""
|
4153 |
|
4154 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:654
|
4155 |
msgctxt "s2member-front"
|
4156 |
msgid "Stripe API error; please try again."
|
4157 |
msgstr ""
|
4158 |
|
4159 |
+
#: s2member-pro/s2member-pro/includes/classes/gateways/stripe/stripe-utilities.inc.php:656
|
4160 |
msgctxt "s2member-front"
|
4161 |
msgid "Stripe error; please try again."
|
4162 |
msgstr ""
|
4261 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4262 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:106
|
4263 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:202
|
4264 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:320
|
4265 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:631
|
4266 |
msgctxt "s2member-front"
|
4267 |
msgid "Security Code missing. Please try again."
|
4268 |
msgstr ""
|
4294 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:350
|
4295 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:650
|
4296 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4297 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:473
|
4298 |
msgctxt "s2member-front"
|
4299 |
msgid "calculating sales tax..."
|
4300 |
msgstr ""
|
4306 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:361
|
4307 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:661
|
4308 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4309 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:490
|
4310 |
msgctxt "s2member-front"
|
4311 |
msgid "<strong>Sales Tax%s:</strong> %s<br /><strong>— Total%s:</strong> %s"
|
4312 |
msgstr ""
|
4318 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:361
|
4319 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:661
|
4320 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4321 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:490
|
4322 |
msgctxt "s2member-front"
|
4323 |
msgid "Today"
|
4324 |
msgstr ""
|
4328 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
|
4329 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:723
|
4330 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4331 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:417
|
4332 |
#: s2member-pro/s2member-pro/includes/templates/forms/authnet-checkout-form.php:59
|
4333 |
#: s2member-pro/s2member-pro/includes/templates/forms/authnet-registration-form.php:43
|
4334 |
#: s2member-pro/s2member-pro/includes/templates/forms/paypal-checkout-form.php:59
|
4344 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal-min.js:1
|
4345 |
#: s2member-pro/s2member-pro/includes/separates/gateways/paypal/paypal.js:724
|
4346 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4347 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:418
|
4348 |
msgctxt "s2member-front"
|
4349 |
msgid "Your Profile"
|
4350 |
msgstr ""
|
4380 |
msgstr ""
|
4381 |
|
4382 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4383 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:279
|
4384 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:577
|
4385 |
msgctxt "s2member-front"
|
4386 |
msgid "Add"
|
4387 |
msgstr ""
|
4388 |
|
4389 |
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe-min.js:1
|
4390 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:299
|
4391 |
+
#: s2member-pro/s2member-pro/includes/separates/gateways/stripe/stripe.js:601
|
4392 |
msgctxt "s2member-front"
|
4393 |
msgid "No Billing Method; please try again."
|
4394 |
msgstr ""
|
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,21 @@ 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 |
= v150225 =
|
179 |
|
180 |
- (s2Member Pro) **Accept Bitcoin via Stripe!** This release of s2Member Pro comes integrated with the latest version of the Stripe API, where it is now possible to accept Bitcoin right along with most major credit cards—made possible by [Stripe's latest update to support Bitcoin](https://stripe.com/bitcoin). It's as easy as flipping a switch :-) Please see: `Dashboard ⥱ s2Member Pro ⥱ Stripe Options ⥱ Account Details ⥱ Accept Bitcoin`. Referencing [this GitHub issue](https://github.com/websharks/s2member/issues/482); i.e., the original feature request.
|
1 |
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
|
2 |
|
3 |
+
Version: 150311
|
4 |
+
Stable tag: 150311
|
5 |
|
6 |
SSL Compatible: yes
|
7 |
bbPress® Compatible: yes
|
169 |
|
170 |
== Upgrade Notice ==
|
171 |
|
172 |
+
= v150311 =
|
173 |
|
174 |
(Maintenance Release) Upgrade immediately.
|
175 |
|
176 |
== Changelog ==
|
177 |
|
178 |
+
= v150311 =
|
179 |
+
|
180 |
+
- (s2Member/s2Member) **Bug Fix:** The list of users in the WordPress Dashboard was going blank in a particular scenario where a search was attempted in concert with a sortable s2Member column. Fixed in this release. Props to @bridgeport for finding this. See also [this GitHub issue](https://github.com/websharks/s2member/issues/496#issuecomment-76821470) if you'd like technical details.
|
181 |
+
- (s2Member Pro) **`[s2Member-List /]` Bug Fix:** This release resolves an issue with pagination in the `[s2Member-List /]` shortcode after recent changes in the `WP_User_Query` class. See [this GitHub issue](https://github.com/websharks/s2member/issues/493) if you'd like additional details.
|
182 |
+
- (s2Member Pro) **Remote Operations API (Bug Fix):** If a remote API call was made to find a user by `user_login`, and that username was all numeric, the `WP_User` class treated it like a user ID instead of as an actual username. Resolved in this release by calling `new WP_User(0, [user login])` as the second argument to the constructor. Thereby forcing `WP_User` to consider it a username. See also [this GitHub issue](https://github.com/websharks/s2member/issues/498) if you'd like technical details.
|
183 |
+
- (s2Member Pro) **Stripe Bug Fix:** Stripe Pro-Forms for Specific Post/Page Access should not disable the email address field for logged-in users. Resolved in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/500) if you'd like technical details.
|
184 |
+
- (s2Member Pro) **Stripe Pro-Forms:** This release corrects a bug first introduced in the last release that prevented custom templates for Stripe Pro-Forms from working as intended. Please see [this GitHub issue](https://github.com/websharks/s2member/issues/510) if you'd like additional details.
|
185 |
+
- (s2Member Pro) **Bug Fix for Gift/Redemption Codes:** This release of s2Member corrects a bug that impacted the generation of Gift/Redemption Codes whenever they were sold with Specific Post/Page Access. See also [this GitHub issue](https://github.com/websharks/s2member/issues/512) if you'd like additional details.
|
186 |
+
|
187 |
= v150225 =
|
188 |
|
189 |
- (s2Member Pro) **Accept Bitcoin via Stripe!** This release of s2Member Pro comes integrated with the latest version of the Stripe API, where it is now possible to accept Bitcoin right along with most major credit cards—made possible by [Stripe's latest update to support Bitcoin](https://stripe.com/bitcoin). It's as easy as flipping a switch :-) Please see: `Dashboard ⥱ s2Member Pro ⥱ Stripe Options ⥱ Account Details ⥱ Accept Bitcoin`. Referencing [this GitHub issue](https://github.com/websharks/s2member/issues/482); i.e., the original feature request.
|
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
|
@@ -76,7 +76,7 @@ if(!defined('WPINC')) // MUST have WordPress.
|
|
76 |
* @var string
|
77 |
*/
|
78 |
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
|
79 |
-
define('WS_PLUGIN__S2MEMBER_VERSION', '
|
80 |
/**
|
81 |
* Minimum PHP version required to run s2Member.
|
82 |
*
|
@@ -106,7 +106,7 @@ if(!defined('WS_PLUGIN__S2MEMBER_MIN_WP_VERSION'))
|
|
106 |
* @var string
|
107 |
*/
|
108 |
if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
|
109 |
-
define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '
|
110 |
/*
|
111 |
Several compatibility checks.
|
112 |
If all pass, load the s2Member plugin.
|
19 |
*/
|
20 |
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
|
21 |
|
22 |
+
Version: 150311
|
23 |
+
Stable tag: 150311
|
24 |
|
25 |
SSL Compatible: yes
|
26 |
bbPress Compatible: yes
|
76 |
* @var string
|
77 |
*/
|
78 |
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
|
79 |
+
define('WS_PLUGIN__S2MEMBER_VERSION', '150311' /* !#distro-version#! */);
|
80 |
/**
|
81 |
* Minimum PHP version required to run s2Member.
|
82 |
*
|
106 |
* @var string
|
107 |
*/
|
108 |
if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
|
109 |
+
define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '150311' /* !#distro-version#! */);
|
110 |
/*
|
111 |
Several compatibility checks.
|
112 |
If all pass, load the s2Member plugin.
|