Files
wc-licensed-product/wc-licensed-product.php
magdev 1bc643408e Fix version deactivation button not working (v0.3.3)
The toggle version button in the admin product versions table was not
deactivating versions due to incorrect parameter order in the
updateVersion() call. The isActive value was being passed to the
attachmentId parameter position instead.

- Fixed parameter order: updateVersion($id, null, !$active, null)
- Bumped version to 0.3.3
- Updated CHANGELOG.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:39:26 +01:00

141 lines
4.1 KiB
PHP

<?php
/**
* Plugin Name: WooCommerce Licensed Product
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-licensed-product
* Description: WooCommerce plugin to sell software products using license keys with domain-based validation.
* Version: 0.3.3
* Author: Marco Graetsch
* Author URI: https://src.bundespruefstelle.ch/magdev
* License: GPL-2.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: wc-licensed-product
* Domain Path: /languages
* Requires at least: 6.0
* Requires PHP: 8.3
* WC requires at least: 10.0
* WC tested up to: 10.0
*
* @package Jeremias\WcLicensedProduct
*/
declare(strict_types=1);
namespace Jeremias\WcLicensedProduct;
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Plugin constants
define('WC_LICENSED_PRODUCT_VERSION', '0.3.3');
define('WC_LICENSED_PRODUCT_PLUGIN_FILE', __FILE__);
define('WC_LICENSED_PRODUCT_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('WC_LICENSED_PRODUCT_PLUGIN_URL', plugin_dir_url(__FILE__));
define('WC_LICENSED_PRODUCT_PLUGIN_BASENAME', plugin_basename(__FILE__));
// Load Composer autoloader
if (file_exists(WC_LICENSED_PRODUCT_PLUGIN_DIR . 'vendor/autoload.php')) {
require_once WC_LICENSED_PRODUCT_PLUGIN_DIR . 'vendor/autoload.php';
}
/**
* Check if WooCommerce is active
*/
function wc_licensed_product_is_woocommerce_active(): bool
{
return class_exists('WooCommerce');
}
/**
* Admin notice for missing WooCommerce
*/
function wc_licensed_product_woocommerce_missing_notice(): void
{
?>
<div class="error">
<p>
<?php
printf(
/* translators: %s: WooCommerce plugin name */
esc_html__('%s requires WooCommerce to be installed and active.', 'wc-licensed-product'),
'<strong>WC Licensed Product</strong>'
);
?>
</p>
</div>
<?php
}
/**
* Initialize the plugin
*/
function wc_licensed_product_init(): void
{
// Check for WooCommerce
if (!wc_licensed_product_is_woocommerce_active()) {
add_action('admin_notices', __NAMESPACE__ . '\\wc_licensed_product_woocommerce_missing_notice');
return;
}
// Load text domain
load_plugin_textdomain(
'wc-licensed-product',
false,
dirname(WC_LICENSED_PRODUCT_PLUGIN_BASENAME) . '/languages'
);
// Initialize the plugin
Plugin::instance();
}
// Hook into plugins_loaded to ensure WooCommerce is loaded first
add_action('plugins_loaded', __NAMESPACE__ . '\\wc_licensed_product_init');
// Declare WooCommerce feature compatibility
add_action('before_woocommerce_init', function (): void {
if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) {
// Declare HPOS compatibility
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
__FILE__,
true
);
// Declare cart/checkout blocks compatibility
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'cart_checkout_blocks',
__FILE__,
true
);
}
});
// Register activation hook
register_activation_hook(__FILE__, function (): void {
if (!wc_licensed_product_is_woocommerce_active()) {
deactivate_plugins(WC_LICENSED_PRODUCT_PLUGIN_BASENAME);
wp_die(
esc_html__('WC Licensed Product requires WooCommerce to be installed and active.', 'wc-licensed-product'),
'Plugin Activation Error',
['back_link' => true]
);
}
// Run installation
Installer::activate();
});
// Register deactivation hook
register_deactivation_hook(__FILE__, function (): void {
Installer::deactivate();
});
// Add Settings link to plugin actions
add_filter('plugin_action_links_' . plugin_basename(__FILE__), function (array $links): array {
$settingsUrl = admin_url('admin.php?page=wc-settings&tab=licensed_product');
$settingsLink = '<a href="' . esc_url($settingsUrl) . '">' . esc_html__('Settings', 'wc-licensed-product') . '</a>';
array_unshift($links, $settingsLink);
return $links;
});