Geen omschrijving

Subscribers.php 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace MailPoet\Util\License\Features;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Services\Bridge;
  5. use MailPoet\Settings\SettingsController;
  6. use MailPoet\Subscribers\SubscribersRepository;
  7. class Subscribers {
  8. const SUBSCRIBERS_OLD_LIMIT = 2000;
  9. const SUBSCRIBERS_NEW_LIMIT = 1000;
  10. const NEW_LIMIT_DATE = '2019-11-00';
  11. const MSS_KEY_STATE = 'mta.mailpoet_api_key_state.state';
  12. const MSS_SUBSCRIBERS_LIMIT_SETTING_KEY = 'mta.mailpoet_api_key_state.data.site_active_subscriber_limit';
  13. const PREMIUM_KEY_STATE = 'premium.premium_key_state.state';
  14. const PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY = 'premium.premium_key_state.data.site_active_subscriber_limit';
  15. const PREMIUM_SUPPORT_SETTING_KEY = 'premium.premium_key_state.data.support_tier';
  16. /** @var SettingsController */
  17. private $settings;
  18. /** @var SubscribersRepository */
  19. private $subscribersRepository;
  20. public function __construct(
  21. SettingsController $settings,
  22. SubscribersRepository $subscribersRepository
  23. ) {
  24. $this->settings = $settings;
  25. $this->subscribersRepository = $subscribersRepository;
  26. }
  27. public function check() {
  28. $limit = $this->getSubscribersLimit();
  29. if ($limit === false) return false;
  30. $subscribersCount = $this->getSubscribersCount();
  31. return $subscribersCount > $limit;
  32. }
  33. public function getSubscribersCount() {
  34. return $this->subscribersRepository->getTotalSubscribers();
  35. }
  36. public function hasValidApiKey() {
  37. return $this->hasValidMssKey() || $this->hasValidPremiumKey();
  38. }
  39. public function getSubscribersLimit() {
  40. if (!$this->hasValidApiKey()) {
  41. return $this->getFreeSubscribersLimit();
  42. }
  43. if ($this->hasValidMssKey() && $this->hasMssSubscribersLimit()) {
  44. return $this->getMssSubscribersLimit();
  45. }
  46. if ($this->hasValidPremiumKey() && $this->hasPremiumSubscribersLimit()) {
  47. return $this->getPremiumSubscribersLimit();
  48. }
  49. return false;
  50. }
  51. private function hasValidMssKey() {
  52. $state = $this->settings->get(self::MSS_KEY_STATE);
  53. return $state === Bridge::KEY_VALID || $state === Bridge::KEY_EXPIRING;
  54. }
  55. private function hasMssSubscribersLimit() {
  56. return !empty($this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY));
  57. }
  58. private function getMssSubscribersLimit() {
  59. return (int)$this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY);
  60. }
  61. private function hasValidPremiumKey() {
  62. $state = $this->settings->get(self::PREMIUM_KEY_STATE);
  63. return $state === Bridge::KEY_VALID || $state === Bridge::KEY_EXPIRING;
  64. }
  65. private function hasPremiumSubscribersLimit() {
  66. return !empty($this->settings->get(self::PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY));
  67. }
  68. private function getPremiumSubscribersLimit() {
  69. return (int)$this->settings->get(self::PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY);
  70. }
  71. public function hasPremiumSupport() {
  72. return $this->hasValidPremiumKey() && $this->settings->get(self::PREMIUM_SUPPORT_SETTING_KEY) === 'premium';
  73. }
  74. private function getFreeSubscribersLimit() {
  75. $installationTime = strtotime($this->settings->get('installed_at'));
  76. $oldUser = $installationTime < strtotime(self::NEW_LIMIT_DATE);
  77. return $oldUser ? self::SUBSCRIBERS_OLD_LIMIT : self::SUBSCRIBERS_NEW_LIMIT;
  78. }
  79. }