diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..f8cf764ddd07a52c96758afd18d3aa3780b4ecf0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +## [2.3.0] - 2019-03-25 +### Added +- Factory +- Interface +### Changed +- Minor internal action renaming \ No newline at end of file diff --git a/src/Basic_Requirement_Checker.php b/src/Basic_Requirement_Checker.php index 89ae599f125432ffbc8297e4293872ecbeccdef2..a928633433d0a61769e3cfa330ecb28d4464f4ba 100644 --- a/src/Basic_Requirement_Checker.php +++ b/src/Basic_Requirement_Checker.php @@ -4,11 +4,16 @@ if ( ! interface_exists( 'WPDesk_Translatable' ) ) { require_once 'Translatable.php'; } +if ( ! interface_exists( 'WPDesk_Requirement_Checker' ) ) { + require_once 'Requirement_Checker.php'; +} + /** * Checks requirements for plugin * have to be compatible with PHP 5.2.x */ -class WPDesk_Basic_Requirement_Checker implements WPDesk_Translatable { +class WPDesk_Basic_Requirement_Checker implements WPDesk_Translatable, WPDesk_Requirement_Checker +{ const EXTENSION_NAME_OPENSSL = 'openssl'; const HOOK_ADMIN_NOTICES_ACTION = 'admin_notices'; @@ -349,7 +354,7 @@ class WPDesk_Basic_Requirement_Checker implements WPDesk_Translatable { * @deprecated use render_notices or disable_plugin */ public function disable_plugin_render_notice() { - add_action( self::HOOK_ADMIN_NOTICES_ACTION, array( $this, 'render_notices_action' ) ); + add_action( self::HOOK_ADMIN_NOTICES_ACTION, array( $this, 'handle_render_notices_action') ); } /** @@ -358,7 +363,7 @@ class WPDesk_Basic_Requirement_Checker implements WPDesk_Translatable { * @return void */ public function render_notices() { - add_action( self::HOOK_ADMIN_NOTICES_ACTION, array( $this, 'render_notices_action' ) ); + add_action( self::HOOK_ADMIN_NOTICES_ACTION, array( $this, 'handle_render_notices_action') ); } /** @@ -367,7 +372,7 @@ class WPDesk_Basic_Requirement_Checker implements WPDesk_Translatable { * @return void */ public function disable_plugin() { - add_action( self::HOOK_ADMIN_NOTICES_ACTION, array( $this, 'deactivate_action' ) ); + add_action( self::HOOK_ADMIN_NOTICES_ACTION, array( $this, 'handle_deactivate_action') ); } /** @@ -375,22 +380,22 @@ class WPDesk_Basic_Requirement_Checker implements WPDesk_Translatable { * * @return void */ - public function deactivate_action() { + public function handle_deactivate_action() { if ( isset( $this->plugin_file ) ) { deactivate_plugins( plugin_basename( $this->plugin_file ) ); } } - /** - * Should be called as WordPress action - * + /** + * Should be called as WordPress action + * * @internal Do not use as public. Public only for wp action. * - * @return void - */ - public function render_notices_action() { - foreach ( $this->notices as $notice ) { - echo $notice; - } - } + * @return void + */ + public function handle_render_notices_action() { + foreach ( $this->notices as $notice ) { + echo $notice; + } + } } diff --git a/src/Basic_Requirement_Checker_Factory.php b/src/Basic_Requirement_Checker_Factory.php new file mode 100644 index 0000000000000000000000000000000000000000..a4bbb9cedf9dd6e93b43659438955140177043b0 --- /dev/null +++ b/src/Basic_Requirement_Checker_Factory.php @@ -0,0 +1,22 @@ +<?php + +if ( ! class_exists('Basic_Requirement_Checker')) { + require_once 'Basic_Requirement_Checker.php'; +} + +class WPDesk_Basic_Requirement_Checker_Factory +{ + /** + * @param $plugin_file + * @param $plugin_name + * @param $text_domain + * @param $php_version + * @param $wp_version + * + * @return WPDesk_Requirement_Checker + */ + public function create_requirement_checker($plugin_file, $plugin_name, $text_domain) + { + return new WPDesk_Basic_Requirement_Checker($plugin_file, $plugin_name, $text_domain, null, null); + } +} diff --git a/src/Requirement_Checker.php b/src/Requirement_Checker.php new file mode 100644 index 0000000000000000000000000000000000000000..aa472cad4e5c02e9ad38aded009b296d1c370f87 --- /dev/null +++ b/src/Requirement_Checker.php @@ -0,0 +1,81 @@ +<?php +/** + * Checks requirements for plugin + * have to be compatible with PHP 5.2.x + */ +interface WPDesk_Requirement_Checker +{ + /** + * @param string $version + * + * @return $this + */ + public function set_min_php_require($version); + + /** + * @param string $version + * + * @return $this + */ + public function set_min_wp_require($version); + + /** + * @param string $version + * + * @return $this + */ + public function set_min_wc_require($version); + + /** + * @param $version + * + * @return $this + */ + public function set_min_openssl_require($version); + + /** + * @param string $plugin_name + * @param string $nice_plugin_name Nice plugin name for better looks in notice + * + * @return $this + */ + public function add_plugin_require($plugin_name, $nice_plugin_name = null); + + /** + * @param string $module_name + * @param string $nice_name Nice module name for better looks in notice + * + * @return $this + */ + public function add_php_module_require($module_name, $nice_name = null); + + /** + * @param string $setting + * @param mixed $value + * + * @return $this + */ + public function add_php_setting_require($setting, $value); + + /** + * @return bool + */ + public function are_requirements_met(); + + /** + * @return void + */ + public function disable_plugin_render_notice(); + + /** + * @return void + */ + public function render_notices(); + + /** + * Renders requirement notices in admin panel + * + * @return void + */ + public function disable_plugin(); +} \ No newline at end of file diff --git a/src/Requirement_Checker_Factory.php b/src/Requirement_Checker_Factory.php new file mode 100644 index 0000000000000000000000000000000000000000..803eb810781ebd5fa6c49eb5e77c2c64d32532fb --- /dev/null +++ b/src/Requirement_Checker_Factory.php @@ -0,0 +1,15 @@ +<?php + +interface WPDesk_Requirement_Checker_Factory +{ + /** + * @param $plugin_file + * @param $plugin_name + * @param $text_domain + * @param $php_version + * @param $wp_version + * + * @return WPDesk_Requirement_Checker + */ + public function create_requirement_checker($plugin_file, $plugin_name, $text_domain); +} diff --git a/tests/unit/Test_Basic_Requirement_Checker.php b/tests/unit/Test_Basic_Requirement_Checker.php index e68e24d5e82e428bad51c0c6cd46fec47ae5560d..260369cb7ae4e8233e25b552878685d7a4ac2250 100644 --- a/tests/unit/Test_Basic_Requirement_Checker.php +++ b/tests/unit/Test_Basic_Requirement_Checker.php @@ -46,7 +46,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { $requirements->set_min_php_require( self::ALWAYS_NOT_VALID_PHP_VERSION ); $requirements->are_requirements_met(); $this->expectOutputRegex( "/PHP/" ); - $requirements->render_notices_action(); + $requirements->handle_render_notices_action(); } /** @@ -73,7 +73,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { 'Should fail because required WP should be at least ' . $wp_version_fail ); $this->expectOutputRegex( "/WordPress/" ); - $requirements->render_notices_action(); + $requirements->handle_render_notices_action(); } /** @@ -88,7 +88,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { $this->assertTrue( $requirements->are_requirements_met(), 'Curl should exists' ); $this->expectOutputRegex( "/^$/" ); - $requirements->render_notices_action(); + $requirements->handle_render_notices_action(); } public function test_plugin_check_with_multisite() { @@ -122,7 +122,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { $this->assertFalse( $requirements->are_requirements_met(), 'Plugin should not exists' ); $this->expectOutputRegex( "/$not_existing_plugin_name/" ); - $requirements->render_notices_action(); + $requirements->handle_render_notices_action(); } /** @@ -147,7 +147,7 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { 'Requirement OpenSSL should fail for that high number' ); $this->expectOutputRegex( '/without OpenSSL module/' ); - $requirements->render_notices_action(); + $requirements->handle_render_notices_action(); } public function test_deactivate_plugin_notice() { @@ -155,13 +155,13 @@ class Test_Basic_Requirement_Checker extends PHPUnit\Framework\TestCase { self::ALWAYS_VALID_WP_VERSION ); WP_Mock::expectActionAdded( WPDesk_Basic_Requirement_Checker::HOOK_ADMIN_NOTICES_ACTION, - [ $requirements, 'render_notices_action' ] ); + [ $requirements, 'handle_render_notices_action'] ); $this->assertFalse( $requirements->are_requirements_met() ); $requirements->disable_plugin(); $requirements->render_notices(); $this->expectOutputRegex( '/cannot run on PHP/' ); - $requirements->render_notices_action(); + $requirements->handle_render_notices_action(); } }