class_msg_dialog.inc 7.43 KiB
<?php
/*
  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
  Copyright (C) 2003-2010  Cajus Pollmeier
  Copyright (C) 2011-2013  FusionDirectory
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
/*!
 * \file class_msg_dialog.inc
 * Source code for class message dialog
define("INFO_DIALOG",         10001);
define("WARNING_DIALOG",      10002);
define("ERROR_DIALOG",        10003);
define("LDAP_ERROR",          10003); // LDAP_ERROR is the same as ERROR_DIALOG
define("CONFIRM_DIALOG",      10004);
define("FATAL_ERROR_DIALOG",  10006);
/*!
 * \brief This class contains all the function needed to make messages
 *  dialogs
class msg_dialog
  private $s_Title    = "Undefined";
  private $s_Message  = "Undefined";
  private $i_Type     = INFO_DIALOG;
  private $i_ID       = 0;
  private $a_Trace    = array();
  /*!
   * \brief Message dialog constructor
   * \param string $s_title The title of the message dialog
   * \param string $s_message The message of the message dialog
   * \param string $i_type The type of the message dialog, by default = INFO_DIALOG
  public function __construct($s_title, $s_message, $i_type)
    global $config;
    if (empty($s_message)) {
      return;
    if (!in_array($i_type, array(INFO_DIALOG,WARNING_DIALOG,ERROR_DIALOG,CONFIRM_DIALOG,FATAL_ERROR_DIALOG))) {
      trigger_error("Invalid msg_dialog type.");
      $i_type = INFO_DIALOG;
    if ((!session::is_set('errorsAlreadyPosted')) || !is_array(session::get('errorsAlreadyPosted'))) {
      session::set('errorsAlreadyPosted', array());
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
$errorsAlreadyPosted = session::get('errorsAlreadyPosted'); if (!isset($errorsAlreadyPosted[$s_title.$s_message])) { $errorsAlreadyPosted[$s_title.$s_message] = 0; } $errorsAlreadyPosted[$s_title.$s_message]++; if ($errorsAlreadyPosted[$s_title.$s_message] <= 1) { $this->i_ID = preg_replace("/[^0-9]*/", "", microtime()); $this->s_Title = $s_title; $this->s_Message = $s_message; $this->i_Type = $i_type; /* Append trace information, only if error messages are enabled */ if (isset($config) && is_object($config) && $config->get_cfg_value("displayerrors") == "TRUE") { $this->a_Trace = debug_backtrace(); } if (!session::is_set('msg_dialogs')) { session::set('msg_dialogs', array()); } if ($this->i_Type == FATAL_ERROR_DIALOG) { restore_error_handler(); error_reporting(E_ALL); echo $this->execute(); } else { $msg_dialogs = session::get('msg_dialogs'); $msg_dialogs[] = $this; session::set('msg_dialogs', $msg_dialogs); } } session::set('errorsAlreadyPosted', $errorsAlreadyPosted); } /*! * \brief Display a message dialog * * \param string $s_title The title of the message dialog * * \param string $s_message The message of the message dialog * * \param string $i_type The type of the message dialog, by default = INFO_DIALOG */ public static function display($s_title, $s_message, $i_type = INFO_DIALOG) { new msg_dialog($s_title, $s_message, $i_type); } /* * \brief Display checks * * \param array $messages Contains messages */ public static function displayChecks($messages) { /* Assemble the message array to a plain string */ foreach ($messages as $error) { msg_dialog::display(_("Error"), $error, ERROR_DIALOG); } } /* * \brief Accessor of message dialog's identifier * * \return The identifier of the message dialog */ public function get_ID() { return $this->i_ID;
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
} /*! * \brief Run the message dialog */ public function execute() { global $config; if ($this->i_Type == FATAL_ERROR_DIALOG) { $display = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/transitional.dtd\"> <html><head> <title>FusionDirectory startup failed</title> </head><body>"; if (isset($config) && is_object($config) && $config->get_cfg_value("displayerrors") == "TRUE") { list($trace,) = html_trace(); $display .= $trace; } $display .= "<table style='width:100%; border:2px solid red;'> <tr><td style='vertical-align:top;padding:10px'> <img src='images/error.png' alt='{t}Error{/t}'> </td><td style='width:100%'> <b>".$this->s_Title."</b><br> ".$this->s_Message."<br><br> "._("Please fix the above error and reload the page.")." </td></tr> </table></body></html>"; return $display; } else { $smarty = get_smarty(); $smarty->assign("s_Trace", print_a($this->a_Trace, TRUE)); $smarty->assign("i_TraceCnt", count($this->a_Trace)); $smarty->assign("i_Type", $this->i_Type); $smarty->assign("s_Message", $this->s_Message); $smarty->assign("s_Title", $this->s_Title); $smarty->assign("i_ID", $this->i_ID); $smarty->assign("frame", FALSE); $smarty->assign("JS", TRUE); return $smarty->fetch(get_template_path('msg_dialog.tpl')); } } /*! * \brief Check if the message is confirmed by user * * \return True if is confirmed, else return false */ public function is_confirmed() { if (isset($_POST['MSG_OK'.$this->i_ID])) { return TRUE; } else { return FALSE; } } /*! * \brief Accessor of the message dialog */ public static function get_dialogs() { $return = ""; $dialog_ids = ""; if (session::is_set('msg_dialogs') && is_array(session::get('msg_dialogs')) &&