diff --git a/lib/Config/DeferredAdminNotices.php b/lib/Config/DeferredAdminNotices.php new file mode 100644 index 0000000000..d560288447 --- /dev/null +++ b/lib/Config/DeferredAdminNotices.php @@ -0,0 +1,36 @@ + $message, + "networkAdmin" => true,// if we'll need to display the notice to anyone else + ); + update_option(DeferredAdminNotices::OPTIONS_KEY_NAME, $notices); + } + + public function flushAll() { + $notices = get_option(DeferredAdminNotices::OPTIONS_KEY_NAME, array()); + + foreach($notices as $notice) { + $notice = new Notice(Notice::TYPE_WARNING, $notice["message"]); + add_action('network_admin_notices', array($notice, 'displayWPNotice')); + } + + if(!empty($notices)) { + delete_option(DeferredAdminNotices::OPTIONS_KEY_NAME); + } + } + +} \ No newline at end of file diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php index 743d010dbe..e0e7fe6779 100644 --- a/lib/Config/Initializer.php +++ b/lib/Config/Initializer.php @@ -25,7 +25,6 @@ class Initializer { function init() { $requirements_check_results = $this->checkRequirements(); - // abort initialization if PDO extension is missing if(!$requirements_check_results[RequirementsChecker::TEST_PDO_EXTENSION] || !$requirements_check_results[RequirementsChecker::TEST_VENDOR_SOURCE] ) { @@ -43,6 +42,16 @@ class Initializer { ) ); + add_action('activated_plugin', array( + new PluginActivatedHook(new DeferredAdminNotices), + 'action' + ), 10, 2); + + add_action('admin_init', array( + new DeferredAdminNotices, + 'flushAll' + )); + add_action('plugins_loaded', array( $this, 'setup' @@ -62,8 +71,8 @@ class Initializer { } function checkRequirements() { - $requrements = new RequirementsChecker(); - return $requrements->checkAllRequirements(); + $requirements = new RequirementsChecker(); + return $requirements->checkAllRequirements(); } function setupDB() { diff --git a/lib/Config/PluginActivatedHook.php b/lib/Config/PluginActivatedHook.php new file mode 100644 index 0000000000..4e85d3cc64 --- /dev/null +++ b/lib/Config/PluginActivatedHook.php @@ -0,0 +1,20 @@ +deferredAdminNotices = $deferredAdminNotices; + } + + public function action($plugin, $networkWide) { + if($networkWide) { + $this->deferredAdminNotices->addNetworkAdminNotice(__('We noticed that you\'re using an unsupported environment. While MailPoet might work within a MultiSite environment, we don’t support it.', 'mailpoet')); + } + } + +} \ No newline at end of file diff --git a/tests/unit/Config/PluginActivatedHookTest.php b/tests/unit/Config/PluginActivatedHookTest.php new file mode 100644 index 0000000000..1b37ad87d0 --- /dev/null +++ b/tests/unit/Config/PluginActivatedHookTest.php @@ -0,0 +1,35 @@ + Stub::exactly(1, function () { + }), + ), + $this + ); + $hook = new PluginActivatedHook($deferredAdminNotices); + $hook->action("mailpoet", true); + } + + public function testItDoesntAddsAMessageIfNoNetworkActivation() { + $deferredAdminNotices = Stub::makeEmpty( + 'MailPoet\Config\DeferredAdminNotices', + array( + 'addNetworkAdminNotice' => Stub::never(), + ), + $this + ); + $hook = new PluginActivatedHook($deferredAdminNotices); + $hook->action("mailpoet", false); + } + +}