<?php
/**
* The message repository.
*
* @package WooCommerce\PayPalCommerce\AdminNotices\Repository
*/
declare (strict_types=1);
namespace WooCommerce\PayPalCommerce\AdminNotices\Repository;
use WooCommerce\PayPalCommerce\AdminNotices\Entity\Message;
use WooCommerce\PayPalCommerce\AdminNotices\Entity\PersistentMessage;
/**
* Class Repository
*/
class Repository implements \WooCommerce\PayPalCommerce\AdminNotices\Repository\RepositoryInterface
{
const NOTICES_FILTER = 'ppcp.admin-notices.current-notices';
const PERSISTED_NOTICES_OPTION = 'woocommerce_ppcp-admin-notices';
/**
* Returns current messages to display, which excludes muted messages.
*
* @return Message[]
*/
public function current_message(): array
{
return array_filter(
/**
* Returns the list of admin messages.
*/
(array) apply_filters(self::NOTICES_FILTER, array()),
function ($element): bool {
if ($element instanceof PersistentMessage) {
return !$element->is_muted();
}
return $element instanceof Message;
}
);
}
/**
* Adds a message to persist between page reloads.
*
* @param Message $message The message.
*
* @return void
*/
public function persist(Message $message): void
{
$persisted_notices = get_option(self::PERSISTED_NOTICES_OPTION) ?: array();
$persisted_notices[] = $message->to_array();
update_option(self::PERSISTED_NOTICES_OPTION, $persisted_notices);
}
/**
* Adds a message to persist between page reloads.
*
* @return array|Message[]
*/
public function get_persisted_and_clear(): array
{
$notices = array();
$persisted_data = get_option(self::PERSISTED_NOTICES_OPTION) ?: array();
foreach ($persisted_data as $notice_data) {
if (is_array($notice_data)) {
$notices[] = Message::from_array($notice_data);
}
}
update_option(self::PERSISTED_NOTICES_OPTION, array(), \true);
return $notices;
}
}