diff --git a/application/libraries/messages.php b/application/libraries/messages.php new file mode 100644 index 0000000..3917b16 --- /dev/null +++ b/application/libraries/messages.php @@ -0,0 +1,103 @@ + + * + * 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 + * @url http://www.designbyfail.com/ + * @version 1.0 + */ + +class Messages +{ + var $_ci; + var $_types = array('success', 'error', 'notice'); + + 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; + } +} \ No newline at end of file