Server IP : 172.67.158.161 / Your IP : 3.144.254.245 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/home/giankuin/thietke365.net/wp-content/plugins/mailpoet/lib/Config/ |
Upload File : |
<?php declare(strict_types = 1); namespace MailPoet\Config; if (!defined('ABSPATH')) exit; use MailPoet\Entities\SubscriberEntity; use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class SubscriberChangesNotifier { /** @var array<int, int> */ private $createdSubscriberIds = []; /** @var array<int, int> */ private $deletedSubscriberIds = []; /** @var array<int, int> */ private $updatedSubscriberIds = []; /** @var array<int, int> */ private $statusChangedSubscriberIds = []; /** @var array<int, int> */ private $createdSubscriberBatches = []; /** @var array<int, int> */ private $updatedSubscriberBatches = []; /** @var WPFunctions */ private $wp; public function __construct( WPFunctions $wp ) { $this->wp = $wp; } public function notify() { $this->notifyCreations(); $this->notifyUpdates(); $this->notifyDeletes(); } private function notifyCreations(): void { if (count($this->createdSubscriberIds) > 1) { $minTimestamp = min($this->createdSubscriberIds); if ($minTimestamp) { $this->createdSubscriberBatches[] = $minTimestamp; $this->createdSubscriberIds = []; // reset created subscribers } } foreach ($this->createdSubscriberIds as $subscriberId => $updatedAt) { $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, $subscriberId); } if ($this->createdSubscriberBatches) { $minTimestamp = min($this->createdSubscriberBatches); if ($minTimestamp) { $this->wp->doAction(SubscriberEntity::HOOK_MULTIPLE_SUBSCRIBERS_CREATED, $minTimestamp); } } } private function notifyUpdates(): void { // unset updated subscribers if subscriber is created foreach ($this->createdSubscriberIds as $subscriberId => $timestamp) { unset($this->updatedSubscriberIds[$subscriberId]); unset($this->statusChangedSubscriberIds[$subscriberId]); } if (count($this->updatedSubscriberIds) > 1) { $minTimestamp = min($this->updatedSubscriberIds); if ($minTimestamp) { $this->updatedSubscriberBatches[] = $minTimestamp; $this->updatedSubscriberIds = []; // reset updated subscribers $this->statusChangedSubscriberIds = []; // reset status changed subscribers } } foreach ($this->updatedSubscriberIds as $subscriberId => $updatedAt) { $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, $subscriberId); } foreach ($this->statusChangedSubscriberIds as $subscriberId => $updatedAt) { $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_STATUS_CHANGED, $subscriberId); } if ($this->updatedSubscriberBatches) { $minTimestamp = min($this->updatedSubscriberBatches); if ($minTimestamp) { $this->wp->doAction(SubscriberEntity::HOOK_MULTIPLE_SUBSCRIBERS_UPDATED, $minTimestamp); } } } private function notifyDeletes(): void { if (count($this->deletedSubscriberIds) === 1) { foreach ($this->deletedSubscriberIds as $subscriberId => $updatedAt) { $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, $subscriberId); } } elseif ($this->deletedSubscriberIds) { $this->wp->doAction(SubscriberEntity::HOOK_MULTIPLE_SUBSCRIBERS_DELETED, array_keys($this->deletedSubscriberIds)); } } public function subscriberCreated(int $subscriberId): void { // store id as a key and timestamp change as the value $this->createdSubscriberIds[$subscriberId] = $this->getTimestamp(); } public function subscriberUpdated(int $subscriberId): void { // store id as a key and timestamp change as the value $this->updatedSubscriberIds[$subscriberId] = $this->getTimestamp(); } public function subscriberStatusChanged(int $subscriberId): void { // store id as a key and timestamp change as the value $this->statusChangedSubscriberIds[$subscriberId] = $this->getTimestamp(); } public function subscriberDeleted(int $subscriberId): void { // store id as a key and timestamp change as the value $this->deletedSubscriberIds[$subscriberId] = $this->getTimestamp(); } public function subscribersCreated(array $subscriberIds): void { foreach ($subscriberIds as $subscriberId) { $this->subscriberCreated((int)$subscriberId); } } public function subscribersUpdated(array $subscriberIds): void { foreach ($subscriberIds as $subscriberId) { $this->subscriberUpdated((int)$subscriberId); } } public function subscribersDeleted(array $subscriberIds): void { foreach ($subscriberIds as $subscriberId) { $this->subscriberDeleted((int)$subscriberId); } } public function subscribersBatchCreate(): void { $this->createdSubscriberBatches[] = $this->getTimestamp(); } public function subscribersBatchUpdate(): void { $this->updatedSubscriberBatches[] = $this->getTimestamp(); } private function getTimestamp(): int { $dateTime = Carbon::createFromTimestamp($this->wp->currentTime('timestamp', true), 'UTC'); return $dateTime->getTimestamp(); } }