Show a notice to admin if network activation

Mailpoet seems to be working on network activated multisites but we
don't support it.
[MAILPOET-923]
This commit is contained in:
Pavel Dohnal
2017-06-13 12:49:00 +01:00
parent cdd8e51ef9
commit fa3ba609f3
4 changed files with 103 additions and 3 deletions

View File

@ -0,0 +1,36 @@
<?php
namespace MailPoet\Config;
use MailPoet\WP\Notice;
class DeferredAdminNotices {
const OPTIONS_KEY_NAME = 'mailpoet_deferred_admin_notices';
/**
* @param string $message
*/
public function addNetworkAdminNotice($message) {
$notices = get_option(DeferredAdminNotices::OPTIONS_KEY_NAME, array());
$notices[] = array(
"message" => $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);
}
}
}

View File

@ -25,7 +25,6 @@ class Initializer {
function init() { function init() {
$requirements_check_results = $this->checkRequirements(); $requirements_check_results = $this->checkRequirements();
// abort initialization if PDO extension is missing
if(!$requirements_check_results[RequirementsChecker::TEST_PDO_EXTENSION] || if(!$requirements_check_results[RequirementsChecker::TEST_PDO_EXTENSION] ||
!$requirements_check_results[RequirementsChecker::TEST_VENDOR_SOURCE] !$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( add_action('plugins_loaded', array(
$this, $this,
'setup' 'setup'
@ -62,8 +71,8 @@ class Initializer {
} }
function checkRequirements() { function checkRequirements() {
$requrements = new RequirementsChecker(); $requirements = new RequirementsChecker();
return $requrements->checkAllRequirements(); return $requirements->checkAllRequirements();
} }
function setupDB() { function setupDB() {

View File

@ -0,0 +1,20 @@
<?php
namespace MailPoet\Config;
class PluginActivatedHook {
/** @var DeferredAdminNotices */
private $deferredAdminNotices;
public function __construct(DeferredAdminNotices $deferredAdminNotices) {
$this->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 dont support it.', 'mailpoet'));
}
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace MailPoet\Config;
use Codeception\Util\Stub;
class PluginActivatedHookTest extends \MailPoetTest {
public function testItAddsANewMessageIfNetworkActivation() {
$deferredAdminNotices = Stub::makeEmpty(
'MailPoet\Config\DeferredAdminNotices',
array(
'addNetworkAdminNotice' => 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);
}
}