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

339 lines
12 KiB
PHP

<?php
/**
* MainWP Premium Update
*
* MainWP Premium Update functions.
*
* @package MainWP/Dashboard
*/
namespace MainWP\Dashboard;
// phpcs:disable WordPress.DB.RestrictedFunctions, WordPress.WP.AlternativeFunctions, WordPress.PHP.NoSilencedErrors -- Using cURL functions.
/**
* Class MainWP_Premium_Update
*
* @package MainWP\Dashboard
*
* Check for premium plugin updates.
*/
class MainWP_Premium_Update { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
/**
* Method get_class_name()
*
* Get Class Name.
*
* @return object
*/
public static function get_class_name() {
return __CLASS__;
}
/**
* Method check_premium_updates()
*
* Check for Premium Plugin updates.
*
* @param array $updates Array of updates.
* @param mixed $type Type of update.
*
* @return boolean true|false.
*/
public static function check_premium_updates( $updates, $type ) { // phpcs:ignore -- NOSONAR - complex.
if ( ! is_array( $updates ) || empty( $updates ) ) {
return false;
}
if ( 'plugin' === $type ) {
$premiums = array(
'ithemes-security-pro/ithemes-security-pro.php',
'monarch/monarch.php',
'cornerstone/cornerstone.php',
'updraftplus/updraftplus.php',
'wp-all-import-pro/wp-all-import-pro.php',
'bbq-pro/bbq-pro.php',
'seedprod-coming-soon-pro-5/seedprod-coming-soon-pro-5.php',
'oxygen/functions.php',
'elementor-pro/elementor-pro.php',
'bbpowerpack/bb-powerpack.php',
'bb-ultimate-addon/bb-ultimate-addon.php',
'webarx/webarx.php',
'leco-client-portal/leco-client-portal.php',
'elementor-extras/elementor-extras.php',
'wp-schema-pro/wp-schema-pro.php',
'convertpro/convertpro.php',
'astra-addon/astra-addon.php',
'astra-portfolio/astra-portfolio.php',
'astra-pro-sites/astra-pro-sites.php',
'custom-facebook-feed-pro/custom-facebook-feed.php',
'convertpro/convertpro.php',
'convertpro-addon/convertpro-addon.php',
'wp-schema-pro/wp-schema-pro.php',
'ultimate-elementor/ultimate-elementor.php',
'gp-premium/gp-premium.php',
'flying-press/flying-press.php',
'wp-rocket/wp-rocket.php',
'fluentformpro/fluentformpro.php',
'fluentform-signature/fluentform-signature.php',
'fluentcampaign-pro/fluentcampaign-pro.php',
'fluent-support-pro/fluent-support-pro.php',
'ninja-tables-pro/ninja-tables-pro.php',
'fluent-booking-pro/fluent-booking-pro.php',
'wp-social-ninja-pro/wp-social-ninja-pro.php',
'wp-payment-form-pro/wp-payment-form-pro.php',
);
/**
* Filter: mainwp_detect_premiums_updates
*
* Use mainwp_detect_premium_plugins_update instead.
*
* @deprecated
*/
$premiums = apply_filters( 'mainwp_detect_premiums_updates', $premiums );
/**
* Filter: mainwp_detect_premium_plugins_update
*
* Filters supported premium plugins to fix compatiblity issues with detecting premium plugin updates.
*
* @since Unknown
*/
$premiums = apply_filters( 'mainwp_detect_premium_plugins_update', $premiums );
if ( is_array( $premiums ) && ! empty( $premiums ) ) {
foreach ( $updates as $info ) {
if ( isset( $info['slug'] ) && ( in_array( $info['slug'], $premiums ) || false !== strpos( $info['slug'], 'yith-' ) ) ) {
return true;
}
}
}
} elseif ( 'theme' === $type ) {
$premiums = array();
/**
* Filter: mainwp_detect_premium_themes_update
*
* Filters supported premium themes to fix compatiblity issues with detecting premium theme updates.
*
* @since Unknown
*/
$premiums = apply_filters( 'mainwp_detect_premium_themes_update', $premiums );
if ( is_array( $premiums ) && ! empty( $premiums ) ) {
foreach ( $updates as $info ) {
if ( isset( $info['slug'] ) && in_array( $info['slug'], $premiums ) ) {
return true;
}
}
}
}
return false;
}
/**
* Method maybe_request_premium_updates()
*
* @param mixed $website Child Site info.
* @param mixed $what stats|upgradeplugintheme What function to perform.
* @param mixed $params plugin|theme Update Type.
*
* @return mixed $request_update
*/
public static function maybe_request_premium_updates( $website, $what, $params ) { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated.
$request_update = false;
if ( 'stats' === $what || ( 'upgradeplugintheme' === $what && isset( $params['type'] ) ) ) {
$update_type = '';
$check_premi_plugins = array();
$check_premi_themes = array();
if ( 'stats' === $what ) {
if ( '' !== $website->plugins ) {
$check_premi_plugins = json_decode( $website->plugins, 1 );
}
if ( '' !== $website->themes ) {
$check_premi_themes = json_decode( $website->themes, 1 );
}
} elseif ( 'upgradeplugintheme' === $what ) {
$update_type = ( isset( $params['type'] ) ) ? $params['type'] : '';
if ( 'plugin' === $update_type ) {
if ( '' !== $website->plugins ) {
$check_premi_plugins = json_decode( $website->plugins, 1 );
}
} elseif ( 'theme' === $update_type ) {
if ( '' !== $website->themes ) {
$check_premi_themes = json_decode( $website->themes, 1 );
}
}
}
if ( static::check_premium_updates( $check_premi_plugins, 'plugin' ) ) {
static::try_to_detect_premiums_update( $website, 'plugin' );
}
if ( static::check_premium_updates( $check_premi_themes, 'theme' ) ) {
static::try_to_detect_premiums_update( $website, 'theme' );
}
if ( 'upgradeplugintheme' === $what && ( 'plugin' === $update_type || 'theme' === $update_type ) && static::check_request_update_premium( $params['list'], $update_type ) ) {
static::request_premiums_update( $website, $update_type, $params['list'] );
$request_update = true;
}
}
return $request_update;
}
/**
* Method check_request_update_premium()
*
* Check if any updates are on the premiums list.
*
* @param array $list_items List of updates.
* @param string $type Type of update. plugin|theme.
*
* @return bool true|false.
*/
public static function check_request_update_premium( $list_items, $type ) { // phpcs:ignore -- NOSONAR - complex.
$updates = explode( ',', $list_items );
if ( ! is_array( $updates ) || empty( $updates ) ) {
return false;
}
if ( 1 < count( $updates ) ) {
return false;
}
if ( 'plugin' === $type ) {
$update_premiums = array(
'yith-woocommerce-request-a-quote-premium/init.php',
);
/**
* Filter: mainwp_request_update_premium_plugins
*
* Filters supported premium plugins to fix compatibility problmes with updating premium plugins.
*
* @since Unknown
*/
$update_premiums = apply_filters( 'mainwp_request_update_premium_plugins', $update_premiums );
if ( is_array( $update_premiums ) && ! empty( $update_premiums ) ) {
foreach ( $updates as $slug ) {
if ( ! empty( $slug ) && in_array( $slug, $update_premiums ) ) {
return true;
}
}
}
} elseif ( 'theme' === $type ) {
$update_premiums = array();
/**
* Filter: mainwp_request_update_premium_themes
*
* Filters supported premium themes to fix compatibility problmes with updating premium themes.
*
* @since Unknown
*/
$update_premiums = apply_filters( 'mainwp_request_update_premium_themes', $update_premiums );
if ( is_array( $update_premiums ) && ! empty( $update_premiums ) ) {
foreach ( $updates as $slug ) {
if ( ! empty( $slug ) && in_array( $slug, $update_premiums ) ) {
return true;
}
}
}
}
return false;
}
/**
* Method redirect_request_site()
*
* Redirect to requested Site.
*
* @param mixed $website Child Site.
* @param mixed $where_url page to redirerct to.
*
* @uses \MainWP\Dashboard\MainWP_Connect::get_get_data_authed()
* @uses \MainWP\Dashboard\MainWP_Logger::debug()
* @uses \MainWP\Dashboard\MainWP_System::$version
*/
public static function redirect_request_site( $website, $where_url ) {
$request_url = MainWP_Connect::get_get_data_authed( $website, $where_url );
$agent = 'Mozilla/5.0 (compatible; MainWP/' . MainWP_System::$version . '; +http://mainwp.com)';
$args = array(
'timeout' => 25,
'httpversion' => '1.1',
'User-Agent' => $agent,
);
if ( ! empty( $website->http_user ) && ! empty( $website->http_pass ) ) {
$args['headers'] = array(
'Authorization' => 'Basic ' . base64_encode( $website->http_user . ':' . stripslashes( $website->http_pass ) ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode used for http encoding compatible.
);
}
MainWP_Logger::instance()->debug( ' :: tryRequest :: [website=' . $website->url . ']' );
return wp_remote_get( $request_url, $args );
}
/**
* Method request_premiums_update()
*
* Request to update plugin or theme.
*
* @param mixed $website Child Site to update.
* @param mixed $type Type of update, plugin|theme.
* @param mixed $list_items list of plugins & themes installed.
*
* @return mixed null|true.
*/
public static function request_premiums_update( $website, $type, $list_items ) {
if ( 'plugin' === $type ) {
$where_url = 'plugins.php?_request_update_premiums_type=plugin&list=' . $list_items;
} elseif ( 'theme' === $type ) {
$where_url = 'update-core.php?_request_update_premiums_type=theme&list=' . $list_items;
} else {
return null;
}
static::redirect_request_site( $website, $where_url );
return true;
}
/**
* Method try_to_detect_premiums_update()
*
* Try to detect if pugin and themes are premium.
*
* @param mixed $website Child Site.
* @param mixed $type Type of update, plugin|theme.
*
* @return mixed false|static::redirect_request_site()
*/
public static function try_to_detect_premiums_update( $website, $type ) {
if ( 'plugin' === $type ) {
$where_url = 'plugins.php?_detect_plugins_updates=yes';
} elseif ( 'theme' === $type ) {
$where_url = 'update-core.php?_detect_themes_updates=yes';
} else {
return false;
}
static::redirect_request_site( $website, $where_url );
}
}