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

Minimum required plugin version demo1

parent 7c139690
No related branches found
No related tags found
No related merge requests found
Pipeline #9277 failed
...@@ -38,6 +38,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -38,6 +38,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
protected $notices; protected $notices;
/** @var @string */ /** @var @string */
private $text_domain; private $text_domain;
/** @var string */
private $minimum_required_plugin_version;
/** @var string */
private $force_plugin_update;
/** /**
* @param string $plugin_file * @param string $plugin_file
...@@ -45,11 +49,15 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -45,11 +49,15 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
* @param string $text_domain * @param string $text_domain
* @param string $php_version * @param string $php_version
* @param string $wp_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_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 );
...@@ -104,6 +112,26 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -104,6 +112,26 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
return $this; 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 $plugin_name Name in wp format dir/file.php
* @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
...@@ -200,6 +228,10 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -200,6 +228,10 @@ 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() ),
esc_html( $this->plugin_name ), $this->minimum_required_plugin_version ) );
}
$notices = $this->append_plugin_require_notices( $notices ); $notices = $this->append_plugin_require_notices( $notices );
$notices = $this->append_module_require_notices( $notices ); $notices = $this->append_module_require_notices( $notices );
...@@ -275,6 +307,57 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) { ...@@ -275,6 +307,57 @@ if ( ! class_exists( 'WPDesk_Basic_Requirement_Checker' ) ) {
return defined( 'OPENSSL_VERSION_NUMBER' ) && OPENSSL_VERSION_NUMBER > (int) $required_version; 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 * @param array $notices
* *
......
...@@ -19,13 +19,14 @@ class WPDesk_Basic_Requirement_Checker_Factory { ...@@ -19,13 +19,14 @@ 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 ) { 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, 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 { ...@@ -44,7 +45,8 @@ 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'] ) ) {
......
...@@ -33,6 +33,19 @@ interface WPDesk_Requirement_Checker ...@@ -33,6 +33,19 @@ interface WPDesk_Requirement_Checker
*/ */
public function set_min_openssl_require($version); 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 $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
......
...@@ -15,6 +15,8 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { ...@@ -15,6 +15,8 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
const HOOK_TYPE_ACTION = 'action'; const HOOK_TYPE_ACTION = 'action';
const MINIMUM_REQUIRED_PLUGIN_VERSION = '1.0';
public function setUp() { public function setUp() {
WP_Mock::setUp(); WP_Mock::setUp();
...@@ -49,6 +51,8 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { ...@@ -49,6 +51,8 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
$requirements->handle_render_notices_action(); $requirements->handle_render_notices_action();
} }
/** /**
* @param string $php * @param string $php
* @param string $wp * @param string $wp
...@@ -57,7 +61,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { ...@@ -57,7 +61,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
*/ */
private function create_requirements_for_php_wp( $php, $wp ) { private function create_requirements_for_php_wp( $php, $wp ) {
return new WPDesk_Basic_Requirement_Checker( self::RANDOM_PLUGIN_FILE, self::RANDOM_PLUGIN_NAME, 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() { public function test_wp_version_check() {
...@@ -76,6 +80,21 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { ...@@ -76,6 +80,21 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase {
$requirements->handle_render_notices_action(); $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 * @requires extension curl
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment