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

153 lines
3.2 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-product-manager
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
class TPM_Product_Plugin extends TPM_Product {
/**
* Checks if product is installed/downloaded in WP_PLUGIN_DIR
*
* @return bool
*/
public function is_installed() {
if ( empty( $this->file ) ) {
return false;
}
$path = rtrim( WP_PLUGIN_DIR, '/' ) . '/' . trim( $this->file, '/' );
return file_exists( $path );
}
/**
* Returns array of its properties
*
* @return array
*/
public function to_array() {
$data = parent::to_array();
$data['type'] = 'plugin';
return $data;
}
protected function _get_download_url() {
$result = $this->_prepare_download_url();
if ( is_wp_error( $result ) ) {
return $this->_prepare_download_url( true );
}
return $result;
}
/**
* This method will prepare the download URL when someone tries to download any of the Thrive Themes products from TPM.
*
* @param boolean $with_ssl_verify
* @return void
*/
private function _prepare_download_url( $with_ssl_verify = false ) {
$options = [
'timeout' => 20, //seconds
'sslverify' => $with_ssl_verify,
'headers' => [
'Accept' => 'application/json',
],
];
/**
* prepare the POST parameters
*/
$options['body'] = [
'api_slug' => $this->api_slug,
];
$url = add_query_arg( [ 'p' => $this->_get_hash( $options['body'] ) ], 'https://service-api.thrivethemes.com/plugin/update' );
$result = wp_remote_post( $url, $options );
if ( ! is_wp_error( $result ) ) {
$info = json_decode( wp_remote_retrieve_body( $result ), true );
if ( ! empty( $info ) ) {
return $info['download_url'];
}
}
return new WP_Error( '400', wp_remote_retrieve_body( $result ) );
}
/**
* @param $credentials array
*
* @return bool|WP_Error
*/
public function install( $credentials ) {
if ( $this->is_installed() ) {
return true;
}
add_filter( 'upgrader_package_options', array( $this, 'upgrader_package_options' ) );
include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
$url = $this->_get_download_url();
if ( is_wp_error( $url ) ) {
$error = "Couldn't get download URL for " . $this->name;
TPM_Log_Manager::get_instance()->set_message( $error )->log();
return new WP_Error( 'download_url', $error );
}
/** @var $wp_filesystem WP_Filesystem_Base */
global $wp_filesystem;
$connected = WP_Filesystem( $credentials );
if ( $connected === false ) {
return $wp_filesystem->errors;
}
require_once __DIR__ . '/class-tpm-plugin-installer-skin.php';
$installer = new Plugin_Upgrader( new TPM_Plugin_Installer_Skin( $credentials ) );
$result = $installer->install( $url );
remove_filter( 'upgrader_package_options', array( $this, 'upgrader_package_options' ) );
return $result;
}
public function upgrader_package_options( $options ) {
$options['clear_destination'] = true;
return $options;
}
public function is_activated() {
return is_plugin_active( $this->file );
}
public function activate() {
if ( $this->is_activated() ) {
return true;
}
return activate_plugin( $this->file );
}
}