208 lines
7.8 KiB
JavaScript
208 lines
7.8 KiB
JavaScript
(function($) {
|
|
'use strict';
|
|
|
|
var PCMembership = {
|
|
stripe: null,
|
|
|
|
init: function() {
|
|
this.bindEvents();
|
|
this.initStripe();
|
|
},
|
|
|
|
bindEvents: function() {
|
|
$(document).on('click', '.pc-membership-select-plan-btn', $.proxy(this.selectPlan, this));
|
|
$(document).on('submit', '#pc-membership-login-form', $.proxy(this.handleLogin, this));
|
|
$(document).on('submit', '#pc-membership-register-form', $.proxy(this.handleRegister, this));
|
|
$(document).on('submit', '#pc-membership-profile-form', $.proxy(this.handleProfileUpdate, this));
|
|
$(document).on('click', '#pc-membership-cancel-subscription', $.proxy(this.cancelSubscription, this));
|
|
$(document).on('click', '#pc-membership-update-payment-method', $.proxy(this.updatePaymentMethod, this));
|
|
},
|
|
|
|
initStripe: function() {
|
|
if (typeof Stripe !== 'undefined' && pcMembership.stripe_key) {
|
|
this.stripe = Stripe(pcMembership.stripe_key);
|
|
}
|
|
},
|
|
|
|
selectPlan: function(e) {
|
|
e.preventDefault();
|
|
var planId = $(e.currentTarget).data('plan-id');
|
|
|
|
if (!planId) {
|
|
alert(pcMembership.i18n.selectPlan);
|
|
return;
|
|
}
|
|
|
|
var $button = $(e.currentTarget);
|
|
var originalText = $button.text();
|
|
$button.text(pcMembership.i18n.processing).prop('disabled', true);
|
|
|
|
$.ajax({
|
|
url: pcMembership.ajax_url,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'pc_membership_create_checkout',
|
|
plan_id: planId,
|
|
nonce: pcMembership.nonce
|
|
},
|
|
success: $.proxy(function(response) {
|
|
if (response.success && response.data.url) {
|
|
window.location.href = response.data.url;
|
|
} else {
|
|
alert(pcMembership.i18n.error + ': ' + (response.data || 'Unknown error'));
|
|
$button.text(originalText).prop('disabled', false);
|
|
}
|
|
}, this),
|
|
error: $.proxy(function() {
|
|
alert(pcMembership.i18n.error);
|
|
$button.text(originalText).prop('disabled', false);
|
|
}, this)
|
|
});
|
|
},
|
|
|
|
handleLogin: function(e) {
|
|
e.preventDefault();
|
|
var $form = $('#pc-membership-login-form');
|
|
var $message = $('#pc-membership-login-message');
|
|
var formData = $form.serialize();
|
|
|
|
$message.removeClass('success error').hide();
|
|
|
|
$.ajax({
|
|
url: pcMembership.ajax_url,
|
|
type: 'POST',
|
|
data: formData + '&action=pc_membership_login&nonce=' + pcMembership.nonce,
|
|
success: $.proxy(function(response) {
|
|
if (response.success) {
|
|
$message.addClass('success').text(pcMembership.i18n.success).show();
|
|
setTimeout(function() {
|
|
window.location.href = response.data.redirect || pcMembership.account_url;
|
|
}, 1000);
|
|
} else {
|
|
$message.addClass('error').text(response.data || pcMembership.i18n.error).show();
|
|
}
|
|
}, this),
|
|
error: function() {
|
|
$message.addClass('error').text(pcMembership.i18n.error).show();
|
|
}
|
|
});
|
|
},
|
|
|
|
handleRegister: function(e) {
|
|
e.preventDefault();
|
|
var $form = $('#pc-membership-register-form');
|
|
var $message = $('#pc-membership-register-message');
|
|
var formData = $form.serialize();
|
|
|
|
var password = $('#user_password').val();
|
|
var passwordConfirm = $('#user_password_confirm').val();
|
|
|
|
if (password !== passwordConfirm) {
|
|
$message.addClass('error').text('Passwords do not match').show();
|
|
return;
|
|
}
|
|
|
|
if (password.length < 8) {
|
|
$message.addClass('error').text('Password must be at least 8 characters').show();
|
|
return;
|
|
}
|
|
|
|
$message.removeClass('success error').hide();
|
|
|
|
$.ajax({
|
|
url: pcMembership.ajax_url,
|
|
type: 'POST',
|
|
data: formData + '&action=pc_membership_register&nonce=' + pcMembership.nonce,
|
|
success: $.proxy(function(response) {
|
|
if (response.success) {
|
|
$message.addClass('success').text(pcMembership.i18n.success).show();
|
|
setTimeout(function() {
|
|
window.location.href = response.data.redirect || pcMembership.account_url;
|
|
}, 1000);
|
|
} else {
|
|
$message.addClass('error').text(response.data || pcMembership.i18n.error).show();
|
|
}
|
|
}, this),
|
|
error: function() {
|
|
$message.addClass('error').text(pcMembership.i18n.error).show();
|
|
}
|
|
});
|
|
},
|
|
|
|
handleProfileUpdate: function(e) {
|
|
e.preventDefault();
|
|
var $form = $('#pc-membership-profile-form');
|
|
|
|
$.ajax({
|
|
url: pcMembership.ajax_url,
|
|
type: 'POST',
|
|
data: $form.serialize() + '&action=pc_membership_update_profile&nonce=' + pcMembership.nonce,
|
|
success: function(response) {
|
|
if (response.success) {
|
|
alert('Profile updated successfully');
|
|
} else {
|
|
alert(response.data || 'Error updating profile');
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
cancelSubscription: function(e) {
|
|
e.preventDefault();
|
|
if (!confirm(pcMembership.i18n.confirmCancel)) return;
|
|
|
|
var subscriptionId = $(e.currentTarget).data('subscription-id');
|
|
var $button = $(e.currentTarget);
|
|
|
|
$button.text(pcMembership.i18n.processing).prop('disabled', true);
|
|
|
|
$.ajax({
|
|
url: pcMembership.ajax_url,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'pc_membership_cancel_subscription',
|
|
subscription_id: subscriptionId,
|
|
nonce: pcMembership.nonce
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
window.location.reload();
|
|
} else {
|
|
alert(pcMembership.i18n.error);
|
|
$button.text(pcMembership.i18n.cancel).prop('disabled', false);
|
|
}
|
|
},
|
|
error: function() {
|
|
alert(pcMembership.i18n.error);
|
|
$button.text(pcMembership.i18n.cancel).prop('disabled', false);
|
|
}
|
|
});
|
|
},
|
|
|
|
updatePaymentMethod: function(e) {
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
url: pcMembership.ajax_url,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'pc_membership_update_payment_method',
|
|
nonce: pcMembership.nonce
|
|
},
|
|
success: function(response) {
|
|
if (response.success && response.data.url) {
|
|
window.location.href = response.data.url;
|
|
} else {
|
|
alert(pcMembership.i18n.error);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
$(document).ready(function() {
|
|
PCMembership.init();
|
|
});
|
|
|
|
})(jQuery);
|