| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?php declare(strict_types = 1);
- namespace MailPoet\Cache;
- if (!defined('ABSPATH')) exit;
- use MailPoet\WP\Functions as WPFunctions;
- use MailPoetVendor\Carbon\Carbon;
- class TransientCache {
- public const SUBSCRIBERS_STATISTICS_COUNT_KEY = 'mailpoet_subscribers_statistics_count_cache';
- public const SUBSCRIBERS_GLOBAL_STATUS_STATISTICS_COUNT_KEY = 'mailpoet_subscribers_statistics_count_global_status_cache';
- /** @var WPFunctions */
- private $wp;
- public function __construct(
- WPFunctions $wp
- ) {
- $this->wp = $wp;
- }
- public function getItem(string $key, int $id): ?array {
- $items = $this->getItems($key);
- return $items[$id] ?? null;
- }
- public function getOldestCreatedAt(string $key): ?\DateTime {
- $oldest = $this->getOldestItem($key);
- return $oldest['created_at'] ?? null;
- }
- public function getOldestItem(string $key): ?array {
- $items = $this->getItems($key);
- $oldest = null;
- foreach ($items as $item) {
- if ($oldest === null || $item['created_at'] < $oldest['created_at']) {
- $oldest = $item;
- }
- }
- return $oldest;
- }
- public function setItem(string $key, array $item, int $id): void {
- $items = $this->getItems($key) ?? [];
- $items[$id] = [
- 'item' => $item,
- 'created_at' => Carbon::now(),
- ];
- $this->setItems($key, $items);
- }
- public function invalidateItem(string $key, int $id): void {
- $items = $this->getItems($key);
- unset($items[$id]);
- if (count($items)) {
- $this->setItems($key, $items);
- } else {
- $this->deleteItems($key);
- }
- }
- public function invalidateItems(string $key): void {
- $this->deleteItems($key);
- }
- private function deleteItems(string $key): void {
- $this->wp->deleteTransient($key);
- }
- private function setItems(string $key, array $items): void {
- $this->wp->setTransient($key, $items);
- }
- public function getItems(string $key): array {
- return $this->wp->getTransient($key) ?: [];
- }
- }
|