ldc-sbv/wp-content/plugins/masterslider/admin/includes/classes/class-axiom-plugin-check-update.php
2021-09-21 15:01:08 +02:00

235 lines
7 KiB
PHP

<?php
/**
*
* @package MasterSlider
* @author averta [averta.net]
* @license LICENSE.txt
* @link http://masterslider.com
* @copyright Copyright © 2014 averta
*/
// no direct access allowed
if ( ! defined('ABSPATH') ) {
die();
}
class Axiom_Plugin_Check_Update {
/**
* The plugin current version
* @var string
*/
public $current_version;
/**
* The plugin remote update path
* @var string
*/
public $update_path;
/**
* Plugin Slug (plugin_directory/plugin_file.php)
* @var string
*/
public $plugin_slug;
/**
* Plugin name (plugin_file)
* @var string
*/
public $slug;
/**
* The item name while requesting to update api
* @var string
*/
public $request_name;
/**
* The item ID in marketplace
* @var string
*/
public $plugin_id;
/**
* The item name while requesting to update api
* @var string
*/
public $plugin_file_path;
/**
* The item name while requesting to update api
* @var string
*/
public $banners;
/**
* Initialize a new instance of the WordPress Auto-Update class
* @param string $current_version
* @param string $update_path
* @param string $plugin_slug
* @param string $slug
*/
function __construct( $current_version, $update_path, $plugin_slug, $slug, $item_request_name = '' ) {
// Set the class public variables
$this->current_version = $current_version;
$this->update_path = $update_path;
$this->plugin_slug = $plugin_slug;
$this->slug = $slug;
$this->request_name = empty( $item_request_name ) ? $this->slug : $item_request_name;
// define the alternative API for checking for updates
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update') );
// Define the alternative response for information checking
add_filter( 'plugins_api', array( $this, 'check_info'), 10, 3 );
}
/**
* Add our self-hosted autoupdate plugin to the filter transient
*
* @param $transient
* @return object $ transient
*/
public function check_update( $transient ) {
if( apply_filters( 'masterslider_disable_auto_update', 0 ) )
return $transient;
// Get the remote version
$remote_version = $this->get_remote_version();
// If a newer version is available, add the update info to update transient
if ( version_compare( $this->current_version, $remote_version, '<' ) ) {
$obj = new stdClass();
$obj->slug = $this->slug;
$obj->plugin = $this->plugin_slug;
$obj->new_version = $remote_version;
$obj->url = '';
$obj->package = '';
$transient->response[ $this->plugin_slug ] = $obj;
} elseif ( isset( $transient->response[ $this->plugin_slug ] ) ) {
unset( $transient->response[ $this->plugin_slug ] );
}
return $transient;
}
/**
* Return the remote version
* @return string $remote_version
*/
public function get_remote_version() {
global $wp_version;
$theme_data = wp_get_theme();
if( is_child_theme() ) {
$theme_data = wp_get_theme( $theme_data->template );
}
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$all_plugins = get_plugins();
if( ! isset( $all_plugins[ $this->plugin_slug ] ) || empty( $all_plugins[ $this->plugin_slug ] ) ){
return;
}
$this_plugin = $all_plugins[ $this->plugin_slug ];
if( ! is_array( $this_plugin ) ){
$this_plugin = array();
}
$this_plugin['ID'] = $this->plugin_id;
$this_plugin['Theme'] = $theme_data->Name;
$this_plugin['Slug'] = $this->slug;
$this_plugin['Activated'] = get_option( $this->slug . '_is_license_actived', 0);
$request = wp_remote_post( $this->update_path, array(
'user-agent' => 'WordPress/'.$wp_version.'; '. get_site_url(),
'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3),
'body' => array(
'cat' => 'version-check',
'action' => 'final',
'type' => 'plugin',
'item-name' => $this->request_name,
'item-info' => $this_plugin
)
)
);
if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) {
return $request['body'];
}
return false;
}
/**
* Add our self-hosted description to the filter
*
* @param boolean $false
* @param array $action
* @param object $arg
* @return bool|object
*/
public function check_info( $false, $action, $arg ) {
if( apply_filters( 'masterslider_disable_auto_update', 0 ) )
return $false;
if( ! isset( $arg->slug ) )
return $false;
if ( $arg->slug === $this->slug ) {
$information = $this->get_remote_information();
return apply_filters( 'axiom_pre_insert_plugin_info' . $this->slug , $information );
}
return $false;
}
/**
* Get information about the remote version
* @return bool|object
*/
public function get_remote_information() {
global $wp_version;
$request = wp_remote_post( $this->update_path, array(
'user-agent' => 'WordPress/'.$wp_version.'; '. get_site_url(),
'body' => array(
'cat' => 'info',
'action' => 'details',
'item-name' => $this->request_name
)
)
);
if ( !is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
$all_plugins = get_plugins();
if( ! isset( $all_plugins[ $this->plugin_slug ] ) || empty( $all_plugins[ $this->plugin_slug ] ) ){
return;
}
$plugin_info_data = $all_plugins[ $this->plugin_slug ];
$info = maybe_unserialize( $request['body'] );
$info->slug = $this->slug;
$info->plugin_name = isset( $plugin_info_data['Name'] ) ? $plugin_info_data['Name'] : '';
$info->author = isset( $plugin_info_data['Author'] ) ? $plugin_info_data['Author'] : '';
$info->homepage = isset( $plugin_info_data['PluginURI'] ) ? $plugin_info_data['PluginURI'] : '';
$info->banners['low'] = isset( $this->banners['low'] ) ? $this->banners['low'] : '';
$info->banners['high'] = isset( $this->banners['high'] ) ? $this->banners['high'] : '';
return $info;
}
return false;
}
}