/home/arranoyd/public_html/wp-content/plugins/unyson/framework/helpers/class-fw-flash-messages.php
<?php if (!defined('FW')) die('Forbidden');
/**
* Set flash messages
**
* Store messages in session (to not be lost between redirects) and remove them after they were shown to the user
*/
class FW_Flash_Messages
{
private static $available_types = array(
// 'type' => 'backend class/type' (only 2 backend types exists: error and updated)
'error' => 'error',
'warning' => 'update-nag',
'info' => 'updated',
'success' => 'updated'
);
private static $session_key = 'fw_flash_messages';
private static $frontend_printed = false;
private static function get_messages()
{
$messages = FW_Session::get(self::$session_key);
if (empty($messages) || !is_array($messages)) {
$messages = array_fill_keys(array_keys(self::$available_types), array());
}
return $messages;
}
private static function set_messages(array $messages)
{
FW_Session::set(self::$session_key, $messages);
}
/**
* Remove messages with ids from pending remove
*/
private static function process_pending_remove_ids()
{
$pending_remove = array();
foreach (self::get_messages() as $messages) {
if (empty($messages)) {
continue;
}
foreach ($messages as $message) {
if (empty($message['remove_ids'])) {
continue;
}
foreach ($message['remove_ids'] as $remove_id) {
$pending_remove[$remove_id] = true;
}
}
}
if (empty($pending_remove)) {
return;
}
$types = self::get_messages();
foreach ($types as $type => $messages) {
if (empty($messages)) {
continue;
}
foreach ($messages as $id => $message) {
if (isset($pending_remove[$id])) {
unset($types[$type][$id]);
}
}
}
self::set_messages( $types );
}
/**
* Add flash message
**
* @param string $id Unique id of the message
* @param string $message Message (can be html)
* @param string $type Type from $available_types
* @param array $removed_ids Remove flashes with this id(s)
* (For e.g. your message is success and some known error messages ids needs to be removed
* because they are not relevant anymore, your success message suppress/cancels them)
*/
public static function add($id, $message, $type = 'info', array $removed_ids = array())
{
if (!isset(self::$available_types[$type])) {
trigger_error(sprintf(__('Invalid flash message type: %s', 'tfuse'), $type), E_USER_WARNING);
$type = 'info';
}
$messages = self::get_messages();
$messages[$type][$id] = array(
'message' => $message,
'remove_ids' => $removed_ids,
);
self::set_messages($messages);
}
/**
* Use this method to print messages html in backend
* (used in action at the end of the file)
* @internal
*/
public static function _print_backend()
{
if (!session_id()) {
return; // fixes https://github.com/ThemeFuse/Unyson/issues/2219
}
self::process_pending_remove_ids();
$html = array_fill_keys(array_keys(self::$available_types), '');
$all_messages = self::get_messages();
foreach ($all_messages as $type => $messages) {
if (!empty($messages)) {
foreach ($messages as $id => $data) {
$html[$type] .=
'<div class="'. self::$available_types[$type] .' fw-flash-message">'.
'<p data-id="'. esc_attr($id) .'">'. $data['message'] .'</p>'.
'</div>';
unset($all_messages[$type][$id]);
}
$html[$type] = '<div class="fw-flash-type-'. $type .'">'. $html[$type] .'</div>';
}
}
unset($success, $error, $info);
self::set_messages($all_messages);
echo '<div class="fw-flash-messages">'. implode("\n\n", $html) .'</div>';
}
/**
* Use this method to print messages html in frontend
* @return bool If some html was printed or not
*/
public static function _print_frontend()
{
self::process_pending_remove_ids();
$html = array_fill_keys(array_keys(self::$available_types), '');
$all_messages = self::get_messages();
$messages_exists = false;
foreach ($all_messages as $type => $messages) {
if (empty($messages)) {
continue;
}
foreach ($messages as $id => $data) {
$html[$type] .= '<li class="fw-flash-message">'. nl2br($data['message']) .'</li>';
unset($all_messages[$type][$id]);
}
$html[$type] = '<ul class="fw-flash-type-'. $type .'">'. $html[$type] .'</ul>';
$messages_exists = true;
}
self::set_messages($all_messages);
self::$frontend_printed = true;
if ($messages_exists) {
echo '<div class="fw-flash-messages">';
echo implode("\n\n", $html);
echo '</div>';
return true;
} else {
return false;
}
}
public static function _frontend_printed()
{
return self::$frontend_printed;
}
public static function _get_messages($clear = false)
{
self::process_pending_remove_ids();
$messages = self::get_messages();
if ($clear) {
self::_clear();
}
return $messages;
}
/**
* Clear the FW_Flash_Messages messages
*
* @since 2.6.15
*/
public static function _clear() {
self::set_messages(array());
}
}