(function($) {
'use strict';
var PCMembershipAdmin = {
init: function() {
this.bindEvents();
this.loadStats();
this.initPlanModal();
this.initAccessForm();
},
bindEvents: function() {
$(document).on('click', '.pc-membership-add-plan-btn', $.proxy(this.openPlanModal, this));
$(document).on('click', '.pc-membership-edit-plan', $.proxy(this.editPlan, this));
$(document).on('click', '.pc-membership-delete-plan', $.proxy(this.deletePlan, this));
$(document).on('click', '.pc-membership-modal-close, .pc-membership-modal-cancel', $.proxy(this.closePlanModal, this));
$(document).on('submit', '#pc-membership-plan-form', $.proxy(this.savePlan, this));
$(document).on('change', '#plan_type', $.proxy(this.toggleBillingInterval, this));
$(document).on('click', '.pc-membership-delete-rule', $.proxy(this.deleteAccessRule, this));
$(document).on('submit', '#pc-membership-access-form', $.proxy(this.saveAccessRule, this));
$(document).on('change', '#access_redirect', $.proxy(this.toggleCustomRedirect, this));
$(document).on('change', '#access_content_type', $.proxy(this.loadContentOptions, this));
},
loadStats: function() {
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: {
action: 'pc_membership_get_stats',
nonce: pcMembershipAdmin.nonce
},
success: function(response) {
if (response.success) {
var data = response.data;
$('#pc-members-count').text(data.active_members);
$('#pc-subscriptions-count').text(data.active_subscriptions);
$('#pc-revenue').text(data.revenue);
$('#pc-plans-count').text(data.total_plans);
if (data.recent_subscriptions && data.recent_subscriptions.length > 0) {
var tbody = $('#pc-recent-subscriptions tbody');
tbody.empty();
$.each(data.recent_subscriptions, function(i, sub) {
var display_name = sub.display_name || sub.user_login || 'User #' + sub.user_id;
tbody.append(
'
' +
'| ' + display_name + ' | ' +
'' + sub.plan_name + ' | ' +
'' + sub.status + ' | ' +
'' + sub.started_at.substring(0, 10) + ' | ' +
'
'
);
});
}
}
}
});
},
initPlanModal: function() {
$('#pc-membership-plan-modal').dialog({
autoOpen: false,
modal: true,
width: '90%',
maxWidth: 600,
closeText: ''
});
},
openPlanModal: function(e) {
if (e) e.preventDefault();
$('#pc-membership-plan-form')[0].reset();
$('#plan_id').val('');
$('#pc-membership-plan-modal').dialog('open');
this.toggleBillingInterval();
},
editPlan: function(e) {
e.preventDefault();
var planId = $(e.currentTarget).data('plan-id');
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: {
action: 'pc_membership_get_plan',
plan_id: planId,
nonce: pcMembershipAdmin.nonce
},
success: $.proxy(function(response) {
if (response.success && response.data.plan) {
var plan = response.data.plan;
$('#plan_id').val(plan.id);
$('#plan_name').val(plan.name);
$('#plan_description').val(plan.description || '');
$('#plan_price').val(plan.price);
$('#plan_type').val(plan.is_subscription);
$('#plan_billing_interval').val(plan.billing_interval || 'month');
$('#plan_trial_days').val(plan.trial_days || 0);
$('#plan_benefits').val(plan.benefits || '');
$('#plan_role').val(plan.role || 'subscriber');
$('#pc-membership-plan-modal').dialog('open');
this.toggleBillingInterval();
}
}, this)
});
},
savePlan: function(e) {
e.preventDefault();
var $form = $('#pc-membership-plan-form');
var formData = $form.serialize();
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: formData + '&action=pc_membership_save_plan&nonce=' + pcMembershipAdmin.nonce,
success: function(response) {
if (response.success) {
$('#pc-membership-plan-modal').dialog('close');
window.location.reload();
} else {
alert(pcMembershipAdmin.i18n.error + ': ' + (response.data || 'Unknown error'));
}
},
error: function() {
alert(pcMembershipAdmin.i18n.error);
}
});
},
deletePlan: function(e) {
e.preventDefault();
if (!confirm(pcMembershipAdmin.i18n.confirmDelete)) return;
var planId = $(e.currentTarget).data('plan-id');
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: {
action: 'pc_membership_delete_plan',
plan_id: planId,
nonce: pcMembershipAdmin.nonce
},
success: function(response) {
if (response.success) {
window.location.reload();
} else {
alert(pcMembershipAdmin.i18n.error);
}
}
});
},
closePlanModal: function(e) {
if (e) e.preventDefault();
$('#pc-membership-plan-modal').dialog('close');
},
toggleBillingInterval: function() {
var isSubscription = $('#plan_type').val() === '1';
$('#billing_interval_row').toggle(isSubscription);
},
initAccessForm: function() {
this.loadContentOptions();
},
loadContentOptions: function() {
var contentType = $('#access_content_type').val();
var $select = $('#access_content_id');
$select.html('');
var data = {
action: 'pc_membership_get_content_for_rule',
content_type: contentType,
nonce: pcMembershipAdmin.nonce
};
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: data,
success: function(response) {
$select.empty();
$select.append('');
if (response.success && response.data.items) {
$.each(response.data.items, function(i, item) {
$select.append('');
});
}
}
});
},
saveAccessRule: function(e) {
e.preventDefault();
var $form = $('#pc-membership-access-form');
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: $form.serialize() + '&action=pc_membership_save_access_rule&nonce=' + pcMembershipAdmin.nonce,
success: function(response) {
if (response.success) {
window.location.reload();
} else {
alert(pcMembershipAdmin.i18n.error + ': ' + (response.data || 'Unknown error'));
}
}
});
},
deleteAccessRule: function(e) {
e.preventDefault();
if (!confirm('Are you sure you want to delete this rule?')) return;
var ruleId = $(e.currentTarget).data('rule-id');
$.ajax({
url: pcMembershipAdmin.ajax_url,
type: 'POST',
data: {
action: 'pc_membership_delete_access_rule',
rule_id: ruleId,
nonce: pcMembershipAdmin.nonce
},
success: function(response) {
if (response.success) {
window.location.reload();
} else {
alert(pcMembershipAdmin.i18n.error);
}
}
});
},
toggleCustomRedirect: function() {
var redirect = $('#access_redirect').val();
$('#custom_redirect_row').toggle(redirect === 'custom');
}
};
$(document).ready(function() {
PCMembershipAdmin.init();
});
})(jQuery);