Files
roi-theme/wp-content/plugins/wp-marketing-automations/woofunnels/includes/class-woofunnels-license-controller.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

244 lines
7.3 KiB
PHP
Executable File

<?php
if ( ! class_exists( 'WooFunnels_License_Controller' ) ) {
#[AllowDynamicProperties]
class WooFunnels_License_Controller {
/**
* @var WooFunnels_License_check[]
*/
public static $plugins = [];
/**
* @var WP_Http
*/
public static $http;
private static $server_point = 'https://license.funnelkit.com/';
private static $software_end_point = '';
private static $request_args = array(
'timeout' => 30,
'sslverify' => false,
);
private static $plugin_update_check_data;
private static $cached_site_url = null;
private $license_data = array();
private $request_body = false;
public static function register_plugin( $hash, $object ) {
if ( ! isset( self::$plugins[ $hash ] ) ) {
self::$plugins[ $hash ] = $object;
}
}
public static function get_all_plugins() {
return self::$plugins;
}
/**
* Get cached site URL to avoid duplicate database calls
* @return string|null
*/
private static function get_cached_site_url() {
if ( self::$cached_site_url === null ) {
global $wpdb;
self::$cached_site_url = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s", 'siteurl' ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
return self::$cached_site_url;
}
/**
* Run a batch request to check license status of all the plugin
* Then trigger handle license check response of child class so that they can process their data.
*/
public static function license_check() {
$parse_data = [];
$parse_data['plugins'] = [];
$plugins_to_send = [];
foreach ( self::$plugins as $hash => $plugin ) {
$data = $plugin->get_data();
if ( empty( $data['plugin_slug'] ) ) {
continue;
}
$parse_url = wp_parse_url( $data['domain'] );
/**
* prevent license check when domain is IP, it will help reducing domain mismatches
*/
if ( is_array( $parse_url ) && ! empty( $parse_url['host'] ) && ! empty( ip2long( $parse_url['host'] ) ) ) {
continue;
}
if ( ! empty( $data['domain'] ) ) {
$cached_site_url = self::get_cached_site_url();
if ( ! empty( $cached_site_url ) && $cached_site_url !== $data['domain'] ) {
$data['db_domain'] = rtrim( $cached_site_url, '/' );
}
}
$parse_data['plugins'][ $hash ] = $plugins_to_send[ $hash ] = $data;
}
$request = 'status_request_all';
$output = self::build_output( self::http()->post( self::get_software_endpoint( $request ), array_merge( [ 'body' => $parse_data ], self::$request_args ) ) );
if ( $output && is_array( $output ) && count( $output ) > 0 ) {
foreach ( $output as $hash => $output_plugin ) {
if ( isset( $plugins_to_send[ $hash ] ) ) {
self::$plugins[ $hash ]->handle_license_check_response( $output_plugin );
}
}
}
WooFunnels_Process::get_instance()->maybe_clear_plugin_update_transients();
}
private static function build_output( $response, $is_searilize = false ) {
if ( ! is_wp_error( $response ) ) {
$body = $response['body'];
if ( '' !== $body ) {
if ( false === $is_searilize ) {
$body = json_decode( $body, true );
if ( $body ) {
return $body;
}
} else {
$object = maybe_unserialize( $body );
if ( is_object( $object ) && count( get_object_vars( $object ) ) > 0 ) {
return $object;
}
return false;
}
}
}
return false;
}
public static function http() {
if ( is_null( self::$http ) ) {
self::$http = new WP_Http();
}
return self::$http;
}
public static function get_software_endpoint( $request = '' ) {
return add_query_arg( array(
'wc-api' => 'am-software-api',
'request' => $request,
), self::$server_point );
}
public static function get_plugin_update_check( $hash ) {
$get_data = self::license_update_check();
if ( ! isset( $get_data[ $hash ] ) ) {
return false;
}
return $get_data[ $hash ];
}
public static function license_update_check() {
if ( ! is_null( self::$plugin_update_check_data ) ) {
return self::$plugin_update_check_data;
}
$parse_data = [];
$parse_data['plugins'] = [];
$plugins_to_send = [];
$prepare_dummy = [];
foreach ( self::$plugins as $hash => $plugin ) {
$data = $plugin->get_data();
if ( empty( $data['plugin_slug'] ) ) {
continue;
}
if ( ! empty( $data['domain'] ) ) {
$cached_site_url = self::get_cached_site_url();
if ( ! empty( $cached_site_url ) && $cached_site_url !== $data['domain'] ) {
$data['db_domain'] = rtrim( $cached_site_url, '/' );
}
}
$parse_data['plugins'][ $hash ] = $plugins_to_send[ $hash ] = $data;
$prepare_dummy[ $hash ] = [];
}
$request = 'pluginupdatecheckall';
$output = self::build_output( self::http()->post( self::get_update_endpoint( $request ), array_merge( [ 'body' => $parse_data ], self::$request_args ) ) );
if ( $output ) {
self::$plugin_update_check_data = $output;
} else {
$output = $prepare_dummy;
self::$plugin_update_check_data = $output;
}
return $output;
}
public static function get_update_endpoint( $request = '' ) {
return add_query_arg( array(
'wc-api' => 'upgrade-api',
'request' => $request,
), self::$server_point );
}
public static function get_plugins() {
if ( is_multisite() ) {
$plugin_config = WooFunnel_Loader::get_the_latest();
$active_plugins = get_site_option( 'active_sitewide_plugins', array() );
if ( is_array( $active_plugins ) && is_array( $plugin_config ) && count( $plugin_config ) > 0 && ( in_array( $plugin_config['basename'], apply_filters( 'active_plugins', $active_plugins ), true ) || array_key_exists( $plugin_config['basename'], apply_filters( 'active_plugins', $active_plugins ) ) ) ) {
return get_blog_option( get_network()->site_id, 'woofunnels_plugins_info', [] );
} else {
return is_array( get_option( 'woofunnels_plugins_info', [] ) ) ? get_option( 'woofunnels_plugins_info', [] ) : [];
}
}
return is_array( get_option( 'woofunnels_plugins_info', [] ) ) ? get_option( 'woofunnels_plugins_info', [] ) : [];
}
public static function update_plugins( $data ) {
update_option( 'woofunnels_plugins_info', $data, 'yes' );
}
public static function get_basename_by_key( $hash ) {
if ( ! isset( self::$plugins[ $hash ] ) ) {
return __return_empty_string();
}
$data = self::$plugins[ $hash ]->get_data();
return $data['plugin_slug'];
}
/**
* Callback method to run license check manually
* @return void
*/
public static function license_check_api_call_init() {
try {
$check_transient = get_transient( 'fk_license_check_api_call_init' );
if ( ! empty( $check_transient ) ) {
wp_send_json( array( 'status' => 'failure', 'message' => 'lock exists' ) );
}
self::license_check();
set_transient( 'fk_license_check_api_call_init', 1, HOUR_IN_SECONDS );
$plugins = self::get_all_plugins();
wp_send_json( array( 'status' => 'success', 'message' => 'License check initiated', 'is_pro' => count( $plugins ) > 0 ? true : false ) );
} catch ( Exception|Error $e ) {
wp_send_json( array( 'status' => 'failure', 'message' => $e->getMessage() ) );
}
}
}
}