<?
define
("UNKNOWN""unknown"); // default for emitted modulenames
define("DEFAULT_LEVEL""1");

define("MOD_DISPLAY","display"); // Werkt niet meer ?

include_once(INCLUDE_DIR."/translation.inc.php");

/**
 * Class Message
 *
 * This is an abstract class that gets extended by DebugMessage and
 * ErrorMessage
 * @package   Messages
 * @author    Herman Suijs
 */

class Message extends ModuleBase {
  var 
$name "Message";
  var 
$messages = array();
  var 
$enabled false// Messages are disabled by default
  
var $noop// Stands for No Operation, that is no action
  //var $show_level = DEFAULT_LEVEL;
  
var $translator;
  var 
$shown false;
  var 
$content "";

  
/**
   * Constructor
   */
  
function Message() {
    global 
$wrap_up_mods,$name
    
// Don't know why, but is needed, because ...
    // ... $GLOBAL['name'] is not working.
    //$GLOBAL['wrap_up_mods'][$GLOBAL['name']] = 'wrap_up';
    
$wrap_up_mods[$name] = 'wrap_up'// local wrap_up function
    //echo $name ."[".$this->id."]: " . $wrap_up_mods[$name] ."<br>";
    
$this->translator = new Translator(TRANSLATE_BY_DEFAULT);
    
$this->ModuleBase();
  } 
/* function Message() */

  /**
   * Get execution level
   *
   * This is for compatibility with Module
   */
  
function execlevel() {
  } 
/* function execlevel() */

  /**
   * Set No Operation to a value
   *
   * @param   $bool: boolean value for operation
   */
  
function set_noop($bool) {
    
$this->noop=$bool;
  } 
/* function set_noop($bool) */

  /**
   * Turn of operation (No Operation)
   */
  
function noop() {
    return 
$this->noop;
  } 
/* function noop() */
    
  /**
   * Test to add message
   *
   * This function should test if it is necessary to store this message,
   * depending on the level
   * @param   $level: message level
   */
  
function addmessage($level) {
    
// always show messages, overridden for debug to show only messages
    // till specific messagelevel. see debug.mes.php and debug.mod.php
    
return true;
  } 
/* function addmessage($level) */

  /**
   * Add the message to the messages array (depricated)
   *
   * This routine is depricated. The add-function should be used.
   * @param   $message:    the message
   * @param   $module: the module that generated the message
   * @param   $msglevel: the messagelevel to store the message
   */
  
function add_message($message,$module=UNKNOWN,$msglevel=DEFAULT_LEVEL) {
    
// Add a message to the debug messages-base
    
$this->messages[] = $module "[" $msglevel "]: $message";
    
$this->message_added($msglevel);
  } 
/* function add_message($message,... */

  /**
   * Function after a message is added
   *
   * This is for the subclasses
   *
   * @param   $msglevel: message level to use
   * @param   $module: name of the module which created the message
   * @param   $message: actual message
   */
  
function message_added($msglevel,$module="",$message="") {
    
// In a subclass add functionality after a message is added.
  
/* function message_added($msglev... */

  /**
   * Add the message to the messages array
   *
   * This is the actual function that adds the message to the array, takes
   * care of coloring and calls the translation function.
   * @param   $msglevel: message level
   * @param   $module: name of the module that added the message
   * @param   $message: the actual message, should contain %s for values
   * @param   $varx: the values to fill in in the message
   */
  
function add($msglevel,$module,$message,$var1="",$var2="",$var3="",$var4="",$var5="",$var6="",$var7="",$var8="",$var9="",$var10="",$var11="",$var12="") {
    
$var = array(1=>$var1,2=>$var2,3=>$var3,4=>$var4,5=>$var5,6=>$var6,7=>$var7,8=>$var8,9=>$var9,10=>$var10,11=>$var11,12=>$var12);
    while (list(
$name,$value) = each($var)) {
      
$var[$name] = "<font color=".VARIABLE_COLOR.">$value</font>";
    } 
/* while (list($name,$value) = ea... */
    
if ($this->addmessage($msglevel)) {
      
$new_message $this->translator->translate($message,$var[1],$var[2],$var[3],$var[4],$var[5],$var[6],$var[7],$var[8],$var[9],$var[10],$var[11],$var[12]);
      
$this->messages[] = "$module [ $msglevel ]: $new_message";
    } 
/* if ($this->addmessage($msgleve... */
    
$this->message_added($msglevel,$module,$new_message);
    
$this->shown=false;
  } 
/* function add($msglevel,$module... */

  /**
   * Add a whole array to the message array
   *
   * This function is used for the debug messages created before the debug
   * module is loaded
   */
  
function message_array($m_array) {
    
// Add an array of messages to the debug message-base
    
reset($m_array);
    while (list(
$module,$message) = each($m_array)) {
      
//$this->add_message($message,$module);
      
$this->add(-1,$module,$message);
    } 
/* while (list($module,$message) ... */
  
/* function message_array($m_arra... */

  /**
   * Display the messages
   *
   * Check if some content is already created. If so, show the content and
   * display the messages seperately. If not, set the content to the
   * messages and show the content.
   *
   * This should change to properly work with templates. The messages
   * should be entered into the template.
   */
  
function display() {
    global 
$formHandler;
    while (list(
$name,$value) = each($this->messages)) {
      
$content .= "<li><font color=".INDEX_COLOR.">$name</font>: $value\n";
    } 
/* while (list($name,$value) = ea... */
    
if (empty($formHandler)) {
      print 
$content;
    } elseif (!
$formHandler->isset_content($this->content)) {
      
$formHandler->set_content($content,$this->content);
      print 
$formHandler->get_content($this->content,true);
    } else { 
/* if (!$formHandler->isset_conte... */
      
print $formHandler->get_content($this->content,true);
      print 
$content;
   
/* if (!$formHandler->isset_conte... */  }
    print 
"<br>\n";
    
$this->shown true;
    
$this->messages=array();
  } 
/* function display() */

  /**
   * Add some functionality after wrapping up
   *
   * This may be used in a subModule
   */
  
function wrapped_up() {
    
// In a subclass add functionality after the script has wrapped up
  
/* function wrapped_up() */

  /**
   * Wrap up
   *
   * Print messages when breaking up, if not already shown
   */
  
function wrap_up() {
    global 
$modules;
    
//echo "wrap_up function called for " . $this->name . "<br>";
    
if ($this->enabled&&!$this->shown) {
      
//echo $GLOBAL[modules] . " ($modules) en module " . $modules[MOD_DISPLAY];
      //$modules[MOD_DISPLAY]->message_action($this->messages,$this->name());
      //print "<p><li>" . join("\n<li>", $message);
      
$this->display();
    } 
/* if ($this->enabled&&!$this->sh... */
    //echo $this->name." destructor called<br>";
    
$this->wrapped_up();
  } 
/* function wrap_up() */

/* class Message extends ModuleBa... */