Skip to content
Snippets Groups Projects
Commit 9e056d93 authored by vasili.guruli's avatar vasili.guruli
Browse files

Fixes with plugin version check

parent 79e17f40
No related branches found
No related tags found
No related merge requests found
Pipeline #9301 failed
......@@ -16,6 +16,8 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
const PLUGIN_INFO_KEY_NICE_NAME = 'nice_name';
const PLUGIN_INFO_KEY_NAME = 'name';
const REQUEST_TIMEOUT = 30;
/** @var string */
protected $plugin_name;
/** @var string */
......@@ -38,10 +40,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
protected $notices;
/** @var @string */
private $text_domain;
/** @var bool */
private $is_required_minimum_version;
/** @var string */
private $minimum_required_plugin_version;
/** @var string */
private $force_plugin_update;
private $slug;
/**
* @param string $plugin_file
......@@ -52,12 +54,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
* @param string $minimum_required_plugin_version
* @param bool $force_plugin_update
*/
public function __construct( $plugin_file, $plugin_name, $text_domain, $php_version, $wp_version, $minimum_required_plugin_version, $force_plugin_update = false ) {
public function __construct( $plugin_file, $plugin_name, $text_domain, $php_version, $wp_version ) {
$this->plugin_file = $plugin_file;
$this->plugin_name = $plugin_name;
$this->text_domain = $text_domain;
$this->minimum_required_plugin_version = $minimum_required_plugin_version;
$this->force_plugin_update = $force_plugin_update;
$this->set_min_php_require( $php_version );
$this->set_min_wp_require( $wp_version );
......@@ -113,22 +113,13 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
}
/**
* @param $minimum_require_plugin_version
* @param bool $is_required
*
* @return WPDesk_Basic_Requirement_Checker
*/
public function set_minimum_require_plugin_version( $minimum_require_plugin_version ) {
$this->minimum_required_plugin_version = $minimum_require_plugin_version;
return $this;
}
public function is_required_minimum_version( $is_required ) {
$this->is_required_minimum_version = $is_required;
/**
* @param $force_plugin_update
*
* @return WPDesk_Basic_Requirement_Checker
*/
public function force_plugin_update( $force_plugin_update ) {
$this->force_plugin_update = $force_plugin_update;
return $this;
}
......@@ -228,9 +219,9 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
$this->get_text_domain() ), esc_html( $this->plugin_name ),
'0x' . dechex( $this->min_openssl_version ) ) );
}
if ( false !== $this->check_minimum_required_plugin_version( $this->minimum_required_plugin_version ) ) {
$notices[] = $this->prepare_notice_message( sprintf( __('The “%s” plugin requires at least %s version to work correctly with WooCommerce. Please update it', $this->get_text_domain() ),
esc_html( $this->plugin_name ), $this->minimum_required_plugin_version ) );
if ( true == $this->is_required_minimum_version && false !== $this->check_minimum_required_plugin_version( $this->slug ) ) {
$notices[] = $this->prepare_notice_message( sprintf( __( 'The “%s” plugin requires at least %s version to work correctly with WooCommerce. Please update it', $this->get_text_domain() ), esc_html( $this->plugin_name ), $this->get_plugin_version_request( $this->slug ) ) );
}
$notices = $this->append_plugin_require_notices( $notices );
......@@ -308,16 +299,16 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
}
/**
* @param $required_minimum_version
* @param string $slug
*
* @return bool
*/
public function check_minimum_required_plugin_version( $required_minimum_version ) {
public function check_minimum_required_plugin_version( $slug ) {
if ( null === $this->get_current_plugin_version() ) {
return false;
}
return $this->get_current_plugin_version() <> $required_minimum_version;
return $this->get_current_plugin_version() <> $this->get_plugin_version_request( $slug );
}
/**
......@@ -349,13 +340,53 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
}
/**
* @return string
* Plugin slug
*
* @param string $slug
*
* @return mixed
*/
private function notice_or_error()
{
$class = true == $this->force_plugin_update ? 'error' : 'notice notice-warning is-dismissible';
public function create_request( $slug ) {
$args = (object) array( 'slug' => $slug );
$request = array(
'action' => 'plugin_information',
'timeout' => self::REQUEST_TIMEOUT,
'request' => serialize( $args )
);
$url = 'http://api.wordpress.org/plugins/info/1.0/';
$response = wp_remote_post( $url, array( 'body' => $request ) );
return $response;
}
/**
* @param $slug
*
* @return bool
*/
public function get_plugin_version_request( $slug ) {
$response = $this->create_request( $slug );
$plugin_info = unserialize( $response['body'] );
if ( ! empty( $plugin_info ) ) {
return $plugin_info->version;
}
return $class;
return false;
}
/**
* @param $slug
*
* @return $this
*/
public function add_plugin_slug( $slug ) {
$this->slug = $slug;
return $this;
}
/**
......
......@@ -19,14 +19,13 @@ class WPDesk_Basic_Requirement_Checker_Factory {
*
* @param string $plugin_file
* @param string $plugin_name
* @param string $minimum_required_plugin_version
* @param string|null $text_domain Text domain to use. If null try to use library text domain.
*
* @return WPDesk_Requirement_Checker
*/
public function create_requirement_checker( $plugin_file, $plugin_name, $text_domain = null, $minimum_required_plugin_version ) {
public function create_requirement_checker( $plugin_file, $plugin_name, $text_domain = null ) {
return new WPDesk_Basic_Requirement_Checker( $plugin_file, $plugin_name,
$this->initialize_translations( $text_domain ), null, null, $minimum_required_plugin_version );
$this->initialize_translations( $text_domain ), null, null );
}
/**
......@@ -45,8 +44,7 @@ class WPDesk_Basic_Requirement_Checker_Factory {
$plugin_name,
$this->initialize_translations( $text_domain ),
$requirements['php'],
$requirements['wp'],
$requirements['minimum_required_plugin_version']
$requirements['wp']
);
if ( isset( $requirements['plugins'] ) ) {
......@@ -68,6 +66,14 @@ class WPDesk_Basic_Requirement_Checker_Factory {
}
}
if ( isset( $requirements['require_minimum_version'] ) ) {
foreach ( $requirements['require_minimum_version'] as $version ) {
$requirements_checker->is_required_minimum_version( $version['is_required'] );
$requirements_checker->add_plugin_slug( $version['slug'] );
}
}
return $requirements_checker;
}
......
......@@ -34,18 +34,12 @@ interface WPDesk_Requirement_Checker
public function set_min_openssl_require($version);
/**
* @param $minimum_require_plugin_version
* @param $is_required
*
* @return $this
*/
public function set_minimum_require_plugin_version($minimum_require_plugin_version);
public function is_required_minimum_version($is_required);
/**
* @param $force_plugin_update
*
* @return $this
*/
public function force_plugin_update($force_plugin_update);
/**
* @param string $plugin_name
* @param string $nice_plugin_name Nice plugin name for better looks in notice
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment