fix: licensing table creation, consistent meta keys, checkout virtual detection

1. License table auto-creation:
   - Added ensure_tables() check on plugins_loaded
   - Tables created automatically if missing

2. Consistent licensing meta keys:
   - ProductsController now uses _woonoow_licensing_enabled
   - Matches LicensingModule and LicenseManager

3. Checkout virtual-only detection:
   - Added needs_shipping to Cart interface
   - Checkout uses cart.needs_shipping from WooCommerce API
   - Fallback to item-level virtual/downloadable check

4. Login redirect for logged-in users added previously
This commit is contained in:
Dwindi Ramadhana
2026-01-07 22:15:51 +07:00
parent f334e018fa
commit 2cc20ff760
5 changed files with 32 additions and 10 deletions

View File

@@ -415,13 +415,13 @@ class ProductsController {
// Licensing meta
if (isset($data['licensing_enabled'])) {
update_post_meta($product->get_id(), '_licensing_enabled', $data['licensing_enabled'] ? 'yes' : 'no');
update_post_meta($product->get_id(), '_woonoow_licensing_enabled', $data['licensing_enabled'] ? 'yes' : 'no');
}
if (isset($data['license_activation_limit'])) {
update_post_meta($product->get_id(), '_license_activation_limit', self::sanitize_number($data['license_activation_limit']));
update_post_meta($product->get_id(), '_woonoow_license_activation_limit', self::sanitize_number($data['license_activation_limit']));
}
if (isset($data['license_duration_days'])) {
update_post_meta($product->get_id(), '_license_duration_days', self::sanitize_number($data['license_duration_days']));
update_post_meta($product->get_id(), '_woonoow_license_expiry_days', self::sanitize_number($data['license_duration_days']));
}
// Handle variations for variable products
@@ -559,13 +559,13 @@ class ProductsController {
// Licensing meta
if (isset($data['licensing_enabled'])) {
update_post_meta($product->get_id(), '_licensing_enabled', $data['licensing_enabled'] ? 'yes' : 'no');
update_post_meta($product->get_id(), '_woonoow_licensing_enabled', $data['licensing_enabled'] ? 'yes' : 'no');
}
if (isset($data['license_activation_limit'])) {
update_post_meta($product->get_id(), '_license_activation_limit', self::sanitize_number($data['license_activation_limit']));
update_post_meta($product->get_id(), '_woonoow_license_activation_limit', self::sanitize_number($data['license_activation_limit']));
}
if (isset($data['license_duration_days'])) {
update_post_meta($product->get_id(), '_license_duration_days', self::sanitize_number($data['license_duration_days']));
update_post_meta($product->get_id(), '_woonoow_license_expiry_days', self::sanitize_number($data['license_duration_days']));
}
// Allow plugins to perform additional updates (Level 1 compatibility)
@@ -761,7 +761,7 @@ class ProductsController {
}
// Licensing fields
$data['licensing_enabled'] = get_post_meta($product->get_id(), '_licensing_enabled', true) === 'yes';
$data['licensing_enabled'] = get_post_meta($product->get_id(), '_woonoow_licensing_enabled', true) === 'yes';
$data['license_activation_limit'] = get_post_meta($product->get_id(), '_license_activation_limit', true) ?: '';
$data['license_duration_days'] = get_post_meta($product->get_id(), '_license_duration_days', true) ?: '';

View File

@@ -96,7 +96,7 @@ class LicenseManager {
if (!$product) continue;
// Check if product has licensing enabled
$licensing_enabled = get_post_meta($product_id, '_licensing_enabled', true);
$licensing_enabled = get_post_meta($product_id, '_woonoow_licensing_enabled', true);
if ($licensing_enabled !== 'yes') continue;
// Check if license already exists for this order item

View File

@@ -37,10 +37,25 @@ class LicensingModule {
*/
public static function maybe_init_manager() {
if (ModuleRegistry::is_enabled('licensing')) {
// Ensure tables exist
self::ensure_tables();
LicenseManager::init();
}
}
/**
* Ensure database tables exist
*/
private static function ensure_tables() {
global $wpdb;
$table = $wpdb->prefix . 'woonoow_licenses';
// Check if table exists
if ($wpdb->get_var("SHOW TABLES LIKE '$table'") !== $table) {
LicenseManager::create_tables();
}
}
/**
* Handle module enable
*/