-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Messages
Derek Jones edited this page Jul 5, 2012
·
9 revisions
This is a library inspired by (but not derived from) the Horde Notification http://www.horde.org/ to enable your scripts to write messages that can be output to the end-user or logged to a file. By default there are 4 message levels:
- success - a successful event has take place
- message - a notification message
- warning - a warning about something
- error - an error has occurred
Requires:
- Sessions - The messages are stored in the user's session data, so this is needed.
Use of the Message system is as easy as calling the add() method as follows:
$this->load->library('session');
$this->load->library('messages');
// an error
$this->messages->add('You did not tell us your name!', 'error');
// display an informational message
$this->messages->add('You last logged in 6 May 1976.', 'message');
// set a message about a users authentication status
if ($authenticated) {
$this->messages->add('You are now logged in!', 'success');
} else {
$this->messages->add('You are not logged in.', 'warning');
}
In your Controller:
// NOTE: calling this function also clears the message stack!
$messages = $this->messages->get();
In your Template:
<style type="text/css">
/* Content Elements: Messages */
#messages{
padding: 0;
margin: 0;
font-size: 14px;
font-weight: bold;
margin-top: 4px;
clear: all;
white-space: nowrap;
}
.message {
padding: 4px;
width: 100%;
color: #ffffff;
background-color: #aaa9a6;
float: left;
margin-bottom: 3px;
}
.warning {
padding: 4px;
width: 100%;
color: #ffffff;
background-color: #ff9900;
float: left;
margin-bottom: 3px;
}
.success {
padding: 4px;
width: 100%;
color: #ffffff;
background-color: #009000;
float: left;
margin-bottom: 3px;
}
.error {
padding: 4px;
width: 100%;
color: #ffffff;
background-color: #900000;
float: left;
margin-bottom: 3px;
}
</style>
<div id="messages">
<?php
// display all messages
if (is_array($messages)):
foreach ($messages as $type => $msgs):
foreach ($msgs as $message):
echo ('<span class="' . $type .'">' . $message . '</span>');
endforeach;
endforeach;
endif;
?>
</div>
Put this in your /application/libraries/ folder:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Message:: a class for writing feedback message information to the session
*
* Copyright 2006 Vijay Mahrra & Sheikh Ahmed <[email protected]>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Vijay Mahrra & Sheikh Ahmed <[email protected]>
* @url http://www.designbyfail.com/
* @version 1.0
*/
class Messages
{
var $_ci;
var $_types = array('success', 'error', 'warning', 'message');
function Messages($params = array())
{
$this->_ci =& get_instance();
$this->_ci->load->library('session');
// check if theres already messages, if not, initialise the messages array in the session
$messages = $this->_ci->session->userdata('messages');
if (empty($messages)) {
$this->clear();
}
}
// clear all messages
function clear()
{
$messages = array();
foreach ($this->_types as $type) {
$messages[$type] = array();
}
$this->_ci->session->set_userdata('messages', $messages);
}
// add a message, default type is message
function add($message, $type = 'message')
{
$messages = $this->_ci->session->userdata('messages');
// handle PEAR errors gracefully
if (is_a($message, 'PEAR_Error')) {
$message = $message->getMessage();
$type = 'error';
} else if (!in_array($type, $this->_types)) {
// set the type to message if the user specified a type that's unknown
$type = 'message';
}
// don't repeat messages!
if (!in_array($message, $messages[$type]) && is_string($message)) {
$messages[$type][] = $message;
}
$messages = $this->_ci->session->set_userdata('messages', $messages);
}
// return messages of given type or all types, return false if none
function sum($type = null)
{
$messages = $this->_ci->session->userdata('messages');
if (!empty($type)) {
$i = count($messages[$type]);
return $i;
}
$i = 0;
foreach ($this->_types as $type) {
$i += count($messages[$type]);
}
return $i;
}
// return messages of given type or all types, return false if none, clearing stack
function get($type = null)
{
$messages = $this->_ci->session->userdata('messages');
if (!empty($type)) {
if (count($messages[$type]) == 0) {
return false;
}
return $messages[$type];
}
// return false if there actually are no messages in the session
$i = 0;
foreach ($this->_types as $type) {
$i += count($messages[$type]);
}
if ($i == 0) {
return false;
}
// order return by order of type array above
// i.e. success, error, warning and then informational messages last
foreach ($this->_types as $type) {
$return[$type] = $messages[$type];
}
$this->clear();
return $return;
}
}