settings = $settings; $this->subscribersRepository = $subscribersRepository; } public function check() { $limit = $this->getSubscribersLimit(); if ($limit === false) return false; $subscribersCount = $this->getSubscribersCount(); return $subscribersCount > $limit; } public function getSubscribersCount() { return $this->subscribersRepository->getTotalSubscribers(); } public function hasValidApiKey() { return $this->hasValidMssKey() || $this->hasValidPremiumKey(); } public function getSubscribersLimit() { if (!$this->hasValidApiKey()) { return $this->getFreeSubscribersLimit(); } if ($this->hasValidMssKey() && $this->hasMssSubscribersLimit()) { return $this->getMssSubscribersLimit(); } if ($this->hasValidPremiumKey() && $this->hasPremiumSubscribersLimit()) { return $this->getPremiumSubscribersLimit(); } return false; } private function hasValidMssKey() { $state = $this->settings->get(self::MSS_KEY_STATE); return $state === Bridge::KEY_VALID || $state === Bridge::KEY_EXPIRING; } 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() { $state = $this->settings->get(self::PREMIUM_KEY_STATE); return $state === Bridge::KEY_VALID || $state === Bridge::KEY_EXPIRING; } 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); } public function hasPremiumSupport() { return $this->hasValidPremiumKey() && $this->settings->get(self::PREMIUM_SUPPORT_SETTING_KEY) === 'premium'; } private function getFreeSubscribersLimit() { $installationTime = strtotime($this->settings->get('installed_at')); $oldUser = $installationTime < strtotime(self::NEW_LIMIT_DATE); return $oldUser ? self::SUBSCRIBERS_OLD_LIMIT : self::SUBSCRIBERS_NEW_LIMIT; } }