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

Minimum required plugin version demo1 / before refactor

parent 7c139690
No related branches found
No related tags found
2 merge requests!19Feature/minimum plugin version check demo1,!18Minimum required plugin version demo1
......@@ -38,6 +38,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
protected $notices;
/** @var @string */
private $text_domain;
/** @var string */
private $minimum_required_plugin_version;
/** @var string */
private $force_plugin_update;
/**
* @param string $plugin_file
......@@ -45,11 +49,15 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
* @param string $text_domain
* @param string $php_version
* @param string $wp_version
* @param string $minimum_required_plugin_version
* @param bool $force_plugin_update
*/
public function __construct( $plugin_file, $plugin_name, $text_domain, $php_version, $wp_version ) {
public function __construct( $plugin_file, $plugin_name, $text_domain, $php_version, $wp_version, $minimum_required_plugin_version, $force_plugin_update = false ) {
$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 );
......@@ -104,6 +112,26 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
return $this;
}
/**
* @param $minimum_require_plugin_version
*
* @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;
}
/**
* @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
......@@ -200,6 +228,10 @@ 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 ) );
}
$notices = $this->append_plugin_require_notices( $notices );
$notices = $this->append_module_require_notices( $notices );
......@@ -275,6 +307,57 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
return defined( 'OPENSSL_VERSION_NUMBER' ) && OPENSSL_VERSION_NUMBER > (int) $required_version;
}
/**
* @param $required_minimum_version
*
* @return bool
*/
public function check_minimum_required_plugin_version( $required_minimum_version ) {
if ( null === $this->get_current_plugin_version() ) {
return false;
}
return $this->get_current_plugin_version() > $required_minimum_version;
}
/**
* @return array
*/
private function get_existing_plugins() {
if( ! function_exists( 'get_plugins' ) ) {
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
}
return ( get_plugins() ? get_plugins() : [] );
}
/**
* @return mixed|null
*/
public function get_current_plugin_version()
{
$version = null;
if (! empty( $this->get_existing_plugins() ) ) {
foreach ( $this->get_existing_plugins() as $plugin ) {
if ( $plugin['Name'] === $this->plugin_name ) {
$version = $plugin['Version'];
}
}
}
return $version;
}
/**
* @return string
*/
private function notice_or_error()
{
$class = true == $this->force_plugin_update ? 'error' : 'notice notice-warning is-dismissible';
return $class;
}
/**
* @param array $notices
*
......
......@@ -19,13 +19,14 @@ 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 ) {
public function create_requirement_checker( $plugin_file, $plugin_name, $text_domain = null, $minimum_required_plugin_version ) {
return new WPDesk_Basic_Requirement_Checker( $plugin_file, $plugin_name,
$this->initialize_translations( $text_domain ), null, null );
$this->initialize_translations( $text_domain ), null, null, $minimum_required_plugin_version );
}
/**
......@@ -44,7 +45,8 @@ class WPDesk_Basic_Requirement_Checker_Factory {
$plugin_name,
$this->initialize_translations( $text_domain ),
$requirements['php'],
$requirements['wp']
$requirements['wp'],
$requirements['minimum_required_plugin_version']
);
if ( isset( $requirements['plugins'] ) ) {
......
......@@ -33,6 +33,19 @@ interface WPDesk_Requirement_Checker
*/
public function set_min_openssl_require($version);
/**
* @param $minimum_require_plugin_version
*
* @return $this
*/
public function set_minimum_require_plugin_version($minimum_require_plugin_version);
/**
* @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
......
......@@ -15,6 +15,8 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
const HOOK_TYPE_ACTION = 'action';
const MINIMUM_REQUIRED_PLUGIN_VERSION = '1.0';
public function setUp() {
WP_Mock::setUp();
......@@ -49,6 +51,8 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
$requirements->handle_render_notices_action();
}
/**
* @param string $php
* @param string $wp
......@@ -57,7 +61,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
*/
private function create_requirements_for_php_wp( $php, $wp ) {
return new WPDesk_Basic_Requirement_Checker( self::RANDOM_PLUGIN_FILE, self::RANDOM_PLUGIN_NAME,
self::RANDOM_PLUGIN_TEXTDOMAIN, $php, $wp );
self::RANDOM_PLUGIN_TEXTDOMAIN, $php, $wp, self::MINIMUM_REQUIRED_PLUGIN_VERSION );
}
public function test_wp_version_check() {
......@@ -76,6 +80,21 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
$requirements->handle_render_notices_action();
}
public function test_minimum_plugin_version_check() {
$minimum_plugin_version_fail = '0.1';
$requirements = $this->create_requirements_for_php_wp(
self::ALWAYS_VALID_PHP_VERSION,
self::ALWAYS_VALID_WP_VERSION );
$this->assertTrue( $requirements->are_requirements_met(), 'Minimum plugin version is ok' );
$requirements->set_minimum_require_plugin_version( $minimum_plugin_version_fail );
$this->assertFalse( $requirements->are_requirements_met(),
'Failed as minimum required plugin version should be ' . $minimum_plugin_version_fail );
$this->expectOutputRegex( "/Plugin/" );
$requirements->handle_render_notices_action();
}
/**
* @requires extension curl
*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment