Version Description
- Stripe Subscription now considers plan trial period settings.
- Added CSS class names to the fields in the admin add/edit members interface.
- Added more translatable strings to the POT file.
- WordPress 5.0 compatibility
Download this release
Release Info
Developer | mra13 |
Plugin | Simple Membership |
Version | 3.7.4 |
Comparing to | |
See all releases |
Code changes from version 3.7.0 to 3.7.4
- classes/class.simple-wp-membership.php +52 -22
- classes/class.swpm-auth.php +21 -3
- classes/class.swpm-init-time-tasks.php +0 -43
- classes/class.swpm-installation.php +5 -1
- classes/class.swpm-self-action-handler.php +12 -0
- classes/class.swpm-settings.php +7 -3
- classes/class.swpm-utils-misc.php +17 -1
- classes/class.swpm-wp-loaded-tasks.php +43 -0
- images/addons/2fa-addon-icon.png +0 -0
- images/addons/full-page-protection-addon.png +0 -0
- ipn/swpm-smart-checkout-ipn.php +6 -12
- ipn/swpm-stripe-subscription-ipn.php +2 -1
- languages/simple-membership.pot +37 -0
- readme.txt +25 -2
- simple-wp-membership.php +2 -2
- views/account_delete_warning.php +7 -7
- views/admin_add.php +4 -4
- views/admin_add_ons_page.php +34 -18
- views/admin_edit.php +8 -8
- views/admin_member_form_common_part.php +13 -13
- views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php +16 -8
classes/class.simple-wp-membership.php
CHANGED
@@ -35,10 +35,10 @@ include_once('shortcode-related/class.swpm-shortcodes-handler.php');
|
|
35 |
class SimpleWpMembership {
|
36 |
|
37 |
public function __construct() {
|
38 |
-
|
39 |
new SwpmShortcodesHandler(); //Tackle the shortcode definitions and implementation.
|
40 |
new SwpmSelfActionHandler(); //Tackle the self action hook handling.
|
41 |
-
|
42 |
add_action('admin_menu', array(&$this, 'menu'));
|
43 |
add_action('init', array(&$this, 'init_hook'));
|
44 |
add_action('wp_loaded', array(&$this, 'handle_wp_loaded_tasks'));
|
@@ -64,11 +64,12 @@ class SimpleWpMembership {
|
|
64 |
add_action('wp_enqueue_scripts', array(&$this, 'front_library'));
|
65 |
add_action('load-toplevel_page_simple_wp_membership', array(&$this, 'admin_library'));
|
66 |
add_action('load-wp-membership_page_simple_wp_membership_levels', array(&$this, 'admin_library'));
|
67 |
-
|
|
|
68 |
add_action('wp_logout', array(&$this, 'wp_logout'));
|
69 |
-
add_action('wp_authenticate', array(&$this, 'wp_authenticate_handler'), 1, 2);
|
70 |
add_action('swpm_logout', array(&$this, 'swpm_do_user_logout'));
|
71 |
add_action('user_register', array(&$this, 'swpm_handle_wp_user_registration'));
|
|
|
72 |
|
73 |
//AJAX hooks
|
74 |
add_action('wp_ajax_swpm_validate_email', 'SwpmAjax::validate_email_ajax');
|
@@ -219,26 +220,26 @@ class SimpleWpMembership {
|
|
219 |
}
|
220 |
|
221 |
public static function swpm_login($username, $pass, $rememberme = true) {
|
222 |
-
if (is_user_logged_in()) {
|
223 |
$current_user = wp_get_current_user();
|
224 |
-
SwpmLog::log_auth_debug("static function swpm_login(). User is logged in. WP Username: ". $current_user->user_login, true);
|
225 |
if ($current_user->user_login == $username) {
|
226 |
return;
|
227 |
}
|
228 |
}
|
229 |
-
SwpmLog::log_auth_debug("Trying wp_signon() with username: ". $username, true);
|
230 |
$user_obj = wp_signon(array('user_login' => $username, 'user_password' => $pass, 'remember' => $rememberme), is_ssl());
|
231 |
if ($user_obj instanceof WP_User) {
|
232 |
wp_set_current_user($user_obj->ID, $user_obj->user_login);
|
233 |
-
SwpmLog::log_auth_debug("Setting current WP user to: ". $user_obj->user_login, true);
|
234 |
} else {
|
235 |
SwpmLog::log_auth_debug("wp_signon() failed for the corresponding WP user account.", false);
|
236 |
-
if(
|
237 |
//SwpmLog::log_auth_debug("Error Message: ". $user_obj->get_error_message(), false);
|
238 |
$force_wp_user_sync = SwpmSettings::get_instance()->get_value('force-wp-user-sync');
|
239 |
if (!empty($force_wp_user_sync)) {
|
240 |
//Force WP user login sync is enabled. Show error and exit out since the WP user login failed.
|
241 |
-
$error_msg = SwpmUtils::_("Error! This site has the force WP user login feature enabled in the settings. We could not find a WP user record for the given username: "). $username;
|
242 |
$error_msg .= "<br /><br />" . SwpmUtils::_("This error is triggered when a member account doesn't have a corresponding WP user account. So the plugin fails to log the user into the WP User system.");
|
243 |
$error_msg .= "<br /><br />" . SwpmUtils::_("Contact the site admin and request them to check your username in the WP Users menu to see what happened with the WP user entry of your account.");
|
244 |
$error_msg .= "<br /><br />" . SwpmUtils::_("The site admin can disable the Force WP User Synchronization feature in the settings to disable this feature and this error will go away.");
|
@@ -247,7 +248,15 @@ class SimpleWpMembership {
|
|
247 |
}
|
248 |
}
|
249 |
}
|
250 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
SwpmLog::log_auth_debug("Triggering swpm_after_login hook.", true);
|
252 |
do_action('swpm_after_login');
|
253 |
if (!SwpmUtils::is_ajax()) {
|
@@ -264,16 +273,37 @@ class SimpleWpMembership {
|
|
264 |
}
|
265 |
}
|
266 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
public function wp_authenticate_handler($username, $password) {
|
268 |
-
|
269 |
$auth = SwpmAuth::get_instance();
|
270 |
if (($auth->is_logged_in() && ($auth->userData->user_name == $username))) {
|
271 |
-
SwpmLog::log_auth_debug('wp_authenticate action. User with username: '
|
272 |
return;
|
273 |
}
|
274 |
if (!empty($username)) {
|
275 |
SwpmLog::log_auth_debug('wp_authenticate action. Handling login for username: ' . $username, true);
|
276 |
$auth->login($username, $password, true);
|
|
|
|
|
|
|
|
|
|
|
277 |
}
|
278 |
}
|
279 |
|
@@ -289,7 +319,7 @@ class SimpleWpMembership {
|
|
289 |
}
|
290 |
return ob_get_clean();
|
291 |
}
|
292 |
-
|
293 |
public function wp_logout() {
|
294 |
$auth = SwpmAuth::get_instance();
|
295 |
if ($auth->is_logged_in()) {
|
@@ -313,9 +343,9 @@ class SimpleWpMembership {
|
|
313 |
$profile['last_name'] = $wp_user_data->user_lastname;
|
314 |
$wpdb->update($wpdb->prefix . "swpm_members_tbl", $profile, array('member_id' => $profile['member_id']));
|
315 |
}
|
316 |
-
|
317 |
function swpm_handle_wp_user_registration($user_id) {
|
318 |
-
|
319 |
$swpm_settings_obj = SwpmSettings::get_instance();
|
320 |
$enable_auto_create_swpm_members = $swpm_settings_obj->get_value('enable-auto-create-swpm-members');
|
321 |
$default_level = $swpm_settings_obj->get_value('auto-create-default-membership-level');
|
@@ -324,10 +354,10 @@ class SimpleWpMembership {
|
|
324 |
if (empty($enable_auto_create_swpm_members)) {
|
325 |
return;
|
326 |
}
|
327 |
-
if (empty($default_level)){
|
328 |
return;
|
329 |
}
|
330 |
-
|
331 |
$user_info = get_userdata($user_id);
|
332 |
if (SwpmMemberUtils::get_user_by_user_name($user_info->user_login)) {
|
333 |
SwpmLog::log_simple_debug("swpm_handle_wp_user_registration() - SWPM member account with this username already exists! No new account will be created for this user.", false);
|
@@ -471,8 +501,8 @@ class SimpleWpMembership {
|
|
471 |
|
472 |
// The actual fields for data entry
|
473 |
echo '<h4>' . __("Do you want to protect this content?", 'simple-membership') . '</h4>';
|
474 |
-
echo '<input type="radio" ' . ((!$is_protected) ? 'checked' : "") . ' name="swpm_protect_post" value="1" /> '. SwpmUtils::_('No, Do not protect this content.') . '<br/>';
|
475 |
-
echo '<input type="radio" ' . (($is_protected) ? 'checked' : "") . ' name="swpm_protect_post" value="2" /> '. SwpmUtils::_('Yes, Protect this content.') . '<br/>';
|
476 |
echo $protection_obj->get_last_message();
|
477 |
|
478 |
echo '<h4>' . __("Select the membership level that can access this content:", 'simple-membership') . "</h4>";
|
@@ -572,11 +602,11 @@ class SimpleWpMembership {
|
|
572 |
$init_tasks->do_init_tasks();
|
573 |
}
|
574 |
|
575 |
-
public function handle_wp_loaded_tasks(){
|
576 |
$wp_loaded_tasks = new SwpmWpLoadedTasks();
|
577 |
$wp_loaded_tasks->do_wp_loaded_tasks();
|
578 |
}
|
579 |
-
|
580 |
public function admin_library() {
|
581 |
//Only loaded on selective swpm admin menu page rendering.
|
582 |
$this->common_library();
|
35 |
class SimpleWpMembership {
|
36 |
|
37 |
public function __construct() {
|
38 |
+
|
39 |
new SwpmShortcodesHandler(); //Tackle the shortcode definitions and implementation.
|
40 |
new SwpmSelfActionHandler(); //Tackle the self action hook handling.
|
41 |
+
|
42 |
add_action('admin_menu', array(&$this, 'menu'));
|
43 |
add_action('init', array(&$this, 'init_hook'));
|
44 |
add_action('wp_loaded', array(&$this, 'handle_wp_loaded_tasks'));
|
64 |
add_action('wp_enqueue_scripts', array(&$this, 'front_library'));
|
65 |
add_action('load-toplevel_page_simple_wp_membership', array(&$this, 'admin_library'));
|
66 |
add_action('load-wp-membership_page_simple_wp_membership_levels', array(&$this, 'admin_library'));
|
67 |
+
|
68 |
+
add_action('wp_authenticate', array(&$this, 'wp_authenticate_handler'), 1, 2);
|
69 |
add_action('wp_logout', array(&$this, 'wp_logout'));
|
|
|
70 |
add_action('swpm_logout', array(&$this, 'swpm_do_user_logout'));
|
71 |
add_action('user_register', array(&$this, 'swpm_handle_wp_user_registration'));
|
72 |
+
add_action('profile_update', array(&$this, 'sync_with_wp_profile'), 10, 2);
|
73 |
|
74 |
//AJAX hooks
|
75 |
add_action('wp_ajax_swpm_validate_email', 'SwpmAjax::validate_email_ajax');
|
220 |
}
|
221 |
|
222 |
public static function swpm_login($username, $pass, $rememberme = true) {
|
223 |
+
if (is_user_logged_in()) {
|
224 |
$current_user = wp_get_current_user();
|
225 |
+
SwpmLog::log_auth_debug("static function swpm_login(). User is logged in. WP Username: " . $current_user->user_login, true);
|
226 |
if ($current_user->user_login == $username) {
|
227 |
return;
|
228 |
}
|
229 |
}
|
230 |
+
SwpmLog::log_auth_debug("Trying wp_signon() with username: " . $username, true);
|
231 |
$user_obj = wp_signon(array('user_login' => $username, 'user_password' => $pass, 'remember' => $rememberme), is_ssl());
|
232 |
if ($user_obj instanceof WP_User) {
|
233 |
wp_set_current_user($user_obj->ID, $user_obj->user_login);
|
234 |
+
SwpmLog::log_auth_debug("Setting current WP user to: " . $user_obj->user_login, true);
|
235 |
} else {
|
236 |
SwpmLog::log_auth_debug("wp_signon() failed for the corresponding WP user account.", false);
|
237 |
+
if (is_wp_error($user_obj)) {
|
238 |
//SwpmLog::log_auth_debug("Error Message: ". $user_obj->get_error_message(), false);
|
239 |
$force_wp_user_sync = SwpmSettings::get_instance()->get_value('force-wp-user-sync');
|
240 |
if (!empty($force_wp_user_sync)) {
|
241 |
//Force WP user login sync is enabled. Show error and exit out since the WP user login failed.
|
242 |
+
$error_msg = SwpmUtils::_("Error! This site has the force WP user login feature enabled in the settings. We could not find a WP user record for the given username: ") . $username;
|
243 |
$error_msg .= "<br /><br />" . SwpmUtils::_("This error is triggered when a member account doesn't have a corresponding WP user account. So the plugin fails to log the user into the WP User system.");
|
244 |
$error_msg .= "<br /><br />" . SwpmUtils::_("Contact the site admin and request them to check your username in the WP Users menu to see what happened with the WP user entry of your account.");
|
245 |
$error_msg .= "<br /><br />" . SwpmUtils::_("The site admin can disable the Force WP User Synchronization feature in the settings to disable this feature and this error will go away.");
|
248 |
}
|
249 |
}
|
250 |
}
|
251 |
+
|
252 |
+
$proceed_after_auth = apply_filters('swpm_login_auth_completed_filter', true);
|
253 |
+
|
254 |
+
if (!$proceed_after_auth) {
|
255 |
+
$auth = SwpmAuth::get_instance();
|
256 |
+
$auth->logout();
|
257 |
+
return;
|
258 |
+
}
|
259 |
+
|
260 |
SwpmLog::log_auth_debug("Triggering swpm_after_login hook.", true);
|
261 |
do_action('swpm_after_login');
|
262 |
if (!SwpmUtils::is_ajax()) {
|
273 |
}
|
274 |
}
|
275 |
|
276 |
+
/* This function can be used to authenticate a member using currently logged in wp user. */
|
277 |
+
public function set_current_user_handler() {
|
278 |
+
$auth = SwpmAuth::get_instance();
|
279 |
+
if ($auth->is_logged_in()) {
|
280 |
+
return;
|
281 |
+
}
|
282 |
+
$user = wp_get_current_user();
|
283 |
+
if (empty($user) || $user->ID === 0) {
|
284 |
+
return false;
|
285 |
+
}
|
286 |
+
SwpmLog::log_auth_debug('set_current_user action. Attempting to login user ' . $user->user_login, true);
|
287 |
+
//remove hook in order for it to not be called several times in the process
|
288 |
+
remove_action('set_current_user', array($this, 'set_current_user_handler'));
|
289 |
+
$auth->login_to_swpm_using_wp_user($user);
|
290 |
+
}
|
291 |
+
|
292 |
public function wp_authenticate_handler($username, $password) {
|
293 |
+
|
294 |
$auth = SwpmAuth::get_instance();
|
295 |
if (($auth->is_logged_in() && ($auth->userData->user_name == $username))) {
|
296 |
+
SwpmLog::log_auth_debug('wp_authenticate action. User with username: ' . $username . ' is already logged in.', true);
|
297 |
return;
|
298 |
}
|
299 |
if (!empty($username)) {
|
300 |
SwpmLog::log_auth_debug('wp_authenticate action. Handling login for username: ' . $username, true);
|
301 |
$auth->login($username, $password, true);
|
302 |
+
} else {
|
303 |
+
//empty username can mean some plugin trying to login WP user using its own methods.
|
304 |
+
//Let's add hook for set_current_user action and let it handle the login if needed.
|
305 |
+
SwpmLog::log_auth_debug('wp_authenticate action. Empty username provided. Adding set_current_username hook to catch potential login attempt.', true);
|
306 |
+
add_action('set_current_user', array($this, 'set_current_user_handler'));
|
307 |
}
|
308 |
}
|
309 |
|
319 |
}
|
320 |
return ob_get_clean();
|
321 |
}
|
322 |
+
|
323 |
public function wp_logout() {
|
324 |
$auth = SwpmAuth::get_instance();
|
325 |
if ($auth->is_logged_in()) {
|
343 |
$profile['last_name'] = $wp_user_data->user_lastname;
|
344 |
$wpdb->update($wpdb->prefix . "swpm_members_tbl", $profile, array('member_id' => $profile['member_id']));
|
345 |
}
|
346 |
+
|
347 |
function swpm_handle_wp_user_registration($user_id) {
|
348 |
+
|
349 |
$swpm_settings_obj = SwpmSettings::get_instance();
|
350 |
$enable_auto_create_swpm_members = $swpm_settings_obj->get_value('enable-auto-create-swpm-members');
|
351 |
$default_level = $swpm_settings_obj->get_value('auto-create-default-membership-level');
|
354 |
if (empty($enable_auto_create_swpm_members)) {
|
355 |
return;
|
356 |
}
|
357 |
+
if (empty($default_level)) {
|
358 |
return;
|
359 |
}
|
360 |
+
|
361 |
$user_info = get_userdata($user_id);
|
362 |
if (SwpmMemberUtils::get_user_by_user_name($user_info->user_login)) {
|
363 |
SwpmLog::log_simple_debug("swpm_handle_wp_user_registration() - SWPM member account with this username already exists! No new account will be created for this user.", false);
|
501 |
|
502 |
// The actual fields for data entry
|
503 |
echo '<h4>' . __("Do you want to protect this content?", 'simple-membership') . '</h4>';
|
504 |
+
echo '<input type="radio" ' . ((!$is_protected) ? 'checked' : "") . ' name="swpm_protect_post" value="1" /> ' . SwpmUtils::_('No, Do not protect this content.') . '<br/>';
|
505 |
+
echo '<input type="radio" ' . (($is_protected) ? 'checked' : "") . ' name="swpm_protect_post" value="2" /> ' . SwpmUtils::_('Yes, Protect this content.') . '<br/>';
|
506 |
echo $protection_obj->get_last_message();
|
507 |
|
508 |
echo '<h4>' . __("Select the membership level that can access this content:", 'simple-membership') . "</h4>";
|
602 |
$init_tasks->do_init_tasks();
|
603 |
}
|
604 |
|
605 |
+
public function handle_wp_loaded_tasks() {
|
606 |
$wp_loaded_tasks = new SwpmWpLoadedTasks();
|
607 |
$wp_loaded_tasks->do_wp_loaded_tasks();
|
608 |
}
|
609 |
+
|
610 |
public function admin_library() {
|
611 |
//Only loaded on selective swpm admin menu page rendering.
|
612 |
$this->common_library();
|
classes/class.swpm-auth.php
CHANGED
@@ -48,7 +48,7 @@ class SwpmAuth {
|
|
48 |
$wp_profile_page = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/wp-admin/profile.php';
|
49 |
$error_msg = '';
|
50 |
$error_msg .= '<p>' . SwpmUtils::_('Warning! Simple Membership plugin cannot process this login request to prevent you from getting logged out of WP Admin accidentally.') . '</p>';
|
51 |
-
$error_msg .= '<p><a href="'
|
52 |
$error_msg .= '<p>' . SwpmUtils::_('You are logged into the site as an ADMIN user in this browser. First, logout from WP Admin then you will be able to log in as a normal member.') . '</p>';
|
53 |
$error_msg .= '<p>' . SwpmUtils::_('Alternatively, you can use a different browser (where you are not logged-in as ADMIN) to test the membership login.') . '</p>';
|
54 |
$error_msg .= '<p>' . SwpmUtils::_('Your normal visitors or members will never see this message. This message is ONLY for ADMIN user.') . '</p>';
|
@@ -176,6 +176,24 @@ class SwpmAuth {
|
|
176 |
return $this->check_password($password, $this->get('password'));
|
177 |
}
|
178 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
public function login($user, $pass, $remember = '', $secure = '') {
|
180 |
SwpmLog::log_auth_debug("SwpmAuth::login()", true);
|
181 |
if ($this->isLoggedIn) {
|
@@ -212,7 +230,7 @@ class SwpmAuth {
|
|
212 |
}
|
213 |
|
214 |
$expire = apply_filters('swpm_auth_cookie_expiry_value', $expire);
|
215 |
-
|
216 |
setcookie("swpm_in_use", "swpm_in_use", $expire, COOKIEPATH, COOKIE_DOMAIN);
|
217 |
|
218 |
$expiration_timestamp = SwpmUtils::get_expiration_timestamp($this->userData);
|
@@ -270,7 +288,7 @@ class SwpmAuth {
|
|
270 |
if ($hmac != $hash) {
|
271 |
$this->lastStatusMsg = SwpmUtils::_("Please login again.");
|
272 |
SwpmLog::log_auth_debug("validate() - Bad Hash", true);
|
273 |
-
wp_logout()
|
274 |
return false;
|
275 |
}
|
276 |
|
48 |
$wp_profile_page = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/wp-admin/profile.php';
|
49 |
$error_msg = '';
|
50 |
$error_msg .= '<p>' . SwpmUtils::_('Warning! Simple Membership plugin cannot process this login request to prevent you from getting logged out of WP Admin accidentally.') . '</p>';
|
51 |
+
$error_msg .= '<p><a href="' . $wp_profile_page . '" target="_blank">' . SwpmUtils::_('Click here') . '</a>' . SwpmUtils::_(' to see the profile you are currently logged into in this browser.') . '</p>';
|
52 |
$error_msg .= '<p>' . SwpmUtils::_('You are logged into the site as an ADMIN user in this browser. First, logout from WP Admin then you will be able to log in as a normal member.') . '</p>';
|
53 |
$error_msg .= '<p>' . SwpmUtils::_('Alternatively, you can use a different browser (where you are not logged-in as ADMIN) to test the membership login.') . '</p>';
|
54 |
$error_msg .= '<p>' . SwpmUtils::_('Your normal visitors or members will never see this message. This message is ONLY for ADMIN user.') . '</p>';
|
176 |
return $this->check_password($password, $this->get('password'));
|
177 |
}
|
178 |
|
179 |
+
public function login_to_swpm_using_wp_user($user) {
|
180 |
+
if ($this->isLoggedIn) {
|
181 |
+
return false;
|
182 |
+
}
|
183 |
+
$email = $user->user_email;
|
184 |
+
$member = SwpmMemberUtils::get_user_by_email($email);
|
185 |
+
if (empty($member)) {
|
186 |
+
//There is no swpm profile with this email.
|
187 |
+
return false;
|
188 |
+
}
|
189 |
+
$this->userData = $member;
|
190 |
+
$this->isLoggedIn = true;
|
191 |
+
$this->set_cookie();
|
192 |
+
SwpmLog::log_auth_debug('Member has been logged in using WP User object.', true);
|
193 |
+
$this->check_constraints();
|
194 |
+
return true;
|
195 |
+
}
|
196 |
+
|
197 |
public function login($user, $pass, $remember = '', $secure = '') {
|
198 |
SwpmLog::log_auth_debug("SwpmAuth::login()", true);
|
199 |
if ($this->isLoggedIn) {
|
230 |
}
|
231 |
|
232 |
$expire = apply_filters('swpm_auth_cookie_expiry_value', $expire);
|
233 |
+
|
234 |
setcookie("swpm_in_use", "swpm_in_use", $expire, COOKIEPATH, COOKIE_DOMAIN);
|
235 |
|
236 |
$expiration_timestamp = SwpmUtils::get_expiration_timestamp($this->userData);
|
288 |
if ($hmac != $hash) {
|
289 |
$this->lastStatusMsg = SwpmUtils::_("Please login again.");
|
290 |
SwpmLog::log_auth_debug("validate() - Bad Hash", true);
|
291 |
+
wp_logout(); //Force logout of WP user session to clear the bad hash.
|
292 |
return false;
|
293 |
}
|
294 |
|
classes/class.swpm-init-time-tasks.php
CHANGED
@@ -48,9 +48,6 @@ class SwpmInitTimeTasks {
|
|
48 |
$this->admin_init();
|
49 |
}
|
50 |
}
|
51 |
-
|
52 |
-
//IPN listener
|
53 |
-
$this->swpm_ipn_listener();
|
54 |
}
|
55 |
|
56 |
public function admin_init() {
|
@@ -182,44 +179,4 @@ class SwpmInitTimeTasks {
|
|
182 |
}
|
183 |
}
|
184 |
|
185 |
-
/* Payment Gateway IPN listener */
|
186 |
-
|
187 |
-
public function swpm_ipn_listener() {
|
188 |
-
|
189 |
-
//Listen and handle PayPal IPN
|
190 |
-
$swpm_process_ipn = filter_input(INPUT_GET, 'swpm_process_ipn');
|
191 |
-
if ($swpm_process_ipn == '1') {
|
192 |
-
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_pp_ipn.php');
|
193 |
-
exit;
|
194 |
-
}
|
195 |
-
|
196 |
-
//Listen and handle Stripe Buy Now IPN
|
197 |
-
$swpm_process_stripe_buy_now = filter_input(INPUT_GET, 'swpm_process_stripe_buy_now');
|
198 |
-
if ($swpm_process_stripe_buy_now == '1') {
|
199 |
-
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-buy-now-ipn.php');
|
200 |
-
exit;
|
201 |
-
}
|
202 |
-
|
203 |
-
//Listen and handle Stripe Subscription IPN
|
204 |
-
$swpm_process_stripe_subscription = filter_input(INPUT_GET, 'swpm_process_stripe_subscription');
|
205 |
-
if ($swpm_process_stripe_subscription == '1') {
|
206 |
-
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-subscription-ipn.php');
|
207 |
-
exit;
|
208 |
-
}
|
209 |
-
|
210 |
-
//Listen and handle Braintree Buy Now IPN
|
211 |
-
$swpm_process_braintree_buy_now = filter_input(INPUT_GET, 'swpm_process_braintree_buy_now');
|
212 |
-
if ($swpm_process_braintree_buy_now == '1') {
|
213 |
-
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-braintree-buy-now-ipn.php');
|
214 |
-
exit;
|
215 |
-
}
|
216 |
-
|
217 |
-
//Listen and handle Braintree Buy Now IPN
|
218 |
-
if (wp_doing_ajax()) {
|
219 |
-
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-smart-checkout-ipn.php');
|
220 |
-
add_action('wp_ajax_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder');
|
221 |
-
add_action('wp_ajax_nopriv_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder');
|
222 |
-
}
|
223 |
-
}
|
224 |
-
|
225 |
}
|
48 |
$this->admin_init();
|
49 |
}
|
50 |
}
|
|
|
|
|
|
|
51 |
}
|
52 |
|
53 |
public function admin_init() {
|
179 |
}
|
180 |
}
|
181 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
}
|
classes/class.swpm-installation.php
CHANGED
@@ -233,6 +233,10 @@ class SwpmInstallation {
|
|
233 |
//Create the mandatory pages (if they are not there)
|
234 |
SwpmMiscUtils::create_mandatory_wp_pages();
|
235 |
//End of page creation
|
|
|
|
|
|
|
|
|
236 |
$settings->set_value('reg-complete-mail-subject', stripslashes($reg_email_subject))
|
237 |
->set_value('reg-complete-mail-body', stripslashes($reg_email_body))
|
238 |
->set_value('reg-prompt-complete-mail-subject', stripslashes($reg_prompt_email_subject))
|
@@ -243,7 +247,7 @@ class SwpmInstallation {
|
|
243 |
->set_value('reset-mail-body', stripslashes($reset_email_body))
|
244 |
->set_value('account-change-email-subject', stripslashes($status_change_email_subject))
|
245 |
->set_value('account-change-email-body', stripslashes($status_change_email_body))
|
246 |
-
->set_value('email-from',
|
247 |
|
248 |
$settings->set_value('reg-complete-mail-subject-admin', stripslashes($reg_email_subject_admin));
|
249 |
$settings->set_value('reg-complete-mail-body-admin', stripslashes($reg_email_body_admin));
|
233 |
//Create the mandatory pages (if they are not there)
|
234 |
SwpmMiscUtils::create_mandatory_wp_pages();
|
235 |
//End of page creation
|
236 |
+
|
237 |
+
$example_from_address = 'hello@' . SwpmMiscUtils::get_home_url_without_http_and_www();
|
238 |
+
$senders_email_address = get_bloginfo('name') . " <" . $example_from_address . ">";
|
239 |
+
|
240 |
$settings->set_value('reg-complete-mail-subject', stripslashes($reg_email_subject))
|
241 |
->set_value('reg-complete-mail-body', stripslashes($reg_email_body))
|
242 |
->set_value('reg-prompt-complete-mail-subject', stripslashes($reg_prompt_email_subject))
|
247 |
->set_value('reset-mail-body', stripslashes($reset_email_body))
|
248 |
->set_value('account-change-email-subject', stripslashes($status_change_email_subject))
|
249 |
->set_value('account-change-email-body', stripslashes($status_change_email_body))
|
250 |
+
->set_value('email-from', $senders_email_address);
|
251 |
|
252 |
$settings->set_value('reg-complete-mail-subject-admin', stripslashes($reg_email_subject_admin));
|
253 |
$settings->set_value('reg-complete-mail-body-admin', stripslashes($reg_email_body_admin));
|
classes/class.swpm-self-action-handler.php
CHANGED
@@ -10,6 +10,18 @@ class SwpmSelfActionHandler {
|
|
10 |
add_action('swpm_membership_level_changed', array(&$this, 'handle_membership_level_changed_action'));
|
11 |
|
12 |
add_filter('swpm_after_logout_redirect_url', array(&$this, 'handle_after_logout_redirection'));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
14 |
|
15 |
public function handle_after_logout_redirection($redirect_url){
|
10 |
add_action('swpm_membership_level_changed', array(&$this, 'handle_membership_level_changed_action'));
|
11 |
|
12 |
add_filter('swpm_after_logout_redirect_url', array(&$this, 'handle_after_logout_redirection'));
|
13 |
+
add_filter('swpm_auth_cookie_expiry_value', array(&$this, 'handle_auth_cookie_expiry_value'));
|
14 |
+
}
|
15 |
+
|
16 |
+
public function handle_auth_cookie_expiry_value($expire){
|
17 |
+
|
18 |
+
$logout_member_on_browser_close = SwpmSettings::get_instance()->get_value('logout-member-on-browser-close');
|
19 |
+
if (!empty($logout_member_on_browser_close)) {
|
20 |
+
//This feature is enabled.
|
21 |
+
$expire = 0;
|
22 |
+
}
|
23 |
+
|
24 |
+
return $expire;
|
25 |
}
|
26 |
|
27 |
public function handle_after_logout_redirection($redirect_url){
|
classes/class.swpm-settings.php
CHANGED
@@ -63,7 +63,7 @@ class SwpmSettings {
|
|
63 |
add_settings_field('show-adminbar-admin-only', SwpmUtils::_('Show Adminbar to Admin'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings', array('item' => 'show-adminbar-admin-only',
|
64 |
'message' => SwpmUtils::_('Use this option if you want to show the admin toolbar to admin users only. The admin toolbar will be hidden for all other users.')));
|
65 |
add_settings_field('disable-access-to-wp-dashboard', SwpmUtils::_('Disable Access to WP Dashboard'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings', array('item' => 'disable-access-to-wp-dashboard',
|
66 |
-
'message' => SwpmUtils::_('WordPress allows a
|
67 |
|
68 |
add_settings_field('default-account-status', SwpmUtils::_('Default Account Status'), array(&$this, 'selectbox_callback'), 'simple_wp_membership_settings', 'general-settings', array('item' => 'default-account-status',
|
69 |
'options' => SwpmUtils::get_account_state_options(),
|
@@ -196,7 +196,10 @@ class SwpmSettings {
|
|
196 |
|
197 |
add_settings_field('after-logout-redirection-url', SwpmUtils::_('After Logout Redirect URL'), array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'advanced-settings', array('item' => 'after-logout-redirection-url',
|
198 |
'message' => SwpmUtils::_('You can enter an URL here to redirect the members to this page after they click the logout link to logout from your site.')) );
|
199 |
-
|
|
|
|
|
|
|
200 |
add_settings_field('allow-account-deletion', SwpmUtils::_('Allow Account Deletion'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'advanced-settings', array('item' => 'allow-account-deletion',
|
201 |
'message' => SwpmUtils::_('Allow users to delete their accounts.')));
|
202 |
|
@@ -486,6 +489,7 @@ class SwpmSettings {
|
|
486 |
}
|
487 |
$output = $this->settings;
|
488 |
$output['enable-expired-account-login'] = isset($input['enable-expired-account-login']) ? esc_attr($input['enable-expired-account-login']) : "";
|
|
|
489 |
$output['allow-account-deletion'] = isset($input['allow-account-deletion']) ? esc_attr($input['allow-account-deletion']) : "";
|
490 |
$output['use-wordpress-timezone'] = isset($input['use-wordpress-timezone']) ? esc_attr($input['use-wordpress-timezone']) : "";
|
491 |
$output['delete-pending-account'] = isset($input['delete-pending-account']) ? esc_attr($input['delete-pending-account']) : 0;
|
@@ -495,7 +499,7 @@ class SwpmSettings {
|
|
495 |
$output['after-logout-redirection-url'] = esc_url($input['after-logout-redirection-url']);
|
496 |
$output['force-strong-passwords'] = isset($input['force-strong-passwords']) ? esc_attr($input['force-strong-passwords']) : "";
|
497 |
$output['auto-login-after-rego'] = isset($input['auto-login-after-rego']) ? esc_attr($input['auto-login-after-rego']) : "";
|
498 |
-
$output['force-wp-user-sync'] = isset($input['force-wp-user-sync']) ? esc_attr($input['force-wp-user-sync']) : "";
|
499 |
|
500 |
//Auto create swpm user related settings
|
501 |
$output['enable-auto-create-swpm-members'] = isset($input['enable-auto-create-swpm-members']) ? esc_attr($input['enable-auto-create-swpm-members']) : "";
|
63 |
add_settings_field('show-adminbar-admin-only', SwpmUtils::_('Show Adminbar to Admin'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings', array('item' => 'show-adminbar-admin-only',
|
64 |
'message' => SwpmUtils::_('Use this option if you want to show the admin toolbar to admin users only. The admin toolbar will be hidden for all other users.')));
|
65 |
add_settings_field('disable-access-to-wp-dashboard', SwpmUtils::_('Disable Access to WP Dashboard'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings', array('item' => 'disable-access-to-wp-dashboard',
|
66 |
+
'message' => SwpmUtils::_('WordPress allows a standard wp user to be able to go to the wp-admin URL and access his profile from the wp dashbaord. Using this option will prevent any non admin users from going to the wp dashboard.')));
|
67 |
|
68 |
add_settings_field('default-account-status', SwpmUtils::_('Default Account Status'), array(&$this, 'selectbox_callback'), 'simple_wp_membership_settings', 'general-settings', array('item' => 'default-account-status',
|
69 |
'options' => SwpmUtils::get_account_state_options(),
|
196 |
|
197 |
add_settings_field('after-logout-redirection-url', SwpmUtils::_('After Logout Redirect URL'), array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'advanced-settings', array('item' => 'after-logout-redirection-url',
|
198 |
'message' => SwpmUtils::_('You can enter an URL here to redirect the members to this page after they click the logout link to logout from your site.')) );
|
199 |
+
|
200 |
+
add_settings_field('logout-member-on-browser-close', SwpmUtils::_('Logout Member on Browser Close'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'advanced-settings', array('item' => 'logout-member-on-browser-close',
|
201 |
+
'message' => SwpmUtils::_('Enable this option if you want the member to be logged out of the account when he closes the browser.')));
|
202 |
+
|
203 |
add_settings_field('allow-account-deletion', SwpmUtils::_('Allow Account Deletion'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'advanced-settings', array('item' => 'allow-account-deletion',
|
204 |
'message' => SwpmUtils::_('Allow users to delete their accounts.')));
|
205 |
|
489 |
}
|
490 |
$output = $this->settings;
|
491 |
$output['enable-expired-account-login'] = isset($input['enable-expired-account-login']) ? esc_attr($input['enable-expired-account-login']) : "";
|
492 |
+
$output['logout-member-on-browser-close'] = isset($input['logout-member-on-browser-close']) ? esc_attr($input['logout-member-on-browser-close']) : "";
|
493 |
$output['allow-account-deletion'] = isset($input['allow-account-deletion']) ? esc_attr($input['allow-account-deletion']) : "";
|
494 |
$output['use-wordpress-timezone'] = isset($input['use-wordpress-timezone']) ? esc_attr($input['use-wordpress-timezone']) : "";
|
495 |
$output['delete-pending-account'] = isset($input['delete-pending-account']) ? esc_attr($input['delete-pending-account']) : 0;
|
499 |
$output['after-logout-redirection-url'] = esc_url($input['after-logout-redirection-url']);
|
500 |
$output['force-strong-passwords'] = isset($input['force-strong-passwords']) ? esc_attr($input['force-strong-passwords']) : "";
|
501 |
$output['auto-login-after-rego'] = isset($input['auto-login-after-rego']) ? esc_attr($input['auto-login-after-rego']) : "";
|
502 |
+
$output['force-wp-user-sync'] = isset($input['force-wp-user-sync']) ? esc_attr($input['force-wp-user-sync']) : "";
|
503 |
|
504 |
//Auto create swpm user related settings
|
505 |
$output['enable-auto-create-swpm-members'] = isset($input['enable-auto-create-swpm-members']) ? esc_attr($input['enable-auto-create-swpm-members']) : "";
|
classes/class.swpm-utils-misc.php
CHANGED
@@ -181,6 +181,22 @@ class SwpmMiscUtils {
|
|
181 |
return $pageURL;
|
182 |
}
|
183 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
public static function replace_dynamic_tags($msg_body, $member_id, $additional_args = '') {
|
185 |
$settings = SwpmSettings::get_instance();
|
186 |
$user_record = SwpmMemberUtils::get_user_by_id($member_id);
|
@@ -340,7 +356,7 @@ class SwpmMiscUtils {
|
|
340 |
$countries = array("Afghanistan", "Albania", "Algeria", "Andorra",
|
341 |
"Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia",
|
342 |
"Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados",
|
343 |
-
"Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia", "Bonaire",
|
344 |
"Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria",
|
345 |
"Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde",
|
346 |
"Central African Republic", "Chad", "Chile", "China", "Colombia", "Comoros",
|
181 |
return $pageURL;
|
182 |
}
|
183 |
|
184 |
+
/*
|
185 |
+
* Returns just the domain name. Something like example.com
|
186 |
+
*/
|
187 |
+
|
188 |
+
public static function get_home_url_without_http_and_www() {
|
189 |
+
$site_url = get_site_url();
|
190 |
+
$parse = parse_url($site_url);
|
191 |
+
$site_url = $parse['host'];
|
192 |
+
$site_url = str_replace('https://', '', $site_url);
|
193 |
+
$site_url = str_replace('http://', '', $site_url);
|
194 |
+
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $site_url, $regs)) {
|
195 |
+
$site_url = $regs['domain'];
|
196 |
+
}
|
197 |
+
return $site_url;
|
198 |
+
}
|
199 |
+
|
200 |
public static function replace_dynamic_tags($msg_body, $member_id, $additional_args = '') {
|
201 |
$settings = SwpmSettings::get_instance();
|
202 |
$user_record = SwpmMemberUtils::get_user_by_id($member_id);
|
356 |
$countries = array("Afghanistan", "Albania", "Algeria", "Andorra",
|
357 |
"Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia",
|
358 |
"Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados",
|
359 |
+
"Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia", "Bonaire",
|
360 |
"Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria",
|
361 |
"Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde",
|
362 |
"Central African Republic", "Chad", "Chile", "China", "Colombia", "Comoros",
|
classes/class.swpm-wp-loaded-tasks.php
CHANGED
@@ -13,6 +13,9 @@ class SwpmWpLoadedTasks {
|
|
13 |
public function do_wp_loaded_tasks() {
|
14 |
$this->synchronise_swpm_logout_for_wp_users();
|
15 |
|
|
|
|
|
|
|
16 |
}
|
17 |
|
18 |
/*
|
@@ -37,4 +40,44 @@ class SwpmWpLoadedTasks {
|
|
37 |
}
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
}
|
13 |
public function do_wp_loaded_tasks() {
|
14 |
$this->synchronise_swpm_logout_for_wp_users();
|
15 |
|
16 |
+
//IPN listener
|
17 |
+
$this->swpm_ipn_listener();
|
18 |
+
|
19 |
}
|
20 |
|
21 |
/*
|
40 |
}
|
41 |
}
|
42 |
|
43 |
+
/* Payment Gateway IPN listener */
|
44 |
+
|
45 |
+
public function swpm_ipn_listener() {
|
46 |
+
|
47 |
+
//Listen and handle PayPal IPN
|
48 |
+
$swpm_process_ipn = filter_input(INPUT_GET, 'swpm_process_ipn');
|
49 |
+
if ($swpm_process_ipn == '1') {
|
50 |
+
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_pp_ipn.php');
|
51 |
+
exit;
|
52 |
+
}
|
53 |
+
|
54 |
+
//Listen and handle Stripe Buy Now IPN
|
55 |
+
$swpm_process_stripe_buy_now = filter_input(INPUT_GET, 'swpm_process_stripe_buy_now');
|
56 |
+
if ($swpm_process_stripe_buy_now == '1') {
|
57 |
+
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-buy-now-ipn.php');
|
58 |
+
exit;
|
59 |
+
}
|
60 |
+
|
61 |
+
//Listen and handle Stripe Subscription IPN
|
62 |
+
$swpm_process_stripe_subscription = filter_input(INPUT_GET, 'swpm_process_stripe_subscription');
|
63 |
+
if ($swpm_process_stripe_subscription == '1') {
|
64 |
+
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-subscription-ipn.php');
|
65 |
+
exit;
|
66 |
+
}
|
67 |
+
|
68 |
+
//Listen and handle Braintree Buy Now IPN
|
69 |
+
$swpm_process_braintree_buy_now = filter_input(INPUT_GET, 'swpm_process_braintree_buy_now');
|
70 |
+
if ($swpm_process_braintree_buy_now == '1') {
|
71 |
+
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-braintree-buy-now-ipn.php');
|
72 |
+
exit;
|
73 |
+
}
|
74 |
+
|
75 |
+
//Listen and handle smart paypal checkout IPN
|
76 |
+
if (wp_doing_ajax()) {
|
77 |
+
include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-smart-checkout-ipn.php');
|
78 |
+
add_action('wp_ajax_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder');
|
79 |
+
add_action('wp_ajax_nopriv_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder');
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
}
|
images/addons/2fa-addon-icon.png
ADDED
Binary file
|
images/addons/full-page-protection-addon.png
ADDED
Binary file
|
ipn/swpm-smart-checkout-ipn.php
CHANGED
@@ -42,6 +42,7 @@ class swpm_smart_checkout_ipn_handler {
|
|
42 |
if ($payment_status != "Completed" && $payment_status != "Processed" && $payment_status != "Refunded" && $payment_status != "Reversed") {
|
43 |
$error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
|
44 |
$this->debug_log($error_msg, false);
|
|
|
45 |
return false;
|
46 |
}
|
47 |
}
|
@@ -204,11 +205,13 @@ class swpm_smart_checkout_ipn_handler {
|
|
204 |
$ipn['pay_id'] = $data['id'];
|
205 |
$ipn['create_time'] = $data['create_time'];
|
206 |
$ipn['txn_id'] = $data['transactions'][0]['related_resources'][0]['sale']['id'];
|
|
|
207 |
$ipn['txn_type'] = 'smart_checkout';
|
208 |
$ipn['payment_status'] = ucfirst($data['transactions'][0]['related_resources'][0]['sale']['state']);
|
209 |
$ipn['transaction_subject'] = '';
|
210 |
$ipn['mc_currency'] = $data['transactions'][0]['amount']['currency'];
|
211 |
$ipn['mc_gross'] = $data['transactions'][0]['amount']['total'];
|
|
|
212 |
$ipn['receiver_email'] = get_option('cart_paypal_email');
|
213 |
//customer info
|
214 |
$ipn['first_name'] = $data['payer']['payer_info']['first_name'];
|
@@ -219,16 +222,7 @@ class swpm_smart_checkout_ipn_handler {
|
|
219 |
$ipn['address_state'] = $data['payer']['payer_info']['shipping_address']['state'];
|
220 |
$ipn['address_zip'] = $data['payer']['payer_info']['shipping_address']['postal_code'];
|
221 |
$ipn['address_country'] = $data['payer']['payer_info']['shipping_address']['country_code'];
|
222 |
-
|
223 |
-
$i = 1;
|
224 |
-
foreach ($data['transactions'][0]['item_list']['items'] as $item) {
|
225 |
-
$ipn['item_number' . $i] = '';
|
226 |
-
$ipn['item_name' . $i] = $item['name'];
|
227 |
-
$ipn['quantity' . $i] = $item['quantity'];
|
228 |
-
$ipn['mc_gross_' . $i] = $item['price'] * $item['quantity'];
|
229 |
-
$i ++;
|
230 |
-
}
|
231 |
-
$ipn['num_cart_items'] = $i - 1;
|
232 |
$this->ipn_data = $ipn;
|
233 |
return true;
|
234 |
}
|
@@ -240,8 +234,8 @@ class swpm_smart_checkout_ipn_handler {
|
|
240 |
$secret = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_test_sec', true);
|
241 |
$api_base = 'https://api.sandbox.paypal.com';
|
242 |
} else {
|
243 |
-
$client_id = get_post_meta($this->ipn_data['
|
244 |
-
$secret = get_post_meta($this->ipn_data['
|
245 |
$api_base = 'https://api.paypal.com';
|
246 |
}
|
247 |
|
42 |
if ($payment_status != "Completed" && $payment_status != "Processed" && $payment_status != "Refunded" && $payment_status != "Reversed") {
|
43 |
$error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
|
44 |
$this->debug_log($error_msg, false);
|
45 |
+
$this->debug_log(json_encode($this->ipn_data), false);
|
46 |
return false;
|
47 |
}
|
48 |
}
|
205 |
$ipn['pay_id'] = $data['id'];
|
206 |
$ipn['create_time'] = $data['create_time'];
|
207 |
$ipn['txn_id'] = $data['transactions'][0]['related_resources'][0]['sale']['id'];
|
208 |
+
$ipn['reason_code'] = !empty($data['transactions'][0]['related_resources'][0]['sale']['reason_code']) ? $data['transactions'][0]['related_resources'][0]['sale']['reason_code'] : '';
|
209 |
$ipn['txn_type'] = 'smart_checkout';
|
210 |
$ipn['payment_status'] = ucfirst($data['transactions'][0]['related_resources'][0]['sale']['state']);
|
211 |
$ipn['transaction_subject'] = '';
|
212 |
$ipn['mc_currency'] = $data['transactions'][0]['amount']['currency'];
|
213 |
$ipn['mc_gross'] = $data['transactions'][0]['amount']['total'];
|
214 |
+
$ipn['quantity'] = 1;
|
215 |
$ipn['receiver_email'] = get_option('cart_paypal_email');
|
216 |
//customer info
|
217 |
$ipn['first_name'] = $data['payer']['payer_info']['first_name'];
|
222 |
$ipn['address_state'] = $data['payer']['payer_info']['shipping_address']['state'];
|
223 |
$ipn['address_zip'] = $data['payer']['payer_info']['shipping_address']['postal_code'];
|
224 |
$ipn['address_country'] = $data['payer']['payer_info']['shipping_address']['country_code'];
|
225 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
$this->ipn_data = $ipn;
|
227 |
return true;
|
228 |
}
|
234 |
$secret = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_test_sec', true);
|
235 |
$api_base = 'https://api.sandbox.paypal.com';
|
236 |
} else {
|
237 |
+
$client_id = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_live_id', true);
|
238 |
+
$secret = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_live_sec', true);
|
239 |
$api_base = 'https://api.paypal.com';
|
240 |
}
|
241 |
|
ipn/swpm-stripe-subscription-ipn.php
CHANGED
@@ -33,7 +33,7 @@ class SwpmStripeSubscriptionIpnHandler {
|
|
33 |
SwpmLog::log_simple_debug("Stripe Subscription Webhook received. Processing request...", true);
|
34 |
//Let's form minimal ipn_data array for swpm_handle_subsc_cancel_stand_alone
|
35 |
$customer = $event_json->data->object->customer;
|
36 |
-
$subscr_id
|
37 |
$ipn_data = array();
|
38 |
$ipn_data['subscr_id'] = $subscr_id;
|
39 |
$ipn_data['parent_txn_id'] = $customer;
|
@@ -98,6 +98,7 @@ class SwpmStripeSubscriptionIpnHandler {
|
|
98 |
'email' => $stripe_email,
|
99 |
'source' => $token,
|
100 |
'plan' => $plan_id,
|
|
|
101 |
));
|
102 |
} catch (Exception $e) {
|
103 |
SwpmLog::log_simple_debug("Error occurred during Stripe Subscribe. " . $e->getMessage(), false);
|
33 |
SwpmLog::log_simple_debug("Stripe Subscription Webhook received. Processing request...", true);
|
34 |
//Let's form minimal ipn_data array for swpm_handle_subsc_cancel_stand_alone
|
35 |
$customer = $event_json->data->object->customer;
|
36 |
+
$subscr_id = $event_json->data->object->id;
|
37 |
$ipn_data = array();
|
38 |
$ipn_data['subscr_id'] = $subscr_id;
|
39 |
$ipn_data['parent_txn_id'] = $customer;
|
98 |
'email' => $stripe_email,
|
99 |
'source' => $token,
|
100 |
'plan' => $plan_id,
|
101 |
+
'trial_from_plan' => 'true',
|
102 |
));
|
103 |
} catch (Exception $e) {
|
104 |
SwpmLog::log_simple_debug("Error occurred during Stripe Subscribe. " . $e->getMessage(), false);
|
languages/simple-membership.pot
CHANGED
@@ -1387,6 +1387,22 @@ msgstr ""
|
|
1387 |
msgid "You are not logged-in as a member"
|
1388 |
msgstr ""
|
1389 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1390 |
#: views/add.php:15 views/admin_add.php:19 views/admin_edit.php:44
|
1391 |
#: views/edit.php:22 views/login.php:17
|
1392 |
msgid "Password"
|
@@ -2080,6 +2096,27 @@ msgstr ""
|
|
2080 |
msgid "Subscribe Now"
|
2081 |
msgstr ""
|
2082 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2083 |
#: Translation strings from addons
|
2084 |
|
2085 |
#: === Form builder addon strings ===
|
1387 |
msgid "You are not logged-in as a member"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
+
#: classes/shortcode-related/class.swpm-shortcodes-handler.php:113
|
1391 |
+
msgid "Logged in as: "
|
1392 |
+
msgstr ""
|
1393 |
+
|
1394 |
+
#: classes/shortcode-related/class.swpm-shortcodes-handler.php:121
|
1395 |
+
msgid "Login Here"
|
1396 |
+
msgstr ""
|
1397 |
+
|
1398 |
+
#: classes/shortcode-related/class.swpm-shortcodes-handler.php:122
|
1399 |
+
msgid "Not a member? "
|
1400 |
+
msgstr ""
|
1401 |
+
|
1402 |
+
#: classes/shortcode-related/class.swpm-shortcodes-handler.php:123
|
1403 |
+
msgid "Join Now"
|
1404 |
+
msgstr ""
|
1405 |
+
|
1406 |
#: views/add.php:15 views/admin_add.php:19 views/admin_edit.php:44
|
1407 |
#: views/edit.php:22 views/login.php:17
|
1408 |
msgid "Password"
|
2096 |
msgid "Subscribe Now"
|
2097 |
msgstr ""
|
2098 |
|
2099 |
+
msgid "Delete Account"
|
2100 |
+
msgstr ""
|
2101 |
+
|
2102 |
+
msgid "You are about to delete an account. This will delete user data associated with this account. "
|
2103 |
+
msgstr ""
|
2104 |
+
|
2105 |
+
msgid "It will also delete associated WordPress user account."
|
2106 |
+
msgstr ""
|
2107 |
+
|
2108 |
+
msgid "(NOTE: for safety, we do not allow deletion of any associated WordPress account with administrator role)."
|
2109 |
+
msgstr ""
|
2110 |
+
|
2111 |
+
msgid "Continue?"
|
2112 |
+
msgstr ""
|
2113 |
+
|
2114 |
+
msgid "Password: "
|
2115 |
+
msgstr ""
|
2116 |
+
|
2117 |
+
msgid "Confirm Account Deletion"
|
2118 |
+
msgstr ""
|
2119 |
+
|
2120 |
#: Translation strings from addons
|
2121 |
|
2122 |
#: === Form builder addon strings ===
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: smp7, wp.insider
|
|
3 |
Donate link: https://simple-membership-plugin.com/
|
4 |
Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
|
5 |
Requires at least: 4.0
|
6 |
-
Tested up to:
|
7 |
-
Stable tag: 3.7.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -92,6 +92,7 @@ You can create a free forum user account and ask your questions.
|
|
92 |
* Option force the members to use strong password.
|
93 |
* Option to make the users agree to your terms and conditions before they can register for a member account.
|
94 |
* Option to make the users agree to your privacy policy before they can register for a member account.
|
|
|
95 |
|
96 |
= Language Translations =
|
97 |
|
@@ -152,6 +153,28 @@ https://simple-membership-plugin.com/
|
|
152 |
|
153 |
== Changelog ==
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
= 3.7.0 =
|
156 |
- Added PayPal smart checkout button option. https://simple-membership-plugin.com/creating-paypal-smart-checkout-buttons-for-membership-payment/
|
157 |
- Added a new filter hook swpm_edit_profile_form_before_username
|
3 |
Donate link: https://simple-membership-plugin.com/
|
4 |
Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
|
5 |
Requires at least: 4.0
|
6 |
+
Tested up to: 5.0
|
7 |
+
Stable tag: 3.7.4
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
92 |
* Option force the members to use strong password.
|
93 |
* Option to make the users agree to your terms and conditions before they can register for a member account.
|
94 |
* Option to make the users agree to your privacy policy before they can register for a member account.
|
95 |
+
* Option to automatically logout the members when they close the browser.
|
96 |
|
97 |
= Language Translations =
|
98 |
|
153 |
|
154 |
== Changelog ==
|
155 |
|
156 |
+
= 3.7.4 =
|
157 |
+
- Stripe Subscription now considers plan trial period settings.
|
158 |
+
- Added CSS class names to the fields in the admin add/edit members interface.
|
159 |
+
- Added more translatable strings to the POT file.
|
160 |
+
- WordPress 5.0 compatibility
|
161 |
+
|
162 |
+
= 3.7.3 =
|
163 |
+
- Created a new free addon to offer full page style protection. https://simple-membership-plugin.com/full-page-protection-addon-simple-membership/
|
164 |
+
- The mini login shortcode output is now translatable
|
165 |
+
- Fixed Smart Checkout buttons were not working in live mode under some circumstances
|
166 |
+
- Fixed minor display issues for PayPal Smart Checkout buttons
|
167 |
+
|
168 |
+
= 3.7.2 =
|
169 |
+
- Added a new feature that allows you to automatically logout the users when they close the browser.
|
170 |
+
- Added support for Two-Factor Authentication addon.
|
171 |
+
- Added a new utility function.
|
172 |
+
- Improved the social login functionality.
|
173 |
+
|
174 |
+
= 3.7.1 =
|
175 |
+
- Moved the IPN handling code from "init" hook to "wp_loaded" hook for better compatibility.
|
176 |
+
- The configuration fields for "Publishable" and "Secret" keys for Stripe has been swapped. This will align them better with how you get the info from your Stripe account.
|
177 |
+
|
178 |
= 3.7.0 =
|
179 |
- Added PayPal smart checkout button option. https://simple-membership-plugin.com/creating-paypal-smart-checkout-buttons-for-membership-payment/
|
180 |
- Added a new filter hook swpm_edit_profile_form_before_username
|
simple-wp-membership.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Simple WordPress Membership
|
4 |
-
Version: 3.7.
|
5 |
Plugin URI: https://simple-membership-plugin.com/
|
6 |
Author: smp7, wp.insider
|
7 |
Author URI: https://simple-membership-plugin.com/
|
@@ -19,7 +19,7 @@ include_once('classes/class.simple-wp-membership.php');
|
|
19 |
include_once('classes/class.swpm-cronjob.php');
|
20 |
include_once('swpm-compat.php');
|
21 |
|
22 |
-
define('SIMPLE_WP_MEMBERSHIP_VER', '3.7.
|
23 |
define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.2');
|
24 |
define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
|
25 |
define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Simple WordPress Membership
|
4 |
+
Version: 3.7.4
|
5 |
Plugin URI: https://simple-membership-plugin.com/
|
6 |
Author: smp7, wp.insider
|
7 |
Author URI: https://simple-membership-plugin.com/
|
19 |
include_once('classes/class.swpm-cronjob.php');
|
20 |
include_once('swpm-compat.php');
|
21 |
|
22 |
+
define('SIMPLE_WP_MEMBERSHIP_VER', '3.7.4');
|
23 |
define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.2');
|
24 |
define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
|
25 |
define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
|
views/account_delete_warning.php
CHANGED
@@ -1,16 +1,16 @@
|
|
1 |
|
2 |
<header class="entry-header">
|
3 |
-
Delete Account
|
4 |
</header>
|
5 |
<?php if (!empty($msg)) echo '<p>' . $msg . '</p>'; ?>
|
6 |
<p style="color:red;">
|
7 |
-
You are about to delete an account. This will delete user data associated with this account.
|
8 |
-
It will also delete associated WordPress user account.
|
9 |
-
(NOTE: for safety, we do not allow deletion of any associated WordPress account with administrator role).
|
10 |
-
Continue?
|
11 |
</p>
|
12 |
<form method="post">
|
13 |
-
<p
|
14 |
-
<p><input type="submit" name="confirm" value="Confirm Account Deletion" /> </p>
|
15 |
<?php wp_nonce_field('swpm_account_delete_confirm', 'account_delete_confirm_nonce'); ?>
|
16 |
</form>
|
1 |
|
2 |
<header class="entry-header">
|
3 |
+
<?php echo SwpmUtils::_('Delete Account'); ?>
|
4 |
</header>
|
5 |
<?php if (!empty($msg)) echo '<p>' . $msg . '</p>'; ?>
|
6 |
<p style="color:red;">
|
7 |
+
<?php echo SwpmUtils::_('You are about to delete an account. This will delete user data associated with this account. '); ?>
|
8 |
+
<?php echo SwpmUtils::_('It will also delete associated WordPress user account.'); ?>
|
9 |
+
<?php echo SwpmUtils::_('(NOTE: for safety, we do not allow deletion of any associated WordPress account with administrator role).'); ?>
|
10 |
+
<?php echo SwpmUtils::_('Continue?'); ?>
|
11 |
</p>
|
12 |
<form method="post">
|
13 |
+
<p><?php echo SwpmUtils::_('Password: '); ?><input name="account_delete_confirm_pass" type="password"></p>
|
14 |
+
<p><input type="submit" name="confirm" value="<?php echo SwpmUtils::_('Confirm Account Deletion'); ?>" /> </p>
|
15 |
<?php wp_nonce_field('swpm_account_delete_confirm', 'account_delete_confirm_nonce'); ?>
|
16 |
</form>
|
views/admin_add.php
CHANGED
@@ -7,15 +7,15 @@
|
|
7 |
<p><?php echo SwpmUtils::_('Create a brand new user and add it to this site.'); ?></p>
|
8 |
<table class="form-table">
|
9 |
<tbody>
|
10 |
-
<tr class="form-required">
|
11 |
<th scope="row"><label for="user_name"><?php echo SwpmUtils::_('Username'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
12 |
<td><input class="regular-text validate[required,custom[noapostrophe],custom[SWPMUserName],minSize[4],ajax[ajaxUserCall]]" name="user_name" type="text" id="user_name" value="<?php echo esc_attr(stripslashes($user_name)); ?>" aria-required="true" /></td>
|
13 |
</tr>
|
14 |
-
<tr class="form-required">
|
15 |
<th scope="row"><label for="email"><?php echo SwpmUtils::_('E-mail'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
16 |
<td><input name="email" autocomplete="off" class="regular-text validate[required,custom[email],ajax[ajaxEmailCall]]" type="text" id="email" value="<?php echo esc_attr($email); ?>" /></td>
|
17 |
</tr>
|
18 |
-
<tr class="form-required">
|
19 |
<th scope="row"><label for="password"><?php echo SwpmUtils::_('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(twice, required)'); ?></span></label></th>
|
20 |
<td><input class="regular-text" name="password" type="password" id="pass1" autocomplete="off" />
|
21 |
<br />
|
@@ -25,7 +25,7 @@
|
|
25 |
<p class="description indicator-hint"><?php echo SwpmUtils::_('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ & ).'); ?></p>
|
26 |
</td>
|
27 |
</tr>
|
28 |
-
<tr>
|
29 |
<th scope="row"><label for="account_state"><?php echo SwpmUtils::_('Account Status'); ?></label></th>
|
30 |
<td><select class="regular-text" name="account_state" id="account_state">
|
31 |
<?php echo SwpmUtils::account_state_dropdown('active'); ?>
|
7 |
<p><?php echo SwpmUtils::_('Create a brand new user and add it to this site.'); ?></p>
|
8 |
<table class="form-table">
|
9 |
<tbody>
|
10 |
+
<tr class="form-required swpm-admin-add-username">
|
11 |
<th scope="row"><label for="user_name"><?php echo SwpmUtils::_('Username'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
12 |
<td><input class="regular-text validate[required,custom[noapostrophe],custom[SWPMUserName],minSize[4],ajax[ajaxUserCall]]" name="user_name" type="text" id="user_name" value="<?php echo esc_attr(stripslashes($user_name)); ?>" aria-required="true" /></td>
|
13 |
</tr>
|
14 |
+
<tr class="form-required swpm-admin-add-email">
|
15 |
<th scope="row"><label for="email"><?php echo SwpmUtils::_('E-mail'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
16 |
<td><input name="email" autocomplete="off" class="regular-text validate[required,custom[email],ajax[ajaxEmailCall]]" type="text" id="email" value="<?php echo esc_attr($email); ?>" /></td>
|
17 |
</tr>
|
18 |
+
<tr class="form-required swpm-admin-add-password">
|
19 |
<th scope="row"><label for="password"><?php echo SwpmUtils::_('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(twice, required)'); ?></span></label></th>
|
20 |
<td><input class="regular-text" name="password" type="password" id="pass1" autocomplete="off" />
|
21 |
<br />
|
25 |
<p class="description indicator-hint"><?php echo SwpmUtils::_('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ & ).'); ?></p>
|
26 |
</td>
|
27 |
</tr>
|
28 |
+
<tr class="swpm-admin-add-account-state">
|
29 |
<th scope="row"><label for="account_state"><?php echo SwpmUtils::_('Account Status'); ?></label></th>
|
30 |
<td><select class="regular-text" name="account_state" id="account_state">
|
31 |
<?php echo SwpmUtils::account_state_dropdown('active'); ?>
|
views/admin_add_ons_page.php
CHANGED
@@ -59,10 +59,10 @@ echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL
|
|
59 |
array_push($addons_data, $addon_6);
|
60 |
|
61 |
$addon_7 = array(
|
62 |
-
'name' => '
|
63 |
-
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-
|
64 |
-
'description' => '
|
65 |
-
'page_url' => 'https://simple-membership-plugin.com/simple-membership-
|
66 |
);
|
67 |
array_push($addons_data, $addon_7);
|
68 |
|
@@ -107,18 +107,18 @@ echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL
|
|
107 |
array_push($addons_data, $addon_12);
|
108 |
|
109 |
$addon_13 = array(
|
110 |
-
'name' => '
|
111 |
-
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/
|
112 |
-
'description' => 'Allows you to
|
113 |
-
'page_url' => 'https://simple-membership-plugin.com/
|
114 |
);
|
115 |
array_push($addons_data, $addon_13);
|
116 |
|
117 |
$addon_14 = array(
|
118 |
-
'name' => '
|
119 |
-
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/
|
120 |
-
'description' => '
|
121 |
-
'page_url' => 'https://simple-membership-plugin.com/simple-membership-
|
122 |
);
|
123 |
array_push($addons_data, $addon_14);
|
124 |
|
@@ -137,7 +137,7 @@ echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL
|
|
137 |
'page_url' => 'https://simple-membership-plugin.com/apply-partial-section-protection/',
|
138 |
);
|
139 |
array_push($addons_data, $addon_16);
|
140 |
-
|
141 |
$addon_17 = array(
|
142 |
'name' => 'Member Data Exporter',
|
143 |
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-data-exporter-addon.png',
|
@@ -187,10 +187,10 @@ echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL
|
|
187 |
array_push($addons_data, $addon_22);
|
188 |
|
189 |
$addon_23 = array(
|
190 |
-
'name' => '
|
191 |
-
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/
|
192 |
-
'description' => '
|
193 |
-
'page_url' => 'https://simple-membership-plugin.com/
|
194 |
);
|
195 |
array_push($addons_data, $addon_23);
|
196 |
|
@@ -203,12 +203,28 @@ echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL
|
|
203 |
array_push($addons_data, $addon_24);
|
204 |
|
205 |
$addon_25 = array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
'name' => 'Expiry Email Notification',
|
207 |
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/email-notification-and-broadcast-addon.png',
|
208 |
'description' => 'Allows you to configure and send various expiry email notifications for members.',
|
209 |
'page_url' => 'https://simple-membership-plugin.com/simple-membership-email-notification-broadcast-addon/',
|
210 |
);
|
211 |
-
array_push($addons_data, $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
|
213 |
/*** Show the addons list ***/
|
214 |
foreach ($addons_data as $addon) {
|
59 |
array_push($addons_data, $addon_6);
|
60 |
|
61 |
$addon_7 = array(
|
62 |
+
'name' => 'WooCommerce Payments',
|
63 |
+
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-woocommerce-addon.png',
|
64 |
+
'description' => 'This addon can be used to accept membership payment via the WooCommerce plugin',
|
65 |
+
'page_url' => 'https://simple-membership-plugin.com/woocommerce-simple-membership-plugin-integration/',
|
66 |
);
|
67 |
array_push($addons_data, $addon_7);
|
68 |
|
107 |
array_push($addons_data, $addon_12);
|
108 |
|
109 |
$addon_13 = array(
|
110 |
+
'name' => 'Full Page Protection',
|
111 |
+
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/full-page-protection-addon.png',
|
112 |
+
'description' => 'Allows you to protect the full post or page (header to footer).',
|
113 |
+
'page_url' => 'https://simple-membership-plugin.com/full-page-protection-addon-simple-membership/',
|
114 |
);
|
115 |
array_push($addons_data, $addon_13);
|
116 |
|
117 |
$addon_14 = array(
|
118 |
+
'name' => 'Protect Older Posts',
|
119 |
+
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-older-posts-protection.png',
|
120 |
+
'description' => 'The protect older posts addon allows you to control protection of posts that were published before a member\'s access start date.',
|
121 |
+
'page_url' => 'https://simple-membership-plugin.com/simple-membership-protect-older-posts-addon/',
|
122 |
);
|
123 |
array_push($addons_data, $addon_14);
|
124 |
|
137 |
'page_url' => 'https://simple-membership-plugin.com/apply-partial-section-protection/',
|
138 |
);
|
139 |
array_push($addons_data, $addon_16);
|
140 |
+
|
141 |
$addon_17 = array(
|
142 |
'name' => 'Member Data Exporter',
|
143 |
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-data-exporter-addon.png',
|
187 |
array_push($addons_data, $addon_22);
|
188 |
|
189 |
$addon_23 = array(
|
190 |
+
'name' => 'Google First Click Free',
|
191 |
+
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/google-first-click-free-addon.png',
|
192 |
+
'description' => 'Allows you to integrate with the Google First Click Free feature.',
|
193 |
+
'page_url' => 'https://simple-membership-plugin.com/simple-membership-google-first-click-free-integration-addon',
|
194 |
);
|
195 |
array_push($addons_data, $addon_23);
|
196 |
|
203 |
array_push($addons_data, $addon_24);
|
204 |
|
205 |
$addon_25 = array(
|
206 |
+
'name' => 'Show Member Info',
|
207 |
+
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/show-member-info.png',
|
208 |
+
'description' => 'Allows you to show various member info using shortcodes.',
|
209 |
+
'page_url' => 'https://simple-membership-plugin.com/simple-membership-addon-show-member-info/',
|
210 |
+
);
|
211 |
+
array_push($addons_data, $addon_25);
|
212 |
+
|
213 |
+
$addon_26 = array(
|
214 |
'name' => 'Expiry Email Notification',
|
215 |
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/email-notification-and-broadcast-addon.png',
|
216 |
'description' => 'Allows you to configure and send various expiry email notifications for members.',
|
217 |
'page_url' => 'https://simple-membership-plugin.com/simple-membership-email-notification-broadcast-addon/',
|
218 |
);
|
219 |
+
array_push($addons_data, $addon_26);
|
220 |
+
|
221 |
+
$addon_27 = array(
|
222 |
+
'name' => '2 Factor Authentication',
|
223 |
+
'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/2fa-addon-icon.png',
|
224 |
+
'description' => 'This addon adds the 2 factor authentication for member login to increase login security.',
|
225 |
+
'page_url' => 'https://simple-membership-plugin.com/swpm-two-factor-authentication-addon/',
|
226 |
+
);
|
227 |
+
array_push($addons_data, $addon_27);
|
228 |
|
229 |
/*** Show the addons list ***/
|
230 |
foreach ($addons_data as $addon) {
|
views/admin_edit.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
<?php echo esc_attr($member_id); ?>
|
16 |
</p>
|
17 |
<table class="form-table">
|
18 |
-
<tr class="form-field form-required">
|
19 |
<th scope="row"><label for="user_name"><?php echo SwpmUtils::_('Username'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
20 |
<td>
|
21 |
<?php
|
@@ -36,11 +36,11 @@
|
|
36 |
?>
|
37 |
</td>
|
38 |
</tr>
|
39 |
-
<tr class="form-required">
|
40 |
<th scope="row"><label for="email"><?php echo SwpmUtils::_('E-mail'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
41 |
<td><input name="email" autocomplete="off" class="regular-text validate[required,custom[email],ajax[ajaxEmailCall]]" type="text" id="email" value="<?php echo esc_attr($email); ?>" /></td>
|
42 |
</tr>
|
43 |
-
<tr class="">
|
44 |
<th scope="row"><label for="password"><?php echo SwpmUtils::_('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(twice, leave empty to retain old password)'); ?></span></label></th>
|
45 |
<td><input class="regular-text" name="password" type="password" id="pass1" autocomplete="off" /><br />
|
46 |
<input class="regular-text" name="password_re" type="password" id="pass2" autocomplete="off" />
|
@@ -49,7 +49,7 @@
|
|
49 |
<p class="description indicator-hint"><?php echo SwpmUtils::_('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ & ).'); ?></p>
|
50 |
</td>
|
51 |
</tr>
|
52 |
-
<tr>
|
53 |
<th scope="row"><label for="account_state"><?php echo SwpmUtils::_('Account Status'); ?></label></th>
|
54 |
<td>
|
55 |
<select class="regular-text" name="account_state" id="account_state">
|
@@ -62,7 +62,7 @@
|
|
62 |
</p>
|
63 |
</td>
|
64 |
</tr>
|
65 |
-
<tr>
|
66 |
<th scope="row"><label for="account_state_change"><?php echo SwpmUtils::_('Notify User'); ?></label></th>
|
67 |
<td><input type="checkbox" id="account_status_change" name="account_status_change" />
|
68 |
<p class="description indicator-hint">
|
@@ -71,18 +71,18 @@
|
|
71 |
</td>
|
72 |
</tr>
|
73 |
<?php include('admin_member_form_common_part.php');?>
|
74 |
-
<tr>
|
75 |
<th scope="row"><label for="subscr_id"><?php echo SwpmUtils::_('Subscriber ID/Reference') ?> </label></th>
|
76 |
<td><input class="regular-text" name="subscr_id" type="text" id="subscr_id" value="<?php echo esc_attr($subscr_id); ?>" /></td>
|
77 |
</tr>
|
78 |
-
<tr>
|
79 |
<th scope="row"><label for="last_accessed"><?php echo SwpmUtils::_('Last Accessed Date') ?> </label></th>
|
80 |
<td>
|
81 |
<?php echo esc_attr($last_accessed); ?>
|
82 |
<p class="description indicator-hint"><?php echo SwpmUtils::_('This value gets updated when this member logs into your site.') ?></p>
|
83 |
</td>
|
84 |
</tr>
|
85 |
-
<tr>
|
86 |
<th scope="row"><label for="last_accessed_from_ip"><?php echo SwpmUtils::_('Last Accessed From IP') ?> </label></th>
|
87 |
<td>
|
88 |
<?php echo esc_attr($last_accessed_from_ip); ?>
|
15 |
<?php echo esc_attr($member_id); ?>
|
16 |
</p>
|
17 |
<table class="form-table">
|
18 |
+
<tr class="form-field form-required swpm-admin-edit-username">
|
19 |
<th scope="row"><label for="user_name"><?php echo SwpmUtils::_('Username'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
20 |
<td>
|
21 |
<?php
|
36 |
?>
|
37 |
</td>
|
38 |
</tr>
|
39 |
+
<tr class="form-required swpm-admin-edit-email">
|
40 |
<th scope="row"><label for="email"><?php echo SwpmUtils::_('E-mail'); ?> <span class="description"><?php echo SwpmUtils::_('(required)'); ?></span></label></th>
|
41 |
<td><input name="email" autocomplete="off" class="regular-text validate[required,custom[email],ajax[ajaxEmailCall]]" type="text" id="email" value="<?php echo esc_attr($email); ?>" /></td>
|
42 |
</tr>
|
43 |
+
<tr class="swpm-admin-edit-password">
|
44 |
<th scope="row"><label for="password"><?php echo SwpmUtils::_('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(twice, leave empty to retain old password)'); ?></span></label></th>
|
45 |
<td><input class="regular-text" name="password" type="password" id="pass1" autocomplete="off" /><br />
|
46 |
<input class="regular-text" name="password_re" type="password" id="pass2" autocomplete="off" />
|
49 |
<p class="description indicator-hint"><?php echo SwpmUtils::_('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ & ).'); ?></p>
|
50 |
</td>
|
51 |
</tr>
|
52 |
+
<tr class="swpm-admin-edit-account-state">
|
53 |
<th scope="row"><label for="account_state"><?php echo SwpmUtils::_('Account Status'); ?></label></th>
|
54 |
<td>
|
55 |
<select class="regular-text" name="account_state" id="account_state">
|
62 |
</p>
|
63 |
</td>
|
64 |
</tr>
|
65 |
+
<tr class="swpm-admin-edit-notify-user">
|
66 |
<th scope="row"><label for="account_state_change"><?php echo SwpmUtils::_('Notify User'); ?></label></th>
|
67 |
<td><input type="checkbox" id="account_status_change" name="account_status_change" />
|
68 |
<p class="description indicator-hint">
|
71 |
</td>
|
72 |
</tr>
|
73 |
<?php include('admin_member_form_common_part.php');?>
|
74 |
+
<tr class="swpm-admin-edit-subscriber-id">
|
75 |
<th scope="row"><label for="subscr_id"><?php echo SwpmUtils::_('Subscriber ID/Reference') ?> </label></th>
|
76 |
<td><input class="regular-text" name="subscr_id" type="text" id="subscr_id" value="<?php echo esc_attr($subscr_id); ?>" /></td>
|
77 |
</tr>
|
78 |
+
<tr class="swpm-admin-edit-last-accessed">
|
79 |
<th scope="row"><label for="last_accessed"><?php echo SwpmUtils::_('Last Accessed Date') ?> </label></th>
|
80 |
<td>
|
81 |
<?php echo esc_attr($last_accessed); ?>
|
82 |
<p class="description indicator-hint"><?php echo SwpmUtils::_('This value gets updated when this member logs into your site.') ?></p>
|
83 |
</td>
|
84 |
</tr>
|
85 |
+
<tr class="swpm-admin-edit-last-accessed-ip">
|
86 |
<th scope="row"><label for="last_accessed_from_ip"><?php echo SwpmUtils::_('Last Accessed From IP') ?> </label></th>
|
87 |
<td>
|
88 |
<?php echo esc_attr($last_accessed_from_ip); ?>
|
views/admin_member_form_common_part.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<tr>
|
2 |
<th scope="row"><label for="membership_level"><?php echo SwpmUtils::_('Membership Level'); ?></label></th>
|
3 |
<td><select class="regular-text" name="membership_level" id="membership_level">
|
4 |
<?php foreach ($levels as $level): ?>
|
@@ -7,54 +7,54 @@
|
|
7 |
</select>
|
8 |
</td>
|
9 |
</tr>
|
10 |
-
<tr>
|
11 |
<th scope="row"><label for="subscription_starts"><?php echo SwpmUtils::_('Access Starts') ?> </label></th>
|
12 |
<td><input class="regular-text" name="subscription_starts" type="text" id="subscription_starts" value="<?php echo esc_attr($subscription_starts); ?>" /></td>
|
13 |
</tr>
|
14 |
-
<tr>
|
15 |
<th scope="row"><label for="first_name"><?php echo SwpmUtils::_('First Name') ?> </label></th>
|
16 |
<td><input class="regular-text" name="first_name" type="text" id="first_name" value="<?php echo esc_attr($first_name); ?>" /></td>
|
17 |
</tr>
|
18 |
-
<tr>
|
19 |
<th scope="row"><label for="last_name"><?php echo SwpmUtils::_('Last Name') ?> </label></th>
|
20 |
<td><input class="regular-text" name="last_name" type="text" id="last_name" value="<?php echo esc_attr($last_name); ?>" /></td>
|
21 |
</tr>
|
22 |
-
<tr>
|
23 |
<th scope="row"><label for="gender"><?php echo SwpmUtils::_('Gender'); ?></label></th>
|
24 |
<td><select class="regular-text" name="gender" id="gender">
|
25 |
<?php echo SwpmUtils::gender_dropdown($gender) ?>
|
26 |
</select>
|
27 |
</td>
|
28 |
</tr>
|
29 |
-
<tr>
|
30 |
<th scope="row"><label for="phone"><?php echo SwpmUtils::_('Phone') ?> </label></th>
|
31 |
<td><input class="regular-text" name="phone" type="text" id="phone" value="<?php echo esc_attr($phone); ?>" /></td>
|
32 |
</tr>
|
33 |
-
<tr>
|
34 |
<th scope="row"><label for="address_street"><?php echo SwpmUtils::_('Street') ?> </label></th>
|
35 |
<td><input class="regular-text" name="address_street" type="text" id="address_street" value="<?php echo esc_attr($address_street); ?>" /></td>
|
36 |
</tr>
|
37 |
-
<tr>
|
38 |
<th scope="row"><label for="address_city"><?php echo SwpmUtils::_('City') ?> </label></th>
|
39 |
<td><input class="regular-text" name="address_city" type="text" id="address_city" value="<?php echo esc_attr($address_city); ?>" /></td>
|
40 |
</tr>
|
41 |
-
<tr>
|
42 |
<th scope="row"><label for="address_state"><?php echo SwpmUtils::_('State') ?> </label></th>
|
43 |
<td><input class="regular-text" name="address_state" type="text" id="address_state" value="<?php echo esc_attr($address_state); ?>" /></td>
|
44 |
</tr>
|
45 |
-
<tr>
|
46 |
<th scope="row"><label for="address_zipcode"><?php echo SwpmUtils::_('Zipcode') ?> </label></th>
|
47 |
<td><input class="regular-text" name="address_zipcode" type="text" id="address_zipcode" value="<?php echo esc_attr($address_zipcode); ?>" /></td>
|
48 |
</tr>
|
49 |
-
<tr>
|
50 |
<th scope="row"><label for="country"><?php echo SwpmUtils::_('Country') ?> </label></th>
|
51 |
<td><select class="regular-text" id="country" name="country"><?php echo SwpmMiscUtils::get_countries_dropdown($country) ?></select></td>
|
52 |
</tr>
|
53 |
-
<tr>
|
54 |
<th scope="row"><label for="company_name"><?php echo SwpmUtils::_('Company') ?></label></th>
|
55 |
<td><input name="company_name" type="text" id="company_name" class="regular-text" value="<?php echo esc_attr($company_name); ?>" /></td>
|
56 |
</tr>
|
57 |
-
<tr>
|
58 |
<th scope="row"><label for="member_since"><?php echo SwpmUtils::_('Member Since') ?> </label></th>
|
59 |
<td><input class="regular-text" name="member_since" type="text" id="member_since" value="<?php echo esc_attr($member_since); ?>" /></td>
|
60 |
</tr>
|
1 |
+
<tr class="swpm-admin-edit-membership-level">
|
2 |
<th scope="row"><label for="membership_level"><?php echo SwpmUtils::_('Membership Level'); ?></label></th>
|
3 |
<td><select class="regular-text" name="membership_level" id="membership_level">
|
4 |
<?php foreach ($levels as $level): ?>
|
7 |
</select>
|
8 |
</td>
|
9 |
</tr>
|
10 |
+
<tr class="swpm-admin-edit-access-starts">
|
11 |
<th scope="row"><label for="subscription_starts"><?php echo SwpmUtils::_('Access Starts') ?> </label></th>
|
12 |
<td><input class="regular-text" name="subscription_starts" type="text" id="subscription_starts" value="<?php echo esc_attr($subscription_starts); ?>" /></td>
|
13 |
</tr>
|
14 |
+
<tr class="swpm-admin-edit-first-name">
|
15 |
<th scope="row"><label for="first_name"><?php echo SwpmUtils::_('First Name') ?> </label></th>
|
16 |
<td><input class="regular-text" name="first_name" type="text" id="first_name" value="<?php echo esc_attr($first_name); ?>" /></td>
|
17 |
</tr>
|
18 |
+
<tr class="swpm-admin-edit-last-name">
|
19 |
<th scope="row"><label for="last_name"><?php echo SwpmUtils::_('Last Name') ?> </label></th>
|
20 |
<td><input class="regular-text" name="last_name" type="text" id="last_name" value="<?php echo esc_attr($last_name); ?>" /></td>
|
21 |
</tr>
|
22 |
+
<tr class="swpm-admin-edit-gender">
|
23 |
<th scope="row"><label for="gender"><?php echo SwpmUtils::_('Gender'); ?></label></th>
|
24 |
<td><select class="regular-text" name="gender" id="gender">
|
25 |
<?php echo SwpmUtils::gender_dropdown($gender) ?>
|
26 |
</select>
|
27 |
</td>
|
28 |
</tr>
|
29 |
+
<tr class="swpm-admin-edit-phone">
|
30 |
<th scope="row"><label for="phone"><?php echo SwpmUtils::_('Phone') ?> </label></th>
|
31 |
<td><input class="regular-text" name="phone" type="text" id="phone" value="<?php echo esc_attr($phone); ?>" /></td>
|
32 |
</tr>
|
33 |
+
<tr class="swpm-admin-edit-address-street">
|
34 |
<th scope="row"><label for="address_street"><?php echo SwpmUtils::_('Street') ?> </label></th>
|
35 |
<td><input class="regular-text" name="address_street" type="text" id="address_street" value="<?php echo esc_attr($address_street); ?>" /></td>
|
36 |
</tr>
|
37 |
+
<tr class="swpm-admin-edit-address-city">
|
38 |
<th scope="row"><label for="address_city"><?php echo SwpmUtils::_('City') ?> </label></th>
|
39 |
<td><input class="regular-text" name="address_city" type="text" id="address_city" value="<?php echo esc_attr($address_city); ?>" /></td>
|
40 |
</tr>
|
41 |
+
<tr class="swpm-admin-edit-address-state">
|
42 |
<th scope="row"><label for="address_state"><?php echo SwpmUtils::_('State') ?> </label></th>
|
43 |
<td><input class="regular-text" name="address_state" type="text" id="address_state" value="<?php echo esc_attr($address_state); ?>" /></td>
|
44 |
</tr>
|
45 |
+
<tr class="swpm-admin-edit-address-zipcode">
|
46 |
<th scope="row"><label for="address_zipcode"><?php echo SwpmUtils::_('Zipcode') ?> </label></th>
|
47 |
<td><input class="regular-text" name="address_zipcode" type="text" id="address_zipcode" value="<?php echo esc_attr($address_zipcode); ?>" /></td>
|
48 |
</tr>
|
49 |
+
<tr class="swpm-admin-edit-address-country">
|
50 |
<th scope="row"><label for="country"><?php echo SwpmUtils::_('Country') ?> </label></th>
|
51 |
<td><select class="regular-text" id="country" name="country"><?php echo SwpmMiscUtils::get_countries_dropdown($country) ?></select></td>
|
52 |
</tr>
|
53 |
+
<tr class="swpm-admin-edit-company">
|
54 |
<th scope="row"><label for="company_name"><?php echo SwpmUtils::_('Company') ?></label></th>
|
55 |
<td><input name="company_name" type="text" id="company_name" class="regular-text" value="<?php echo esc_attr($company_name); ?>" /></td>
|
56 |
</tr>
|
57 |
+
<tr class="swpm-admin-edit-member-since">
|
58 |
<th scope="row"><label for="member_since"><?php echo SwpmUtils::_('Member Since') ?> </label></th>
|
59 |
<td><input class="regular-text" name="member_since" type="text" id="member_since" value="<?php echo esc_attr($member_since); ?>" /></td>
|
60 |
</tr>
|
views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php
CHANGED
@@ -86,10 +86,17 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
|
|
86 |
|
87 |
$output = '';
|
88 |
ob_start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
?>
|
90 |
<div class="swpm-button-wrapper">
|
91 |
<div class="swpm-pp-smart-checkout-btn-<?php echo $uniqid; ?>"></div>
|
92 |
-
<script src="https://www.paypalobjects.com/api/checkout.js" data-version-4></script>
|
93 |
<script>
|
94 |
paypal.Button.render({
|
95 |
|
@@ -130,8 +137,10 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
|
|
130 |
alert('<?php echo esc_js(__("Error occured during PayPal Smart Checkout process.", "simple-membership")); ?>\n\n' + error);
|
131 |
},
|
132 |
onAuthorize: function (data, actions) {
|
133 |
-
jQuery(
|
134 |
-
|
|
|
|
|
135 |
return actions.payment.execute().then(function (data) {
|
136 |
data.custom_field = '<?php echo $custom_field_value; ?>';
|
137 |
data.button_id = '<?php echo esc_js($button_id); ?>';
|
@@ -144,15 +153,15 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
|
|
144 |
} else {
|
145 |
console.log(result);
|
146 |
alert(result.errMsg)
|
147 |
-
|
148 |
-
|
149 |
}
|
150 |
}
|
151 |
)
|
152 |
.fail(function (result) {
|
153 |
console.log(result);
|
154 |
-
|
155 |
-
|
156 |
alert('<?php echo esc_js(__("HTTP error occured during payment process:", "simple-membership")); ?>' + ' ' + result.status + ' ' + result.statusText);
|
157 |
});
|
158 |
}
|
@@ -165,7 +174,6 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
|
|
165 |
@keyframes swpm-pp-sc-spinner {
|
166 |
to {transform: rotate(360deg);}
|
167 |
}
|
168 |
-
|
169 |
.swpm-pp-sc-spinner {
|
170 |
margin: 0 auto;
|
171 |
text-indent: -9999px;
|
86 |
|
87 |
$output = '';
|
88 |
ob_start();
|
89 |
+
$ppCheckoutJs = '<script src="https://www.paypalobjects.com/api/checkout.js" data-version-4></script>';
|
90 |
+
//check if checkout.js was already included
|
91 |
+
//including it several times on one page causes JS fatal error
|
92 |
+
if (!defined('SWPM-PP-SMART-CHECKOUT-SCRIPT-INCLUDED')) {
|
93 |
+
//it wasn't. Let's include it and define an indicator that it is included now
|
94 |
+
define('SWPM-PP-SMART-CHECKOUT-SCRIPT-INCLUDED', 1);
|
95 |
+
echo $ppCheckoutJs;
|
96 |
+
}
|
97 |
?>
|
98 |
<div class="swpm-button-wrapper">
|
99 |
<div class="swpm-pp-smart-checkout-btn-<?php echo $uniqid; ?>"></div>
|
|
|
100 |
<script>
|
101 |
paypal.Button.render({
|
102 |
|
137 |
alert('<?php echo esc_js(__("Error occured during PayPal Smart Checkout process.", "simple-membership")); ?>\n\n' + error);
|
138 |
},
|
139 |
onAuthorize: function (data, actions) {
|
140 |
+
var paymentBtnCont = jQuery('.swpm-pp-smart-checkout-btn-<?php echo $uniqid; ?>');
|
141 |
+
var paymentBtnSpinner = paymentBtnCont.siblings('.swpm-pp-sc-spinner-cont');
|
142 |
+
paymentBtnCont.hide();
|
143 |
+
paymentBtnSpinner.css('display', 'inline-block');
|
144 |
return actions.payment.execute().then(function (data) {
|
145 |
data.custom_field = '<?php echo $custom_field_value; ?>';
|
146 |
data.button_id = '<?php echo esc_js($button_id); ?>';
|
153 |
} else {
|
154 |
console.log(result);
|
155 |
alert(result.errMsg)
|
156 |
+
paymentBtnCont.show();
|
157 |
+
paymentBtnSpinner.hide();
|
158 |
}
|
159 |
}
|
160 |
)
|
161 |
.fail(function (result) {
|
162 |
console.log(result);
|
163 |
+
paymentBtnCont.show();
|
164 |
+
paymentBtnSpinner.hide();
|
165 |
alert('<?php echo esc_js(__("HTTP error occured during payment process:", "simple-membership")); ?>' + ' ' + result.status + ' ' + result.statusText);
|
166 |
});
|
167 |
}
|
174 |
@keyframes swpm-pp-sc-spinner {
|
175 |
to {transform: rotate(360deg);}
|
176 |
}
|
|
|
177 |
.swpm-pp-sc-spinner {
|
178 |
margin: 0 auto;
|
179 |
text-indent: -9999px;
|