You've already forked wc-licensed-product
- Add license meta box on WooCommerce order edit pages - Add editable order domain field with AJAX inline editing - Add editable license domains directly from order page - Add licenses table showing all licenses for an order - Support both classic orders and HPOS New files: - src/Admin/OrderLicenseController.php - assets/js/order-licenses.js New method: LicenseManager::getLicensesByOrder() Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
207 lines
7.1 KiB
JavaScript
207 lines
7.1 KiB
JavaScript
/**
|
|
* WC Licensed Product - Order Licenses Admin
|
|
*
|
|
* @package Jeremias\WcLicensedProduct
|
|
*/
|
|
|
|
(function($) {
|
|
'use strict';
|
|
|
|
var WCLPOrderLicenses = {
|
|
init: function() {
|
|
this.bindEvents();
|
|
},
|
|
|
|
bindEvents: function() {
|
|
// Order domain save
|
|
$('#wclp-save-order-domain').on('click', this.saveOrderDomain.bind(this));
|
|
|
|
// License domain edit/save/cancel
|
|
$(document).on('click', '.wclp-edit-domain-btn', this.startEditDomain);
|
|
$(document).on('click', '.wclp-save-domain-btn', this.saveLicenseDomain.bind(this));
|
|
$(document).on('click', '.wclp-cancel-domain-btn', this.cancelEditDomain);
|
|
|
|
// Enter key on domain inputs
|
|
$('#wclp-order-domain').on('keypress', function(e) {
|
|
if (e.which === 13) {
|
|
e.preventDefault();
|
|
$('#wclp-save-order-domain').click();
|
|
}
|
|
});
|
|
|
|
$(document).on('keypress', '.wclp-domain-input', function(e) {
|
|
if (e.which === 13) {
|
|
e.preventDefault();
|
|
$(this).closest('.wclp-license-domain-edit').find('.wclp-save-domain-btn').click();
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Save order domain
|
|
*/
|
|
saveOrderDomain: function(e) {
|
|
e.preventDefault();
|
|
|
|
var $btn = $('#wclp-save-order-domain');
|
|
var $input = $('#wclp-order-domain');
|
|
var $spinner = $btn.siblings('.spinner');
|
|
var $message = $btn.siblings('.wclp-status-message');
|
|
|
|
var orderId = $input.data('order-id');
|
|
var domain = $input.val().trim();
|
|
|
|
$btn.prop('disabled', true);
|
|
$spinner.addClass('is-active');
|
|
$message.text('').removeClass('success error');
|
|
|
|
$.ajax({
|
|
url: wclpOrderLicenses.ajaxUrl,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'wclp_update_order_domain',
|
|
nonce: wclpOrderLicenses.nonce,
|
|
order_id: orderId,
|
|
domain: domain
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
$input.val(response.data.domain);
|
|
$message.text(wclpOrderLicenses.strings.saved).addClass('success');
|
|
} else {
|
|
$message.text(response.data.message || wclpOrderLicenses.strings.error).addClass('error');
|
|
}
|
|
},
|
|
error: function() {
|
|
$message.text(wclpOrderLicenses.strings.error).addClass('error');
|
|
},
|
|
complete: function() {
|
|
$btn.prop('disabled', false);
|
|
$spinner.removeClass('is-active');
|
|
|
|
// Clear message after 3 seconds
|
|
setTimeout(function() {
|
|
$message.text('').removeClass('success error');
|
|
}, 3000);
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Start editing license domain
|
|
*/
|
|
startEditDomain: function(e) {
|
|
e.preventDefault();
|
|
|
|
var $container = $(this).closest('.wclp-license-domain-edit');
|
|
var $display = $container.find('.wclp-domain-display');
|
|
var $input = $container.find('.wclp-domain-input');
|
|
var $editBtn = $container.find('.wclp-edit-domain-btn');
|
|
var $saveBtn = $container.find('.wclp-save-domain-btn');
|
|
var $cancelBtn = $container.find('.wclp-cancel-domain-btn');
|
|
|
|
// Store original value
|
|
$input.data('original', $display.text());
|
|
|
|
// Toggle visibility
|
|
$display.hide();
|
|
$editBtn.hide();
|
|
$input.show().focus().select();
|
|
$saveBtn.show();
|
|
$cancelBtn.show();
|
|
},
|
|
|
|
/**
|
|
* Cancel editing license domain
|
|
*/
|
|
cancelEditDomain: function(e) {
|
|
e.preventDefault();
|
|
|
|
var $container = $(this).closest('.wclp-license-domain-edit');
|
|
var $display = $container.find('.wclp-domain-display');
|
|
var $input = $container.find('.wclp-domain-input');
|
|
var $editBtn = $container.find('.wclp-edit-domain-btn');
|
|
var $saveBtn = $container.find('.wclp-save-domain-btn');
|
|
var $cancelBtn = $container.find('.wclp-cancel-domain-btn');
|
|
|
|
// Restore original value
|
|
$input.val($input.data('original'));
|
|
|
|
// Toggle visibility
|
|
$input.hide();
|
|
$saveBtn.hide();
|
|
$cancelBtn.hide();
|
|
$display.show();
|
|
$editBtn.show();
|
|
},
|
|
|
|
/**
|
|
* Save license domain
|
|
*/
|
|
saveLicenseDomain: function(e) {
|
|
e.preventDefault();
|
|
|
|
var $btn = $(e.currentTarget);
|
|
var $container = $btn.closest('.wclp-license-domain-edit');
|
|
var $row = $btn.closest('tr');
|
|
var $input = $container.find('.wclp-domain-input');
|
|
var $display = $container.find('.wclp-domain-display');
|
|
var $spinner = $container.find('.spinner');
|
|
var $editBtn = $container.find('.wclp-edit-domain-btn');
|
|
var $cancelBtn = $container.find('.wclp-cancel-domain-btn');
|
|
|
|
var licenseId = $row.data('license-id');
|
|
var domain = $input.val().trim();
|
|
|
|
if (!domain) {
|
|
alert(wclpOrderLicenses.strings.invalidDomain);
|
|
return;
|
|
}
|
|
|
|
$btn.prop('disabled', true);
|
|
$cancelBtn.prop('disabled', true);
|
|
$spinner.addClass('is-active');
|
|
|
|
$.ajax({
|
|
url: wclpOrderLicenses.ajaxUrl,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'wclp_update_license_domain',
|
|
nonce: wclpOrderLicenses.nonce,
|
|
license_id: licenseId,
|
|
domain: domain
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
// Update display
|
|
$display.text(response.data.domain);
|
|
$input.val(response.data.domain);
|
|
|
|
// Switch back to display mode
|
|
$input.hide();
|
|
$btn.hide();
|
|
$cancelBtn.hide();
|
|
$display.show();
|
|
$editBtn.show();
|
|
} else {
|
|
alert(response.data.message || wclpOrderLicenses.strings.error);
|
|
}
|
|
},
|
|
error: function() {
|
|
alert(wclpOrderLicenses.strings.error);
|
|
},
|
|
complete: function() {
|
|
$btn.prop('disabled', false);
|
|
$cancelBtn.prop('disabled', false);
|
|
$spinner.removeClass('is-active');
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
$(document).ready(function() {
|
|
WCLPOrderLicenses.init();
|
|
});
|
|
|
|
})(jQuery);
|