Files
roi-theme/wp-content/plugins/thrive-ultimatum/thrive-dashboard/inc/ttw-account/classes/class-td-ttw-update-manager.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

455 lines
11 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden
}
class TD_TTW_Update_Manager {
use TD_Singleton;
use TD_TTW_Utils;
const NAME = 'tve_dash_ttw_account';
const SUITE_URL = 'https://thrivethemes.com/suite/';
const TTB_DOMAIN = 'thrive-theme';
/**
* @var array
*/
protected $_errors = array();
/**
* TD_TTW_Update_Manager constructor.
*/
private function __construct() {
$this->init();
}
public function init() {
$this->_includes();
$this->_actions();
}
/**
* Handler for tve_dash_ttw_account section
*/
public function tve_dash_ttw_account() {
if ( ! TD_TTW_Connection::get_instance()->is_connected() ) {
TD_TTW_Connection::get_instance()->render();
} else {
TD_TTW_User_Licenses::get_instance()->render();
}
}
/**
* Loads needed files
*/
private function _includes() {
require_once TVE_DASH_PATH . '/inc/ttw-account/classes/class-td-ttw-user-licenses.php';
require_once TVE_DASH_PATH . '/inc/ttw-account/classes/class-td-ttw-license.php';
require_once TVE_DASH_PATH . '/inc/ttw-account/classes/class-td-ttw-request.php';
require_once TVE_DASH_PATH . '/inc/ttw-account/classes/class-td-ttw-proxy-request.php';
require_once TVE_DASH_PATH . '/inc/ttw-account/classes/class-td-ttw-messages-manager.php';
}
/**
* Add needed action for ttw section
*/
private function _actions() {
add_action( 'admin_menu', array( $this, 'register_section' ), 10 );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), PHP_INT_MAX );
add_action( 'current_screen', array( $this, 'try_process_connection' ) );
add_action( 'current_screen', array( $this, 'try_set_url' ) );
add_action( 'current_screen', array( $this, 'try_logout' ) );
add_action( 'admin_init', array( $this, 'ensure_license_details' ) );
add_filter( 'auto_update_plugin', array( $this, 'auto_update_plugin' ), 10, 2 );
add_filter( 'auto_update_theme', array( $this, 'auto_update_theme' ), 10, 2 );
add_filter( 'wp_prepare_themes_for_js', array( $this, 'wp_prepare_themes_for_js' ) );
add_filter( 'site_transient_update_themes', array( $this, 'hide_theme_updates' ), 10, 2 );
}
/**
* @param stdClass $transient
*
* @return stdClass
*/
public function hide_theme_updates( $transient ) {
if ( static::is_wp_core_update_screen() && false === static::has_access_to_updates( TD_TTW_User_Licenses::TTB_TAG ) ) {
unset( $transient->response[ self::TTB_DOMAIN ] );
}
return $transient;
}
/**
* Checks if there is a membership which can_update
* or check if there is a license with $tag which can_update
*
* On false - another logic for reason message has to be applied
*
* @param string $tag
*
* @return bool
*/
public static function has_access_to_updates( $tag ) {
$is_connected = TD_TTW_Connection::get_instance()->is_connected();
/** @var TD_TTW_User_Licenses $licenses */
$licenses = TD_TTW_User_Licenses::get_instance();
$membership = $licenses->get_membership();
$has_valid_membership = $membership && true === $membership->can_update();
$ttb_license = $licenses->get_license( $tag );
$has_valid_license = $ttb_license && true === $ttb_license->can_update();
return $is_connected && ( $has_valid_membership || $has_valid_license );
}
/**
* @param array $themes
*
* @return array
*/
public function wp_prepare_themes_for_js( $themes ) {
$is_ttb_installed = isset( $themes[ self::TTB_DOMAIN ] );
$is_ttb_installed = $is_ttb_installed && is_array( $themes[ self::TTB_DOMAIN ] );
//ttb is installed and doesn't have access to updates
//then display update message - why it doesn't have access to updates
if ( true === $is_ttb_installed && false === static::has_access_to_updates( TD_TTW_User_Licenses::TTB_TAG ) ) {
$themes[ self::TTB_DOMAIN ]['hasPackage'] = 0;
$themes[ self::TTB_DOMAIN ]['update'] = $this->_get_theme_update_message( $themes[ self::TTB_DOMAIN ] );
}
return $themes;
}
/**
* @param array $data
*
* @return false|string|null
*/
private function _get_theme_update_message( $data ) {
if ( ! is_array( $data ) || empty( $data ) || ! current_user_can( 'update_themes' ) || is_multisite() ) {
return null;
}
$themes_update = get_site_transient( 'update_themes' );
if ( ! isset( $themes_update->response[ self::TTB_DOMAIN ] ) ) {
return null;
}
$themes_update = $themes_update->response[ self::TTB_DOMAIN ];
$details_url = add_query_arg(
array(
'TB_iframe' => 'true',
'width' => 1024,
'height' => 800,
),
$themes_update['url']
);
$template = 'theme/update';
$template_data = array(
'name' => $data['name'],
'version' => $themes_update['new_version'],
'details_url' => $details_url,
'recheck_url' => add_query_arg(
array(
'theme' => 'thrive-theme',
),
TD_TTW_User_Licenses::get_instance()->get_recheck_url( 'themes.php' )
),
);
$membership = static::get_membership();
/** @var TD_TTW_User_Licenses $licenses */
$licenses = TD_TTW_User_Licenses::get_instance();
$theme_license = $licenses->get_license( TD_TTW_User_Licenses::TTB_TAG );
if ( false === TD_TTW_Connection::get_instance()->is_connected() ) {
$template = 'theme/disconnected';
} elseif ( $membership && false === $membership->is_active() ) {
$template = 'theme/membership-expired';
} elseif ( $theme_license && false === $theme_license->can_update() ) {
$template = 'theme/license-expired';
} elseif ( ! $membership && ! $theme_license ) {
$template = 'theme/no-license-found';
}
$error = thrive_get_transient( 'td_ttw_connection_error' );
if ( ! empty( $error ) ) {
$template = 'error';
$template_data['error_message'] = $error;
}
return TD_TTW_Messages_Manager::render(
$template,
true,
$template_data
);
}
/**
* @return TD_TTW_License|null
*/
public static function get_membership() {
return TD_TTW_User_Licenses::get_instance()->get_membership();
}
/**
* @return bool
*/
public static function allow_membership_updates() {
/** @var TD_TTW_Connection $connection */
$connection = TD_TTW_Connection::get_instance();
if ( ! $connection->is_connected() ) {
return false;
}
/** @var TD_TTW_User_Licenses $licenses */
$licenses = TD_TTW_User_Licenses::get_instance();
return $licenses->get_membership() && $licenses->get_membership()->can_update();
}
/**
* Handle auto update plugin action
*
* @param bool $update
* @param object $item
*
* @return bool
*/
public function auto_update_plugin( $update, $item ) {
$doing_cron = apply_filters( 'wp_doing_cron', defined( 'DOING_CRON' ) && DOING_CRON );
$auto_update = doing_action( 'wp_maybe_auto_update' );
if ( ( ! $doing_cron && ! $auto_update ) || ! isset( $item->plugin ) ) {
return $update;
}
$file = wp_normalize_path( WP_PLUGIN_DIR . '/' . $item->plugin );
if ( ! is_file( $file ) ) {
return $update;
}
$plugin_data = get_plugin_data( $file );
if ( isset( $plugin_data['PluginURI'] ) && false !== strpos( $plugin_data['PluginURI'], 'thrivethemes.com' ) && ! self::allow_membership_updates() ) {
/* stop auto update only if the user doesn't have membership updates */
$update = false;
}
return $update;
}
/**
* Handle auto update theme action
*
* @param bool $update
* @param stdClass $item
*
* @return bool
*/
public function auto_update_theme( $update, $item ) {
$doing_cron = apply_filters( 'wp_doing_cron', defined( 'DOING_CRON' ) && DOING_CRON );
$auto_update = doing_action( 'wp_maybe_auto_update' );
$stop = ! $update || ( ! $doing_cron && ! $auto_update );
if ( ! $stop && isset( $item->theme ) && self::TTB_DOMAIN === $item->theme && ! self::allow_membership_updates() ) {
/* stop auto update if the user doesn't have membership updates */
$update = false;
}
return $update;
}
/**
* Ensure license details
*/
public function ensure_license_details() {
/** @var $connection TD_TTW_Connection */
$connection = TD_TTW_Connection::get_instance();
/** @var $licenses TD_TTW_User_Licenses */
$licenses = TD_TTW_User_Licenses::get_instance();
if ( $connection->is_connected() && empty( $licenses->get() ) ) {
$licenses->get_licenses_details();
}
}
/**
* Check if current screen is wp bulk updates screen
*
* @return bool
*/
public static function is_wp_core_update_screen() {
global $current_screen;
return isset( $current_screen->id ) && 'update-core' === $current_screen->id;
}
/**
* Check if the updates should be available in WP Updates screen
*
* @return bool
*/
public static function can_see_updates() {
return false === static::is_wp_core_update_screen();
}
/**
* Register ttw section
*/
public function register_section() {
if ( empty( $_REQUEST['page'] ) || self::NAME !== $_REQUEST['page'] ) {
return;
}
add_submenu_page(
'',
'',
'',
'manage_options',
self::NAME,
array( $this, 'tve_dash_ttw_account' )
);
}
/**
* Process ttw connection
*/
public function try_process_connection() {
if ( ! $this->is_known_page() ) {
return;
}
/** @var $connection TD_TTW_Connection */
$connection = TD_TTW_Connection::get_instance();
if ( ! empty( $_REQUEST['td_token'] ) ) {
$processed = $connection->process_request();
if ( true === $processed ) {
/** @var $licenses TD_TTW_User_Licenses */
$licenses = TD_TTW_User_Licenses::get_instance();
$licenses->get_licenses_details(); //get licenses details
if ( $licenses->has_membership() && $licenses->is_membership_active() ) {
$connection->push_message( 'Your account has been successfully connected.', 'success' );
}
wp_redirect( $this->get_admin_url() );
die();
}
}
}
/**
* Log out ttw account
*/
public function try_logout() {
if ( ! $this->is_known_page() ) {
return;
}
if ( ! empty( $_REQUEST['td_disconnect'] ) ) {
/** @var TD_TTW_Connection $connection */
$connection = TD_TTW_Connection::get_instance();
$params = array(
'website' => get_site_url(),
);
$request = new TD_TTW_Request( '/api/v1/public/disconnect/' . $connection->ttw_id, $params );
$request->set_header( 'Authorization', $connection->ttw_salt );
$proxy_request = new TD_TTW_Proxy_Request( $request );
$proxy_request->execute( '/tpm/proxy' );
$connection->disconnect();
wp_redirect( admin_url( 'admin.php?page=' . TD_TTW_Update_Manager::NAME ) );
die;
}
}
public function try_set_url() {
if ( ! current_user_can( 'manage_options' ) || ! TD_TTW_Connection::is_debug_mode() || ! $this->is_known_page() ) {
return;
}
if ( ! empty( $_REQUEST['url'] ) && ! empty( $_REQUEST['td_action'] ) && sanitize_text_field( $_REQUEST['td_action'] ) === 'set_url' ) {
update_option( 'tpm_ttw_url', sanitize_url( $_REQUEST['url'] ) );
wp_redirect( $this->get_admin_url() );
die;
}
}
/**
* @return string|void
*/
public function get_admin_url() {
return admin_url( 'admin.php?page=' . self::NAME );
}
/**
* Enqueue scripts
*/
public function enqueue_scripts() {
if ( ! $this->is_known_page() ) {
return;
}
wp_enqueue_style( 'td-ttw-style', $this->url( 'css/admin.css' ), array(), uniqid() );
}
/**
* Check if the screen is ttw account screen
*
* @return bool
*/
public function is_known_page() {
return isset( $_REQUEST['page'] ) && self::NAME === $_REQUEST['page'];
}
}
TD_TTW_Update_Manager::get_instance();