mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-30 21:11:02 +00:00
231 lines
6.8 KiB
PHP
231 lines
6.8 KiB
PHP
|
<?php
|
||
|
//--------------------------------------------------------------------------------------------------
|
||
|
// Session-Based Flash Messages v1.0
|
||
|
// Copyright 2012 Mike Everhart (http://mikeeverhart.net)
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
//
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Description:
|
||
|
//------------------------------------------------------------------------------
|
||
|
//
|
||
|
// Stores messages in Session data to be easily retrieved later on.
|
||
|
// This class includes four different types of messages:
|
||
|
// - Success
|
||
|
// - Error
|
||
|
// - Warning
|
||
|
// - Information
|
||
|
//
|
||
|
// See README for basic usage instructions, or see samples/index.php for more advanced samples
|
||
|
//
|
||
|
//--------------------------------------------------------------------------------------------------
|
||
|
// Changelog
|
||
|
//--------------------------------------------------------------------------------------------------
|
||
|
//
|
||
|
// 2011-05-15 - v1.0 - Initial Version
|
||
|
//
|
||
|
//--------------------------------------------------------------------------------------------------
|
||
|
|
||
|
class Messages {
|
||
|
|
||
|
//-----------------------------------------------------------------------------------------------
|
||
|
// Class Variables
|
||
|
//-----------------------------------------------------------------------------------------------
|
||
|
var $msgId;
|
||
|
var $msgTypes = array( 'help', 'info', 'warning', 'success', 'error' );
|
||
|
var $msgClass = 'messages';
|
||
|
var $msgWrapper = "<div class='%s %s'><a href='#' class='closeMessage'>X</a>\n%s</div>\n";
|
||
|
var $msgBefore = '<p>';
|
||
|
var $msgAfter = "</p>\n";
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
* @author Mike Everhart
|
||
|
*/
|
||
|
public function __construct() {
|
||
|
|
||
|
// Generate a unique ID for this user and session
|
||
|
$this->msgId = md5(uniqid());
|
||
|
|
||
|
// Create the session array if it doesnt already exist
|
||
|
if( !array_key_exists('flash_messages', $_SESSION) ) $_SESSION['flash_messages'] = array();
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add a message to the queue
|
||
|
*
|
||
|
* @author Mike Everhart
|
||
|
*
|
||
|
* @param string $type The type of message to add
|
||
|
* @param string $message The message
|
||
|
* @param string $redirect_to (optional) If set, the user will be redirected to this URL
|
||
|
* @return bool
|
||
|
*
|
||
|
*/
|
||
|
public function add($type, $message, $redirect_to=null) {
|
||
|
|
||
|
if( !isset($_SESSION['flash_messages']) ) return false;
|
||
|
|
||
|
if( !isset($type) || !isset($message[0]) ) return false;
|
||
|
|
||
|
// Replace any shorthand codes with their full version
|
||
|
if( strlen(trim($type)) == 1 ) {
|
||
|
$type = str_replace( array('h', 'i', 'w', 'e', 's'), array('help', 'info', 'warning', 'error', 'success'), $type );
|
||
|
|
||
|
// Backwards compatibility...
|
||
|
} elseif( $type == 'information' ) {
|
||
|
$type = 'info';
|
||
|
}
|
||
|
|
||
|
// Make sure it's a valid message type
|
||
|
if( !in_array($type, $this->msgTypes) ) die('"' . strip_tags($type) . '" is not a valid message type!' );
|
||
|
|
||
|
// If the session array doesn't exist, create it
|
||
|
if( !array_key_exists( $type, $_SESSION['flash_messages'] ) ) $_SESSION['flash_messages'][$type] = array();
|
||
|
|
||
|
$_SESSION['flash_messages'][$type][] = $message;
|
||
|
|
||
|
if( !is_null($redirect_to) ) {
|
||
|
header("Location: $redirect_to");
|
||
|
exit();
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------------------------
|
||
|
// display()
|
||
|
// print queued messages to the screen
|
||
|
//-----------------------------------------------------------------------------------------------
|
||
|
/**
|
||
|
* Display the queued messages
|
||
|
*
|
||
|
* @author Mike Everhart
|
||
|
*
|
||
|
* @param string $type Which messages to display
|
||
|
* @param bool $print True = print the messages on the screen
|
||
|
* @return mixed
|
||
|
*
|
||
|
*/
|
||
|
public function display($type='all', $print=true) {
|
||
|
$messages = '';
|
||
|
$data = '';
|
||
|
|
||
|
if( !isset($_SESSION['flash_messages']) ) return false;
|
||
|
|
||
|
if( $type == 'g' || $type == 'growl' ) {
|
||
|
$this->displayGrowlMessages();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Print a certain type of message?
|
||
|
if( in_array($type, $this->msgTypes) ) {
|
||
|
foreach( $_SESSION['flash_messages'][$type] as $msg ) {
|
||
|
$messages .= $this->msgBefore . $msg . $this->msgAfter;
|
||
|
}
|
||
|
|
||
|
$data .= sprintf($this->msgWrapper, $this->msgClass, $type, $messages);
|
||
|
|
||
|
// Clear the viewed messages
|
||
|
$this->clear($type);
|
||
|
|
||
|
// Print ALL queued messages
|
||
|
} elseif( $type == 'all' ) {
|
||
|
foreach( $_SESSION['flash_messages'] as $type => $msgArray ) {
|
||
|
$messages = '';
|
||
|
foreach( $msgArray as $msg ) {
|
||
|
$messages .= $this->msgBefore . $msg . $this->msgAfter;
|
||
|
}
|
||
|
$data .= sprintf($this->msgWrapper, $this->msgClass, $type, $messages);
|
||
|
}
|
||
|
|
||
|
// Clear ALL of the messages
|
||
|
$this->clear();
|
||
|
|
||
|
// Invalid Message Type?
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Print everything to the screen or return the data
|
||
|
if( $print ) {
|
||
|
echo $data;
|
||
|
} else {
|
||
|
return $data;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Check to see if there are any queued error messages
|
||
|
*
|
||
|
* @author Mike Everhart
|
||
|
*
|
||
|
* @return bool true = There ARE error messages
|
||
|
* false = There are NOT any error messages
|
||
|
*
|
||
|
*/
|
||
|
public function hasErrors() {
|
||
|
return empty($_SESSION['flash_messages']['error']) ? false : true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check to see if there are any ($type) messages queued
|
||
|
*
|
||
|
* @author Mike Everhart
|
||
|
*
|
||
|
* @param string $type The type of messages to check for
|
||
|
* @return bool
|
||
|
*
|
||
|
*/
|
||
|
public function hasMessages($type=null) {
|
||
|
if( !is_null($type) ) {
|
||
|
if( !empty($_SESSION['flash_messages'][$type]) ) return $_SESSION['flash_messages'][$type];
|
||
|
} else {
|
||
|
foreach( $this->msgTypes as $type ) {
|
||
|
if( !empty($_SESSION['flash_messages']) ) return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Clear messages from the session data
|
||
|
*
|
||
|
* @author Mike Everhart
|
||
|
*
|
||
|
* @param string $type The type of messages to clear
|
||
|
* @return bool
|
||
|
*
|
||
|
*/
|
||
|
public function clear($type='all') {
|
||
|
if( $type == 'all' ) {
|
||
|
unset($_SESSION['flash_messages']);
|
||
|
} else {
|
||
|
unset($_SESSION['flash_messages'][$type]);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public function __toString() { return $this->hasMessages(); }
|
||
|
|
||
|
public function __destruct() {
|
||
|
//$this->clear();
|
||
|
}
|
||
|
|
||
|
|
||
|
} // end class
|
||
|
?>
|