Files
roi-theme/wp-content/plugins/thrive-product-manager/inc/classes/class-tpm-product-skin.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

285 lines
6.1 KiB
PHP
Executable File

<?php
/**
* Class TPM_Product_Skin
* Beside Plugins and Themes TPM offers Thrive Theme Builder Skins
* Which are handled by this class and are known as TTB Themes
*/
class TPM_Product_Skin extends TPM_Product_Theme {
/**
* The default skin which will be installed together with the theme
* This is also used in TTB
*/
const DEFAULT_TAG = 'q1qj01';
/**
* @var WP_Term
*/
protected $ttb_skin;
/**
* @var [WP_Term]
*/
protected $ttb_downloaded_skins = array();
/**
* @return array
*/
public function to_array() {
$data = parent::to_array();
$data['type'] = 'skin';
return $data;
}
/**
* Download and install the current skin
* - TTB API is used which TTB is required to be installed and activated
*
* @param array $credentials
*
* @return bool|WP_Error
* @see activate()
*
*/
public function install( $credentials ) {
/* Before installing the skin we need to make sure the theme code is available */
$this->include_thrive_theme();
$response = $this->_install_ttb_skin( $this->api_slug );
if ( true === $response instanceof WP_Term ) {
$this->ttb_skin = $response;
}
return $response;
}
/**
* Include TTB & TAR code in order to be able to do the skin install without the theme being active
* Hope this behaves well in the wild :)
*/
public function include_thrive_theme() {
global $thrive_theme;
if ( false === empty( $thrive_theme ) ) {
return;
}
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
/**
* We are changing this constant because in the theme we are using get_template_directory() - which is based on the active theme
* And in this case the theme is not active
*/
defined( 'THEME_PATH' ) || define( 'THEME_PATH', get_theme_root() . '/thrive-theme' );
defined( 'TVE_TCB_ROOT_PATH ' ) || define( 'TVE_TCB_ROOT_PATH ', get_theme_root() . '/thrive-theme/architect/' );
if ( ! defined( 'TVE_TCB_CORE_INCLUDED' ) ) {
include_once THEME_PATH . '/architect/plugin-core.php';
}
if ( false === defined( 'TVE_DASH_VERSION' ) ) {
define( 'TVE_DASH_PATH', THEME_PATH . '/thrive-dashboard' );
require_once TVE_DASH_PATH . '/thrive-dashboard.php';
}
require_once THEME_PATH . '/inc/constants.php';
require_once THEME_PATH . '/inc/classes/class-thrive-theme.php';
$thrive_theme = new Thrive_Theme();
$thrive_theme->init();
}
/**
* Uses TTB to activate current skin
*
* @return bool|WP_Error
*/
public function activate() {
if ( $this->is_activated() ) {
return true;
}
$skin = $this->_get_ttb_skin();
if ( false === $skin instanceof WP_Term ) {
return new WP_Error( 400, sprintf( __( 'Could not activate skin: %s', Thrive_Product_Manager::T ), $this->name ) );
}
$skin_id = $skin->term_id;
Thrive_Skin_Taxonomy::set_skin_active( $skin_id );
/* We need to make sure that the instance is the one with the active skin before we generate the css file */
thrive_skin( $skin_id )->generate_style_file();
return true;
}
/**
* The skin is installed if the theme is installed
*
* @return bool
*/
public function is_installed() {
$theme = wp_get_theme( 'thrive-theme' );
return ! is_wp_error( $theme->errors() );
}
/**
* Check if the skin exists
*
* @return bool
*/
public function exists() {
$installed = false;
$skins = $this->_get_all_downloaded_skins();
foreach ( $skins as $skin ) {
if ( ! empty( $skin->tag ) && $skin->tag === $this->api_slug ) {
$installed = true;
break;
}
}
return $installed;
}
/**
* @return WP_Term[]
*/
protected function _get_all_downloaded_skins() {
if ( false === class_exists( 'Thrive_Skin_Taxonomy', false ) ) {
return $this->ttb_downloaded_skins;
}
if ( empty( $this->ttb_downloaded_skins ) ) {
$this->ttb_downloaded_skins = Thrive_Skin_Taxonomy::get_all();
}
return $this->ttb_downloaded_skins;
}
/**
* Gets the current Thrive_Skin instance
* - instance exists if the current flow is install one
*
* @return WP_Term|null
*/
protected function _get_ttb_skin() {
if ( false === $this->ttb_skin instanceof WP_Term ) {
return null;
}
return $this->ttb_skin;
}
/**
* Uses TTB API to install a skin
*
* @param $skin_id
*
* @return WP_Term|WP_Error on error
*/
protected function _install_ttb_skin( $skin_id ) {
if ( false === class_exists( 'Thrive_Theme_Cloud_Api_Factory', false ) ) {
return new WP_Error( 400, sprintf( __( 'Could not install Theme: %s', Thrive_Product_Manager::T ), $this->name ) );
}
try {
/**
* Try to create some default data for TTB cos it ain't created on try_install_activate request for TTB
*/
if ( class_exists( 'Thrive_Theme_Default_Data', false ) ) {
Thrive_Theme_Default_Data::create_default();
}
$zip = Thrive_Theme_Cloud_Api_Factory::build( 'skins' )->download_item( $skin_id, null );
$import = new Thrive_Transfer_Import( $zip );
$response = $import->import( 'skin' );
} catch ( Exception $e ) {
$response = new WP_Error( 400, $e->getMessage() );
}
return $response;
}
/**
* Checks if current skin is active for TTB
*
* @return bool
*/
public function is_activated() {
$skin_activated = false;
if ( class_exists( 'Thrive_Skin', false ) ) {
$current_skin = new Thrive_Skin( 0 ); //current active skin in TTB
$skin_activated = $current_skin->get_tag() === $this->api_slug;
}
return $skin_activated;
}
public function get_status() {
if ( ! empty( $this->status ) ) {
return $this->status;
}
if ( ! $this->is_purchased() ) {
$this->status = self::AVAILABLE;
return $this->status;
}
if ( ! $this->is_licensed() ) {
$this->status = self::TO_LICENSE;
return $this->status;
}
if ( ! $this->is_installed() ) {
$this->status = self::TO_INSTALL;
return $this->status;
}
if ( ! $this->is_activated() ) {
$this->status = self::TO_ACTIVATE;
return $this->status;
}
$this->status = self::READY;
return $this->status;
}
/**
* When installing the skin, change the response data
*
* @param array $data
*
* @return array|mixed
*/
public function before_response( $data ) {
return $this->get_response_status( 'installed' );
}
}