You've already forked wc-tier-and-package-prices
Version 1.4.1 - Localhost license bypass and auto-updates
All checks were successful
Create Release Package / build-release (push) Successful in 1m3s
All checks were successful
Create Release Package / build-release (push) Successful in 1m3s
Added localhost/self-licensing license bypass and WordPress auto-update integration from license server. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,9 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
// Add AJAX handlers for license validation
|
||||
add_action('wp_ajax_wc_tpp_validate_license', array($this, 'ajax_validate_license'));
|
||||
add_action('wp_ajax_wc_tpp_activate_license', array($this, 'ajax_activate_license'));
|
||||
|
||||
// Add AJAX handler for update checks
|
||||
add_action('wp_ajax_wc_tpp_check_updates', array($this, 'ajax_check_updates'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,6 +47,7 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
return array(
|
||||
'' => __('General', 'wc-tier-package-prices'),
|
||||
'license' => __('License', 'wc-tier-package-prices'),
|
||||
'updates' => __('Auto-Updates', 'wc-tier-package-prices'),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -177,6 +181,75 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get settings for the Auto-Updates section
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function get_settings_for_updates_section() {
|
||||
// Check if auto-install is available (requires valid license or bypass)
|
||||
$license_checker = WC_TPP_License_Checker::get_instance();
|
||||
$auto_install_disabled = !$license_checker->is_license_valid();
|
||||
$auto_install_desc = __('Automatically install updates when available.', 'wc-tier-package-prices');
|
||||
|
||||
if ($auto_install_disabled) {
|
||||
$auto_install_desc .= ' ' . __('(Requires a valid license)', 'wc-tier-package-prices');
|
||||
}
|
||||
|
||||
return array(
|
||||
array(
|
||||
'title' => __('Auto-Update Settings', 'wc-tier-package-prices'),
|
||||
'type' => 'title',
|
||||
'desc' => __('Configure automatic plugin updates from the license server.', 'wc-tier-package-prices'),
|
||||
'id' => 'wc_tpp_update_settings',
|
||||
),
|
||||
|
||||
array(
|
||||
'title' => __('Enable Update Notifications', 'wc-tier-package-prices'),
|
||||
'desc' => __('Check for available plugin updates.', 'wc-tier-package-prices'),
|
||||
'id' => 'wc_tpp_update_notification_enabled',
|
||||
'default' => 'yes',
|
||||
'type' => 'checkbox',
|
||||
'desc_tip' => __('When enabled, the plugin will check for updates from the license server and show notifications in the WordPress admin.', 'wc-tier-package-prices'),
|
||||
),
|
||||
|
||||
array(
|
||||
'title' => __('Automatically Install Updates', 'wc-tier-package-prices'),
|
||||
'desc' => $auto_install_desc,
|
||||
'id' => 'wc_tpp_auto_install_enabled',
|
||||
'default' => 'no',
|
||||
'type' => 'checkbox',
|
||||
'desc_tip' => __('When enabled, updates will be automatically installed when WordPress performs background updates.', 'wc-tier-package-prices'),
|
||||
'custom_attributes' => $auto_install_disabled ? array('disabled' => 'disabled') : array(),
|
||||
),
|
||||
|
||||
array(
|
||||
'title' => __('Check Frequency (Hours)', 'wc-tier-package-prices'),
|
||||
'desc' => __('How often to check for updates.', 'wc-tier-package-prices'),
|
||||
'id' => 'wc_tpp_update_check_frequency',
|
||||
'default' => '12',
|
||||
'type' => 'number',
|
||||
'css' => 'width: 80px;',
|
||||
'desc_tip' => __('Number of hours between update checks. Default is 12 hours.', 'wc-tier-package-prices'),
|
||||
'custom_attributes' => array(
|
||||
'min' => '1',
|
||||
'max' => '168',
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'title' => __('Update Status', 'wc-tier-package-prices'),
|
||||
'type' => 'wc_tpp_update_status',
|
||||
'id' => 'wc_tpp_update_status_display',
|
||||
),
|
||||
|
||||
array(
|
||||
'type' => 'sectionend',
|
||||
'id' => 'wc_tpp_update_settings',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cached license status
|
||||
*
|
||||
@@ -368,8 +441,9 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
public function output() {
|
||||
global $current_section;
|
||||
|
||||
// Register custom field type for license status display
|
||||
// Register custom field types
|
||||
add_action('woocommerce_admin_field_wc_tpp_license_status', array($this, 'output_license_status_field'));
|
||||
add_action('woocommerce_admin_field_wc_tpp_update_status', array($this, 'output_update_status_field'));
|
||||
|
||||
parent::output();
|
||||
|
||||
@@ -377,6 +451,11 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
if ('license' === $current_section) {
|
||||
$this->output_license_scripts();
|
||||
}
|
||||
|
||||
// Add JavaScript for updates section
|
||||
if ('updates' === $current_section) {
|
||||
$this->output_updates_scripts();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -415,6 +494,20 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
* @param array|false $status License status data.
|
||||
*/
|
||||
private function render_license_status_html($status) {
|
||||
// Check for license bypass
|
||||
$license_checker = WC_TPP_License_Checker::get_instance();
|
||||
$bypass_reason = $license_checker->get_bypass_reason();
|
||||
|
||||
if ($bypass_reason) {
|
||||
echo '<span class="wc-tpp-license-active">' . esc_html__('License Active', 'wc-tier-package-prices') . '</span>';
|
||||
if ('localhost' === $bypass_reason) {
|
||||
echo '<br><small>' . esc_html__('(Localhost environment - license validation bypassed)', 'wc-tier-package-prices') . '</small>';
|
||||
} elseif ('self_licensing' === $bypass_reason) {
|
||||
echo '<br><small>' . esc_html__('(Self-licensing server - license validation bypassed)', 'wc-tier-package-prices') . '</small>';
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (empty($status)) {
|
||||
echo '<span class="wc-tpp-license-inactive">' . esc_html__('No license activated', 'wc-tier-package-prices') . '</span>';
|
||||
return;
|
||||
@@ -443,6 +536,50 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output update status custom field
|
||||
*
|
||||
* @param array $value Field configuration.
|
||||
*/
|
||||
public function output_update_status_field($value) {
|
||||
$update_checker = WC_TPP_Update_Checker::get_instance();
|
||||
$available_version = $update_checker->get_available_version();
|
||||
?>
|
||||
<tr valign="top">
|
||||
<th scope="row" class="titledesc">
|
||||
<label><?php esc_html_e('Update Status', 'wc-tier-package-prices'); ?></label>
|
||||
</th>
|
||||
<td class="forminp">
|
||||
<div id="wc-tpp-update-status-container">
|
||||
<?php $this->render_update_status_html($available_version); ?>
|
||||
</div>
|
||||
<p class="description" style="margin-top: 10px;">
|
||||
<button type="button" class="button" id="wc-tpp-check-updates">
|
||||
<?php esc_html_e('Check for Updates', 'wc-tier-package-prices'); ?>
|
||||
</button>
|
||||
<span class="spinner" id="wc-tpp-update-spinner"></span>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Render update status HTML
|
||||
*
|
||||
* @param string|null $available_version Available update version.
|
||||
*/
|
||||
private function render_update_status_html(?string $available_version) {
|
||||
echo '<p><strong>' . esc_html__('Current Version:', 'wc-tier-package-prices') . '</strong> ' . esc_html(WC_TPP_VERSION) . '</p>';
|
||||
|
||||
if ($available_version) {
|
||||
echo '<p class="wc-tpp-update-available"><strong>' . esc_html__('Update Available:', 'wc-tier-package-prices') . '</strong> ' . esc_html($available_version) . '</p>';
|
||||
echo '<p><a href="' . esc_url(admin_url('update-core.php')) . '" class="button button-primary">' . esc_html__('Update Now', 'wc-tier-package-prices') . '</a></p>';
|
||||
} else {
|
||||
echo '<p class="wc-tpp-up-to-date">' . esc_html__('You are running the latest version.', 'wc-tier-package-prices') . '</p>';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output JavaScript for license management
|
||||
*/
|
||||
@@ -525,5 +662,87 @@ if (!class_exists('WC_TPP_Settings')) {
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX handler for checking updates
|
||||
*/
|
||||
public function ajax_check_updates() {
|
||||
check_ajax_referer('wc_tpp_update_nonce', 'nonce');
|
||||
|
||||
if (!current_user_can('manage_woocommerce')) {
|
||||
wp_send_json_error(array('message' => __('Permission denied.', 'wc-tier-package-prices')));
|
||||
}
|
||||
|
||||
$update_checker = WC_TPP_Update_Checker::get_instance();
|
||||
$update_info = $update_checker->force_check();
|
||||
|
||||
if ($update_info && !empty($update_info['update_available'])) {
|
||||
wp_send_json_success(array(
|
||||
'message' => sprintf(
|
||||
/* translators: %s: Version number */
|
||||
__('Update available: version %s', 'wc-tier-package-prices'),
|
||||
$update_info['version']
|
||||
),
|
||||
'update_available' => true,
|
||||
'version' => $update_info['version'],
|
||||
'current_version' => WC_TPP_VERSION,
|
||||
));
|
||||
} else {
|
||||
wp_send_json_success(array(
|
||||
'message' => __('You are running the latest version.', 'wc-tier-package-prices'),
|
||||
'update_available' => false,
|
||||
'current_version' => WC_TPP_VERSION,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output JavaScript for update management
|
||||
*/
|
||||
private function output_updates_scripts() {
|
||||
$nonce = wp_create_nonce('wc_tpp_update_nonce');
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
jQuery(function($) {
|
||||
var $checkBtn = $('#wc-tpp-check-updates');
|
||||
var $spinner = $('#wc-tpp-update-spinner');
|
||||
var $container = $('#wc-tpp-update-status-container');
|
||||
|
||||
$checkBtn.on('click', function() {
|
||||
$spinner.addClass('is-active');
|
||||
$checkBtn.prop('disabled', true);
|
||||
|
||||
$.post(ajaxurl, {
|
||||
action: 'wc_tpp_check_updates',
|
||||
nonce: '<?php echo esc_js($nonce); ?>'
|
||||
})
|
||||
.done(function(response) {
|
||||
if (response.success) {
|
||||
var html = '<p><strong><?php echo esc_js(__('Current Version:', 'wc-tier-package-prices')); ?></strong> ' + response.data.current_version + '</p>';
|
||||
|
||||
if (response.data.update_available) {
|
||||
html += '<p class="wc-tpp-update-available"><strong><?php echo esc_js(__('Update Available:', 'wc-tier-package-prices')); ?></strong> ' + response.data.version + '</p>';
|
||||
html += '<p><a href="<?php echo esc_url(admin_url('update-core.php')); ?>" class="button button-primary"><?php echo esc_js(__('Update Now', 'wc-tier-package-prices')); ?></a></p>';
|
||||
} else {
|
||||
html += '<p class="wc-tpp-up-to-date"><?php echo esc_js(__('You are running the latest version.', 'wc-tier-package-prices')); ?></p>';
|
||||
}
|
||||
|
||||
$container.html(html);
|
||||
} else {
|
||||
alert(response.data.message || '<?php echo esc_js(__('Failed to check for updates.', 'wc-tier-package-prices')); ?>');
|
||||
}
|
||||
})
|
||||
.fail(function() {
|
||||
alert('<?php echo esc_js(__('Request failed. Please try again.', 'wc-tier-package-prices')); ?>');
|
||||
})
|
||||
.always(function() {
|
||||
$spinner.removeClass('is-active');
|
||||
$checkBtn.prop('disabled', false);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user