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
Branches
Tags
No related merge requests found
Pipeline #9301 failed
...@@ -16,6 +16,8 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -16,6 +16,8 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
const PLUGIN_INFO_KEY_NICE_NAME = 'nice_name'; const PLUGIN_INFO_KEY_NICE_NAME = 'nice_name';
const PLUGIN_INFO_KEY_NAME = 'name'; const PLUGIN_INFO_KEY_NAME = 'name';
const REQUEST_TIMEOUT = 30;
/** @var string */ /** @var string */
protected $plugin_name; protected $plugin_name;
/** @var string */ /** @var string */
...@@ -38,10 +40,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -38,10 +40,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
protected $notices; protected $notices;
/** @var @string */ /** @var @string */
private $text_domain; private $text_domain;
/** @var bool */
private $is_required_minimum_version;
/** @var string */ /** @var string */
private $minimum_required_plugin_version; private $slug;
/** @var string */
private $force_plugin_update;
/** /**
* @param string $plugin_file * @param string $plugin_file
...@@ -52,12 +54,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -52,12 +54,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
* @param string $minimum_required_plugin_version * @param string $minimum_required_plugin_version
* @param bool $force_plugin_update * @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_file = $plugin_file;
$this->plugin_name = $plugin_name; $this->plugin_name = $plugin_name;
$this->text_domain = $text_domain; $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_php_require( $php_version );
$this->set_min_wp_require( $wp_version ); $this->set_min_wp_require( $wp_version );
...@@ -113,22 +113,13 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -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 * @return WPDesk_Basic_Requirement_Checker
*/ */
public function set_minimum_require_plugin_version( $minimum_require_plugin_version ) { public function is_required_minimum_version( $is_required ) {
$this->minimum_required_plugin_version = $minimum_require_plugin_version; $this->is_required_minimum_version = $is_required;
return $this;
}
/**
* @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; return $this;
} }
...@@ -228,9 +219,9 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -228,9 +219,9 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
$this->get_text_domain() ), esc_html( $this->plugin_name ), $this->get_text_domain() ), esc_html( $this->plugin_name ),
'0x' . dechex( $this->min_openssl_version ) ) ); '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() ), if ( true == $this->is_required_minimum_version && false !== $this->check_minimum_required_plugin_version( $this->slug ) ) {
esc_html( $this->plugin_name ), $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->get_plugin_version_request( $this->slug ) ) );
} }
$notices = $this->append_plugin_require_notices( $notices ); $notices = $this->append_plugin_require_notices( $notices );
...@@ -308,16 +299,16 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -308,16 +299,16 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
} }
/** /**
* @param $required_minimum_version * @param string $slug
* *
* @return bool * @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() ) { if ( null === $this->get_current_plugin_version() ) {
return false; 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' ) ) { ...@@ -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() public function create_request( $slug ) {
{ $args = (object) array( 'slug' => $slug );
$class = true == $this->force_plugin_update ? 'error' : 'notice notice-warning is-dismissible'; $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 { ...@@ -19,14 +19,13 @@ class WPDesk_Basic_Requirement_Checker_Factory {
* *
* @param string $plugin_file * @param string $plugin_file
* @param string $plugin_name * @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. * @param string|null $text_domain Text domain to use. If null try to use library text domain.
* *
* @return WPDesk_Requirement_Checker * @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, 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 { ...@@ -45,8 +44,7 @@ class WPDesk_Basic_Requirement_Checker_Factory {
$plugin_name, $plugin_name,
$this->initialize_translations( $text_domain ), $this->initialize_translations( $text_domain ),
$requirements['php'], $requirements['php'],
$requirements['wp'], $requirements['wp']
$requirements['minimum_required_plugin_version']
); );
if ( isset( $requirements['plugins'] ) ) { if ( isset( $requirements['plugins'] ) ) {
...@@ -68,6 +66,14 @@ class WPDesk_Basic_Requirement_Checker_Factory { ...@@ -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; return $requirements_checker;
} }
......
...@@ -34,18 +34,12 @@ interface WPDesk_Requirement_Checker ...@@ -34,18 +34,12 @@ interface WPDesk_Requirement_Checker
public function set_min_openssl_require($version); public function set_min_openssl_require($version);
/** /**
* @param $minimum_require_plugin_version * @param $is_required
* *
* @return $this * @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 $plugin_name
* @param string $nice_plugin_name Nice plugin name for better looks in notice * @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