licenseManager = $licenseManager;
$this->registerHooks();
}
/**
* Register WordPress hooks
*/
private function registerHooks(): void
{
// Add licenses meta box to order edit page
add_action('add_meta_boxes', [$this, 'addLicensesMetaBox']);
// Handle AJAX actions
add_action('wp_ajax_wclp_update_order_domain', [$this, 'ajaxUpdateOrderDomain']);
add_action('wp_ajax_wclp_update_license_domain', [$this, 'ajaxUpdateLicenseDomain']);
add_action('wp_ajax_wclp_generate_order_licenses', [$this, 'ajaxGenerateOrderLicenses']);
// Enqueue admin scripts
add_action('admin_enqueue_scripts', [$this, 'enqueueScripts']);
}
/**
* Add licenses meta box to order edit page
*/
public function addLicensesMetaBox(): void
{
// Support both classic post type and HPOS
$screen = wc_get_container()->get(\Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController::class)->custom_orders_table_usage_is_enabled()
? wc_get_page_screen_id('shop-order')
: 'shop_order';
add_meta_box(
'wclp_order_licenses',
__('Product Licenses', 'wc-licensed-product'),
[$this, 'renderLicensesMetaBox'],
$screen,
'normal',
'default'
);
}
/**
* Render licenses meta box
*/
public function renderLicensesMetaBox($post_or_order): void
{
// Get order object - support both classic and HPOS
if ($post_or_order instanceof \WC_Order) {
$order = $post_or_order;
} else {
$order = wc_get_order($post_or_order->ID);
}
if (!$order) {
echo '
' . esc_html__('Order not found.', 'wc-licensed-product') . '
';
return;
}
// Check if order has licensed products
$hasLicensedProduct = false;
foreach ($order->get_items() as $item) {
$product = $item->get_product();
if ($product && $product->is_type('licensed')) {
$hasLicensedProduct = true;
break;
}
}
if (!$hasLicensedProduct) {
echo '
' . esc_html__('This order does not contain licensed products.', 'wc-licensed-product') . '
';
return;
}
// Get order domain
$orderDomain = $order->get_meta('_licensed_product_domain');
// Get licenses for this order
$licenses = $this->licenseManager->getLicensesByOrder($order->get_id());
wp_nonce_field('wclp_order_license_actions', 'wclp_order_license_nonce');
?>