Skip to content
World Wide Web Server edited this page Jul 4, 2012 · 9 revisions

Category:Libraries::Messages

[h3]Introduction[/h3] This is a library inpsired by (but not derived from) the Horde Notification [url=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

[h3]Requirements:[/h3] Requires:

  • Sessions - The messages are stored in the user's session data, so this is needed.

[h3]Usage:[/h3]

Use of the Message system is as easy as calling the [b]add()[/b] method as follows:

[h4]Load/Autoload Libraries[/h4] [code] $this->load->library('sessions'); $this->load->library('messages'); [/code]

[h4]Examples[/h4] [h3]Adding a Message[/h3] [code] // 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'); } [/code]

[h3]Retreiving Messages and Outputting as HTML[/h3] In your Controller: [code] // NOTE: calling this function also clears the message stack! $messages = $this->messages->get(); [/code] In your Template: [code] <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>

<?php // display all messages if (is_array($messages)): foreach ($messages as $type => $msgs): if (count($msgs > 0)): foreach ($msgs as $message): echo ('' . $message . ''); endforeach; endif; endforeach; endif; ?>
[/code]

[h2]Library 'Messages.php'[/h2] Put this in your /application/libraries/ folder: [code] <?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**

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;
}

} [/code]

Clone this wiki locally