38217-vm/wp-content/plugins/mainwp/class/class-mainwp-api-manager-plugin-update.php
2026-02-05 17:08:59 +03:00

212 lines
6.1 KiB
PHP

<?php
/**
* MainWP API Manager Update Handler
*
* This class handles updates for MainWP Extension.
*
* @package MainWP API Manager/Update Handler
*/
namespace MainWP\Dashboard;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class MainWP_Api_Manager_Plugin_Update
*
* MainWP API Manager Update Handler.
*
* @package MainWP API Manager/Update Handler
* @author Todd Lahman LLC
* @copyright Copyright (c) Todd Lahman LLC
* @since 1.0.0
*/
class MainWP_Api_Manager_Plugin_Update { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
/**
* Protected static variable to hold the instance.
*
* @var null Default value.
*/
protected static $instance = null;
/**
* Method instance()
*
* @static
* @return class instance
*/
public static function instance() {
if ( is_null( static::$instance ) ) {
static::$instance = new self();
}
return static::$instance;
}
/**
* MainWP_Api_Manager_Plugin_Update constructor.
*
* Run each time the class is called.
*/
public function __construct() {
// API data.
}
/**
* Create upgrade request API URL.
*
* @param array $args Request arguments.
*
* @return string Build URL.
*
* @uses \MainWP\Dashboard\MainWP_Api_Manager::get_upgrade_url()
*/
private function create_upgrade_api_url( $args ) {
$upgrade_url = esc_url_raw( add_query_arg( 'mainwp-api', 'am-software-api', MainWP_Api_Manager::instance()->get_upgrade_url() ) );
$query_url = '';
foreach ( $args as $key => $value ) {
$query_url .= $key . '=' . rawurlencode( $value ) . '&';
}
$query_url = rtrim( $query_url, '&' );
return $upgrade_url . '&' . $query_url;
}
/**
* Returns plugin information in an array.
*
* @param array $plugin Plugin to check.
*
* @return array Plugin information.
*/
public function update_check( $plugin ) {
$args = array(
'request' => 'pluginupdatecheck',
'plugin_name' => $plugin['plugin_name'],
'version' => $plugin['software_version'],
'product_id' => $plugin['product_id'],
'api_key' => $plugin['api_key'],
'instance' => $plugin['instance'],
'software_version' => $plugin['software_version'],
'extra' => isset( $plugin['extra'] ) ? $plugin['extra'] : '',
);
// Check for a plugin update.
return $this->plugin_information( $args ); // pluginupdatecheck.
}
/**
* Check if bulkupdateapi is true|false & grab domain name adn extensions list.
*
* @param array $plugins List of plugins (extensions).
*
* @return array Plugin Information & bulkupdatecheck.
*/
public function bulk_update_check( $plugins ) {
$args = array(
'request' => 'bulkupdatecheck',
'extensions' => base64_encode( wp_json_encode( $plugins ) ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode used for http encoding compatible.
'json' => true,
);
$mainwp_api_key = MainWP_Api_Manager_Key::instance()->get_decrypt_master_api_key();
if ( ! empty( $mainwp_api_key ) ) {
$args['api_key'] = $mainwp_api_key;
}
return $this->plugin_information( $args, true ); // bulkupdatecheck.
}
/**
* Check $args, if there is a response, an object exists & response is not false.
*
* @param array $args Request arguments.
*
* @return array|false $response Plugin information.
*/
public function request( $args ) {
$args['request'] = 'plugininformation';
$response = $this->plugin_information( $args ); // plugininformation.
// If everything is okay return the response.
if ( isset( $response ) && is_object( $response ) && false !== $response ) {
return $response;
}
return false;
}
/**
* Sends and receives data to and from the server API.
*
* @access public
*
* @param array $args Request arguments.
* @param bool $bulk_check Check if updating in bulk true|false.
*
* @return array|false Plugin information.
* @since 1.0.0
*
* @uses \MainWP\Dashboard\MainWP_System_Utility::maybe_unserialyze()
*/
public function plugin_information( $args, $bulk_check = false ) {
$args['object'] = MainWP_Api_Manager::instance()->get_domain();
$target_url = $this->create_upgrade_api_url( $args );
$default = array(
'timeout' => 150,
'sslverify' => 1,
);
$params = apply_filters( 'mainwp_plugin_information_sslverify', $default, $args );
$request = wp_remote_get(
$target_url,
$params
);
if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) !== 200 ) {
return false;
}
$response = wp_remote_retrieve_body( $request );
if ( isset( $args['json'] ) ) { // bulkupdatecheck: json.
$response = json_decode( $response, true );
} else { // pluginupdatecheck, plugininformation : serialize.
$response = unserialize( $response ); // phpcs:ignore -- data from extensions, to compatible.
}
/**
* For debugging errors from the API
* For errors like: unserialize(): Error at offset 0 of 170 bytes
* Comment out $response above first
*/
if ( ! $bulk_check ) {
if ( is_object( $response ) ) {
if ( isset( $response->package ) ) {
$response->package = apply_filters( 'mainwp_api_manager_upgrade_package_url', $response->package, $response );
}
return $response;
}
} elseif ( is_array( $response ) ) {
return $response;
}
return false;
}
}
// End of class.