diff --git a/src/Basic_Requirement_Checker.php b/src/Basic_Requirement_Checker.php index e7505887a9b05150a937850d67bb15d750e1aab7..b54474dd860a0ddc495d6404f1f0b5f9f6960998 100644 --- a/src/Basic_Requirement_Checker.php +++ b/src/Basic_Requirement_Checker.php @@ -15,6 +15,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; @@ -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,25 +113,16 @@ 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; + public function is_required_minimum_version( $is_required ) { + $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; - } - /** * @param string $plugin_name Name in wp format dir/file.php * @param string $nice_plugin_name Nice plugin name for better looks in notice @@ -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,15 +340,55 @@ 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; - return $class; } - + + /** + * @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 false; + } + + /** + * @param $slug + * + * @return $this + */ + public function add_plugin_slug( $slug ) { + $this->slug = $slug; + + return $this; + } + /** * @param array $notices * diff --git a/src/Basic_Requirement_Checker_Factory.php b/src/Basic_Requirement_Checker_Factory.php index e46cf86895d0a04bfb3e0fae31b37135db490393..25986dd52393c078ff71fefc42702a0231326c7e 100644 --- a/src/Basic_Requirement_Checker_Factory.php +++ b/src/Basic_Requirement_Checker_Factory.php @@ -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'] ) ) { @@ -67,6 +65,14 @@ class WPDesk_Basic_Requirement_Checker_Factory { $requirements_checker->add_php_module_require( $requirement['name'], $requirement['nice_name'] ); } } + + 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; } diff --git a/src/Requirement_Checker.php b/src/Requirement_Checker.php index 8b036d9031ce013a79d33d8426bdd8ecea16600b..74f84942e21059678fb8b4239db77ec2eb37c0d5 100644 --- a/src/Requirement_Checker.php +++ b/src/Requirement_Checker.php @@ -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