File "FlashContainer.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-paypal-payments/lib/packages/Dhii/Container/FlashContainer.php
File size: 3.64 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\Vendor\Dhii\Container;
use WooCommerce\PayPalCommerce\Vendor\Dhii\Collection\ClearableContainerInterface;
use WooCommerce\PayPalCommerce\Vendor\Dhii\Collection\MutableContainerInterface;
use WooCommerce\PayPalCommerce\Vendor\Dhii\Container\Exception\NotFoundException;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerExceptionInterface;
/**
* A container for data that is accessible once per init.
*
* The {@see init()} method copies data from the internal container into memory,
* then clears it. The data is still accessible from memory,
* but no longer from internal container.
*
* This is useful for flash data, i.e. data that should only be accessible
* once per request. If a session-specific persistent container is used
* as storage, this will become session-based flash data.
*/
class FlashContainer implements
MutableContainerInterface,
ClearableContainerInterface
{
/** @var MutableContainerInterface */
protected $data;
/** @var string */
protected $dataKey;
/** @var array<array-key, scalar> */
protected $flashData = [];
/**
* @param MutableContainerInterface $data The storage.
* @param string $dataKey The key to be used to store data in the storage.
*/
public function __construct(MutableContainerInterface $data, string $dataKey)
{
$this->data = $data;
$this->dataKey = $dataKey;
}
/**
* Prepare storage before use.
*
* Should be called once before accessing data through this class.
* Will clear the data for the configured key from the storage.
*/
public function init(): void
{
$this->flashData = $this->data->has($this->dataKey)
? $this->data->get($this->dataKey)
: [];
$this->purgePersistentData();
}
/**
* @inheritDoc
*/
public function has($key)
{
return array_key_exists($key, $this->flashData);
}
/**
* @inheritDoc
*
* Retrieves the value for the specified key from memory.
*/
public function get($key)
{
if (!array_key_exists($key, $this->flashData)) {
throw new NotFoundException(sprintf('Flash data not found for key "%1$s"', $key));
}
return $this->flashData[$key];
}
/**
* @inheritDoc
*
* Assigns the given value to the specified key in memory, and persists this change in storage.
*/
public function set(string $key, $value): void
{
$this->flashData[$key] = $value;
$this->persist($this->flashData);
}
/**
* @inheritDoc
*
* Removes the specified key from memory, and persists this change in storage.
*/
public function unset(string $key): void
{
if (!array_key_exists($key, $this->flashData)) {
throw new NotFoundException(sprintf('Flash data not found for key "%1$s"', $key));
}
unset($this->flashData[$key]);
$this->persist($this->flashData);
}
/**
* @inheritDoc
*
* Clears all of this instance's data from memory.
*/
public function clear(): void
{
$this->flashData = [];
$this->persist($this->flashData);
}
/**
* Clear data from internal storage.
*/
protected function purgePersistentData(): void
{
$this->data->set($this->dataKey, []);
}
/**
* Persist this instance's data from memory into storage.
*
* @param array<array-key, scalar> $data The data to persist.
*/
protected function persist(array $data): void
{
$this->data->set($this->dataKey, $data);
}
}