diff --git a/lib/Util/License/Features/Subscribers.php b/lib/Util/License/Features/Subscribers.php index bfec3aa57e..dd00c728cb 100644 --- a/lib/Util/License/Features/Subscribers.php +++ b/lib/Util/License/Features/Subscribers.php @@ -10,7 +10,9 @@ class Subscribers { const SUBSCRIBERS_OLD_LIMIT = 2000; const SUBSCRIBERS_NEW_LIMIT = 1000; const NEW_LIMIT_DATE = '2019-11-00'; + const MSS_KEY_STATE = 'mta.mailpoet_api_key_state.state'; const MSS_SUBSCRIBERS_LIMIT_SETTING_KEY = 'mta.mailpoet_api_key_state.data.site_active_subscriber_limit'; + const PREMIUM_KEY_STATE = 'premium.premium_key_state.state'; const PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY = 'premium.premium_key_state.data.site_active_subscriber_limit'; /** @var SettingsController */ @@ -32,22 +34,50 @@ class Subscribers { } public function hasAPIKey() { - $has_mss_key = !empty($this->settings->get(Bridge::API_KEY_SETTING_NAME)); - $has_premium_key = !empty($this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME)); - return $has_mss_key || $has_premium_key; + return $this->hasValidMssKey() || $this->hasValidPremiumKey(); } public function getSubscribersLimit() { - $has_mss_key = !empty($this->settings->get(Bridge::API_KEY_SETTING_NAME)); - $mss_subscribers_limit = $this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY); - if ($has_mss_key && !empty($mss_subscribers_limit)) return (int)$mss_subscribers_limit; + if (!$this->hasAPIKey()) { + return $this->getFreeSubscribersLimit(); + } - $has_premium_key = !empty($this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME)); - $premium_subscribers_limit = $this->settings->get(self::PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY); - if ($has_premium_key && !empty($premium_subscribers_limit)) return (int)$premium_subscribers_limit; + if ($this->hasValidMssKey() && $this->hasMssSubscribersLimit()) { + return $this->getMssSubscribersLimit(); + } - if ($has_mss_key || $has_premium_key) return false; + if ($this->hasValidPremiumKey() && $this->hasPremiumSubscribersLimit()) { + return $this->getPremiumSubscribersLimit(); + } + return false; + } + + private function hasValidMssKey() { + return $this->settings->get(self::MSS_KEY_STATE) === 'valid'; + } + + private function hasMssSubscribersLimit() { + return !empty($this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY)); + } + + private function getMssSubscribersLimit() { + return (int)$this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY); + } + + private function hasValidPremiumKey() { + return $this->settings->get(self::PREMIUM_KEY_STATE) === 'valid'; + } + + private function hasPremiumSubscribersLimit() { + return !empty($this->settings->get(self::PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY)); + } + + private function getPremiumSubscribersLimit() { + return (int)$this->settings->get(self::PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY); + } + + private function getFreeSubscribersLimit() { $installation_time = strtotime($this->settings->get('installed_at')); $old_user = $installation_time < strtotime(self::NEW_LIMIT_DATE); return $old_user ? self::SUBSCRIBERS_OLD_LIMIT : self::SUBSCRIBERS_NEW_LIMIT; diff --git a/tests/unit/Util/License/Features/SubscribersTest.php b/tests/unit/Util/License/Features/SubscribersTest.php index 28d8b48267..dba9fccb1d 100644 --- a/tests/unit/Util/License/Features/SubscribersTest.php +++ b/tests/unit/Util/License/Features/SubscribersTest.php @@ -134,8 +134,8 @@ class SubscribersTest extends \MailPoetUnitTest { $settings = Stub::make(SettingsController::class, [ 'get' => function($name) use($specs) { if ($name === 'installed_at') return $specs['installed_at']; - if ($name === Bridge::API_KEY_SETTING_NAME) return $specs['has_mss_key']; - if ($name === Bridge::PREMIUM_KEY_SETTING_NAME) return $specs['has_premium_key']; + if ($name === SubscribersFeature::MSS_KEY_STATE) return $specs['has_mss_key'] ? 'valid' : 'invalid'; + if ($name === SubscribersFeature::PREMIUM_KEY_STATE) return $specs['has_premium_key'] ? 'valid' : 'invalid'; if ($name === SubscribersFeature::PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY) return $specs['premium_subscribers_limit']; if ($name === SubscribersFeature::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY) return $specs['mss_subscribers_limit']; },