diff --git a/assets/js/src/notices/subscribers_limit_notice.jsx b/assets/js/src/notices/subscribers_limit_notice.jsx index 7e8f9317cd..f9a7f4fb7f 100644 --- a/assets/js/src/notices/subscribers_limit_notice.jsx +++ b/assets/js/src/notices/subscribers_limit_notice.jsx @@ -12,9 +12,15 @@ const SubscribersLimitNotice = () => { const upgradeLink = hasKey ? 'https://account.mailpoet.com/upgrade' : `https://account.mailpoet.com/?s=${window.mailpoet_subscribers_count + 1}`; - const refreshSubscribers = () => { - console.log('Refresh subscribers ...'); + const refreshSubscribers = async () => { + await MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'services', + action: 'recheckKeys', + }); + window.location.reload(); }; + return (

{title}

@@ -33,13 +39,16 @@ const SubscribersLimitNotice = () => { {MailPoet.I18n.t('upgradeNow')} {hasKey && ( - + <> + {' '} + + )}

diff --git a/lib/API/JSON/v1/Services.php b/lib/API/JSON/v1/Services.php index 176742c5d6..52915e4b25 100644 --- a/lib/API/JSON/v1/Services.php +++ b/lib/API/JSON/v1/Services.php @@ -7,6 +7,8 @@ use MailPoet\API\JSON\Endpoint as APIEndpoint; use MailPoet\API\JSON\Error as APIError; use MailPoet\Config\AccessControl; use MailPoet\Config\Installer; +use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck; +use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck; use MailPoet\Services\Bridge; use MailPoet\Services\SPFCheck; use MailPoet\Settings\SettingsController; @@ -29,15 +31,23 @@ class Services extends APIEndpoint { /** @var DateTime */ public $date_time; + /** @var SendingServiceKeyCheck */ + private $mss_worker; + + /** @var PremiumKeyCheck */ + private $premium_worker; + public $permissions = [ 'global' => AccessControl::PERMISSION_MANAGE_SETTINGS, ]; - public function __construct(Bridge $bridge, SettingsController $settings, AnalyticsHelper $analytics, SPFCheck $spf_check) { + public function __construct(Bridge $bridge, SettingsController $settings, AnalyticsHelper $analytics, SPFCheck $spf_check, SendingServiceKeyCheck $mss_worker, PremiumKeyCheck $premium_worker) { $this->bridge = $bridge; $this->settings = $settings; $this->analytics = $analytics; $this->spf_check = $spf_check; + $this->mss_worker = $mss_worker; + $this->premium_worker = $premium_worker; $this->date_time = new DateTime(); } @@ -179,6 +189,14 @@ class Services extends APIEndpoint { return $this->errorResponse([APIError::BAD_REQUEST => $error]); } + public function recheckKeys() { + $this->mss_worker->init(); + $this->mss_worker->checkKey(); + $this->premium_worker->init(); + $this->premium_worker->checkKey(); + return $this->successResponse(); + } + private function getErrorDescriptionByCode($code) { switch ($code) { case Bridge::CHECK_ERROR_UNAVAILABLE: diff --git a/tests/integration/API/JSON/v1/ServicesTest.php b/tests/integration/API/JSON/v1/ServicesTest.php index 5286207f45..5992221aaa 100644 --- a/tests/integration/API/JSON/v1/ServicesTest.php +++ b/tests/integration/API/JSON/v1/ServicesTest.php @@ -8,6 +8,8 @@ use MailPoet\Analytics\Analytics; use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\v1\Services; use MailPoet\Config\Installer; +use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck; +use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck; use MailPoet\Services\Bridge; use MailPoet\Services\SPFCheck; use MailPoet\Settings\SettingsController; @@ -404,7 +406,9 @@ class ServicesTest extends \MailPoetTest { $this->di_container->get(Bridge::class), $this->di_container->get(SettingsController::class), $this->di_container->get(Analytics::class), - $spf_check + $spf_check, + $this->di_container->get(SendingServiceKeyCheck::class), + $this->di_container->get(PremiumKeyCheck::class) ); } @@ -413,7 +417,9 @@ class ServicesTest extends \MailPoetTest { $bridge, $this->di_container->get(SettingsController::class), $this->di_container->get(Analytics::class), - $this->di_container->get(SPFCheck::class) + $this->di_container->get(SPFCheck::class), + $this->di_container->get(SendingServiceKeyCheck::class), + $this->di_container->get(PremiumKeyCheck::class) ); } }