Server IP : 104.21.14.103 / Your IP : 18.227.107.147 Web Server : LiteSpeed System : Linux business53.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : giankuin ( 1871) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/self/root/proc/thread-self/root/home/giankuin/thietke365.net/wp-content/plugins/mailpoet/lib/Subscription/ |
Upload File : |
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing namespace MailPoet\Subscription; if (!defined('ABSPATH')) exit; use MailPoet\Entities\SubscriberIPEntity; use MailPoet\Subscribers\SubscriberIPsRepository; use MailPoet\Util\Helpers; use MailPoet\WP\Functions as WPFunctions; class Throttling { /** @var SubscriberIPsRepository */ private $subscriberIPsRepository; /** @var WPFunctions */ private $wp; public function __construct( SubscriberIPsRepository $subscriberIPsRepository, WPFunctions $wp ) { $this->wp = $wp; $this->subscriberIPsRepository = $subscriberIPsRepository; } public function throttle() { $subscriptionLimitEnabled = $this->wp->applyFilters('mailpoet_subscription_limit_enabled', true); $subscriptionLimitWindow = (int)$this->wp->applyFilters('mailpoet_subscription_limit_window', DAY_IN_SECONDS); $subscriptionLimitBase = (int)$this->wp->applyFilters('mailpoet_subscription_limit_base', MINUTE_IN_SECONDS); $subscriberIp = Helpers::getIP(); if ($subscriptionLimitEnabled && !$this->isUserExemptFromThrottling()) { if (!empty($subscriberIp)) { $subscriptionCount = $this->subscriberIPsRepository->getCountByIPAndCreatedAtAfterTimeInSeconds($subscriberIp, $subscriptionLimitWindow); if ($subscriptionCount > 0) { $timeout = $subscriptionLimitBase * pow(2, $subscriptionCount - 1); $existingUser = $this->subscriberIPsRepository->findOneByIPAndCreatedAtAfterTimeInSeconds($subscriberIp, $timeout); if (!empty($existingUser)) { return $timeout; } } } } if ($subscriberIp !== null) { $ip = new SubscriberIPEntity($subscriberIp); $existingIp = $this->subscriberIPsRepository->findOneBy(['ip' => $ip->getIP(), 'createdAt' => $ip->getCreatedAt()]); if (!$existingIp) { $this->subscriberIPsRepository->persist($ip); $this->subscriberIPsRepository->flush(); } } $this->purge(); return false; } public function purge(): void { $interval = $this->wp->applyFilters('mailpoet_subscription_purge_window', MONTH_IN_SECONDS); $this->subscriberIPsRepository->deleteCreatedAtBeforeTimeInSeconds($interval); } public function secondsToTimeString($seconds): string { $hrs = floor($seconds / 3600); $min = floor($seconds % 3600 / 60); $sec = $seconds % 3600 % 60; $result = [ // translators: %s is the number of hours 'hours' => $hrs ? sprintf(__('%d hours', 'mailpoet'), $hrs) : '', // translators: %s is the number of minutes 'minutes' => $min ? sprintf(__('%d minutes', 'mailpoet'), $min) : '', // translators: %s is the number of seconds 'seconds' => $sec ? sprintf(__('%d seconds', 'mailpoet'), $sec) : '', ]; return join(' ', array_filter($result)); } private function isUserExemptFromThrottling(): bool { if (!$this->wp->isUserLoggedIn()) { return false; } $user = $this->wp->wpGetCurrentUser(); $roles = $this->wp->applyFilters('mailpoet_subscription_throttling_exclude_roles', ['administrator', 'editor']); return !empty(array_intersect($roles, (array)$user->roles)); } }