$type,
'id' => $id,
'params' => array_slice($params, 1)
);
if (self::$flushed) self::renderList();
}
/**
* Render all currently queued messages, flushing the queue.
* After calling this, any further calls to add* will be rendered in
* place in the current page output.
*/
public static function renderList()
{
// Ajax
if (AJAX) {
foreach (self::$list as $item) {
$message = Dictionary::getMessage($item['id']);
foreach ($item['params'] as $index => $text) {
$message = str_replace('{{' . $index . '}}', '' . htmlspecialchars($text) . '', $message);
}
echo Render::parse('messagebox-' . $item['type'], array('message' => $message));
}
self::$list = array();
return;
}
// Non-Ajax
foreach (self::$list as $item) {
$message = Dictionary::getMessage($item['id']);
foreach ($item['params'] as $index => $text) {
$message = str_replace('{{' . $index . '}}', '' . htmlspecialchars($text) . '', $message);
}
Render::addTemplate('messagebox-' . $item['type'], array('message' => $message));
self::$alreadyDisplayed[] = $item;
}
self::$list = array();
self::$flushed = true;
}
/**
* Get all queued messages, flushing the queue.
* Useful in api/ajax mode.
*/
public static function asString()
{
$return = '';
foreach (self::$list as $item) {
$message = Dictionary::getMessage($item['id']);
foreach ($item['params'] as $index => $text) {
$message = str_replace('{{' . $index . '}}', $text, $message);
}
$return .= '[' . $item['type'] . ']: ' . $message . "\n";
self::$alreadyDisplayed[] = $item;
}
self::$list = array();
return $return;
}
/**
* Deserialize any messages from the current HTTP request and
* place them in the message queue.
*/
public static function fromRequest()
{
$messages = is_array($_REQUEST['message']) ? $_REQUEST['message'] : array($_REQUEST['message']);
foreach ($messages as $message) {
$data = explode('|', $message);
if (count($data) < 2 || !preg_match('/^(error|warning|info|success)$/', $data[0])) continue;
self::add($data[0], $data[1], array_slice($data, 1));
}
}
/**
* Turn the current message queue into a serialized version,
* suitable for appending to a GET or POST request
*/
public static function toRequest()
{
$parts = array();
foreach (array_merge(self::$list, self::$alreadyDisplayed) as $item) {
$str = 'message[]=' . urlencode($item['type'] . '|' .$item['id']);
if (!empty($item['params'])) {
$str .= '|' . urlencode(implode('|', $item['params']));
}
$parts[] = $str;
}
return implode('&', $parts);
}
}