settings = $settings; $this->subscribers_repository = $subscribers_repository; } public function check() { $limit = $this->getSubscribersLimit(); if ($limit === false) return false; $subscribers_count = $this->subscribers_repository->getTotalSubscribers(); return $subscribers_count > $limit; } public function hasAPIKey() { return $this->hasValidMssKey() || $this->hasValidPremiumKey(); } public function getSubscribersLimit() { if (!$this->hasAPIKey()) { return $this->getFreeSubscribersLimit(); } if ($this->hasValidMssKey() && $this->hasMssSubscribersLimit()) { return $this->getMssSubscribersLimit(); } 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; } }