upskill-event-manager/wordpress-dev/wordpress/wp-content/plugins/spectra-pro/admin/license-handler.php
bengizmo d1509b3d60 feat(dev-env): implement backup-based development workflow
This commit introduces a more reliable and consistent approach to setting up
the development environment using backups:

- Add setup-from-backup.sh script for environment setup from existing backups
- Standardize script naming and organization
- Move obsolete scripts to bin/obsolete directory
- Update documentation with new workflow instructions
- Create migration guide for transitioning to new workflow
- Update Memory Bank with workflow improvements

The new workflow provides:
- More reliable environment setup
- Faster setup process
- Offline development capability
- Consistent development environments across team members

Breaking changes:
- setup-dev.sh is replaced by setup-from-backup.sh
- sync-and-setup.sh is replaced by separate scripts
- verify-with-wpcli.sh is no longer used

Migration path is documented in MIGRATION_GUIDE.md
2025-03-26 11:26:18 -03:00

237 lines
6.1 KiB
PHP

<?php
namespace SpectraPro\Admin;
use \BSF_License_Manager;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Base
*
* @package spectra-pro
* @since 1.0.0
*/
class License_Handler {
/**
* Product ID
*
* @access private
* @var string Product ID.
* @since 1.0.0
*/
private $product_id = 'spectra-pro';
/**
* Errors
*
* @access private
* @var array Errors strings.
* @since 1.0.0
*/
private static $errors = array();
/**
* Initialize actions and filters.
*
* @since 1.0.0
* @return void
*/
public function init() {
$this->set_global_paths();
add_action( 'wp_ajax_uag_license_activation', array( $this, 'license_activation' ) );
add_action( 'wp_ajax_uag_license_deactivation', array( $this, 'license_deactivation' ) );
add_filter( 'uag_react_admin_localize', array( $this, 'localize_admin_dashboard' ) );
add_filter( 'bsf_registration_page_url_spectra-pro', array( $this, 'license_registration_page_url' ) );
add_action( 'init', array( $this, 'load_bsf_core' ) );
}
/**
* Set License registration page URL.
*
* @param string $url BSF Registration page url.
* @since 1.0.0
* @return string
*/
public function license_registration_page_url( $url ) {
$url = admin_url( 'admin.php?page=spectra&path=settings&settings=license' );
return $url;
}
/**
* License Deactivation AJAX
*
* @Hooked - wp_ajax_uag_license_activation
*
* @return void
* @since 1.0.0
*/
public function license_activation() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( array( 'messsage' => self::$errors['permission'] ) );
}
if ( ! check_ajax_referer( 'uag_license_activation', 'security', false ) ) {
wp_send_json_error( array( 'messsage' => self::$errors['nonce'] ) );
}
if ( ! isset( $_POST['key'] ) ) {
wp_send_json_error( array( 'messsage' => __( 'License key not found.', 'spectra-pro' ) ) );
}
$license_key = sanitize_text_field( $_POST['key'] );
$data = array(
'privacy_consent' => true,
'terms_conditions_consent' => true,
'product_id' => $this->product_id,
'license_key' => $license_key,
);
$result = BSF_License_Manager::instance()->bsf_process_license_activation( $data );
if ( ! is_bool( $result ) && ! $result['success'] ) {
wp_send_json_error(
array(
'success' => false,
'message' => $result['message'],
)
);
}
wp_send_json_success(
array(
'success' => true,
'message' => __( 'Plugin Successfully Activated', 'spectra-pro' ),
)
);
}
/**
* License Deactivation AJAX
*
* @Hooked - wp_ajax_uag_license_deactivation
*
* @return void
* @since 1.0.0
*/
public function license_deactivation() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( array( 'messsage' => self::$errors['permission'] ) );
}
if ( ! check_ajax_referer( 'uag_license_deactivation', 'security', false ) ) {
wp_send_json_error( array( 'messsage' => self::$errors['nonce'] ) );
}
$result = BSF_License_Manager::instance()->process_license_deactivation( $this->product_id );
if ( isset( $result['success'] ) && ! $result['success'] ) {
wp_send_json_error(
array(
'success' => false,
'message' => $result['message'],
)
);
}
wp_send_json_success(
array(
'success' => true,
'message' => __( 'Plugin Successfully Deactivated', 'spectra-pro' ),
)
);
}
/**
* Set global paths for BSF Core.
*
* @Hooked - uag_react_admin_localize
*
* @return void
* @since 1.0.0
*/
public function set_global_paths() {
$bsf_core_version_file = realpath( SPECTRA_PRO_DIR . '/admin/bsf-core/version.yml' );
// Is file 'version.yml' exist?
if ( is_file( $bsf_core_version_file ) ) {
global $bsf_core_version, $bsf_core_path;
$bsf_core_dir = realpath( SPECTRA_PRO_DIR . '/admin/bsf-core/' );
$version = file_get_contents( $bsf_core_version_file ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
// Compare versions.
if ( version_compare( $version, strval( $bsf_core_version ), '>' ) ) {
$bsf_core_version = $version; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound
$bsf_core_path = $bsf_core_dir; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound
}
}
}
/**
* Load BSF Core.
*
* @return void
* @since 1.0.0
*/
public function load_bsf_core() {
/**
* Set global variables for errors.
*
* @var array {
* @type string $permission Error message if user doesn't have permission to perform an action.
* @type string $nonce Error message if nonce validation fails.
* @type string $default Default error message.
* }
*/
self::$errors = array(
'permission' => __( 'Sorry, you are not allowed to do this operation.', 'spectra-pro' ),
'nonce' => __( 'Nonce validation failed', 'spectra-pro' ),
'default' => __( 'Sorry, something went wrong.', 'spectra-pro' ),
);
global $bsf_core_path;
if ( is_file( realpath( $bsf_core_path . '/index.php' ) ) ) {
include_once realpath( $bsf_core_path . '/index.php' );
}
}
/**
* Localize inputs to the Spectra Admin Dashboard.
*
* @Hooked - uag_react_admin_localize
*
* @param array $localize Localized Filtered Variable.
* @return array $localize Updated Localize.
* @since 1.0.0
*/
public function localize_admin_dashboard( $localize ) {
$localize['license_activation_nonce'] = wp_create_nonce( 'uag_license_activation' );
$localize['license_deactivation_nonce'] = wp_create_nonce( 'uag_license_deactivation' );
$localize['license_status'] = ( new License_Handler() )->is_license_active();
$localize['bsf_graupi_nonce'] = wp_create_nonce( 'bsf_license_activation_deactivation_nonce' );
return $localize;
}
/**
* Check if the license is active.
*
* @return bool
* @since 1.0.0
*/
public function is_license_active() {
if ( ! class_exists( 'BSF_License_Manager' ) ) {
return false;
}
return BSF_License_Manager::bsf_is_active_license( $this->product_id );
}
}