An error occurred while loading the file. Please try again.
-
Côme Chilliet authored
issue #6172
Unverifiedb9f14bf6
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2003-2010 Cajus Pollmeier
Copyright (C) 2011-2020 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);
// LDAP_ERROR is the same as ERROR_DIALOG
define('LDAP_ERROR', 10003);
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;
private $s_Message;
private $i_Type;
private $i_ID;
private $a_Trace;
/*!
* \brief Message dialog constructor
*
* \param string $title The title of the message dialog (plain string)
*
* \param string $message The message of the message dialog (HTML)
*
* \param int $type The type of the message dialog, by default = INFO_DIALOG
*
* \param array $trace The trace from where the message was built
*/
public function __construct (string $title, string $message, int $type = INFO_DIALOG, array $trace = [])
{
if (!in_array($type, [INFO_DIALOG,WARNING_DIALOG,ERROR_DIALOG,CONFIRM_DIALOG,FATAL_ERROR_DIALOG])) {
trigger_error('Invalid msg_dialog type.');
$type = INFO_DIALOG;
}
$this->i_ID = (int)preg_replace('/[^0-9]*/', '', microtime());
$this->s_Title = $title;
$this->s_Message = $message;
$this->i_Type = $type;
$this->a_Trace = $trace;
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
protected function show ()
{
global $config;
if (empty($this->s_Message)) {
return;
}
if ((!session::is_set('errorsAlreadyPosted')) || !is_array(session::get('errorsAlreadyPosted'))) {
session::set('errorsAlreadyPosted', []);
}
$errorsAlreadyPosted = session::get('errorsAlreadyPosted');
if (!isset($errorsAlreadyPosted[$this->s_Title.$this->s_Message])) {
$errorsAlreadyPosted[$this->s_Title.$this->s_Message] = 0;
}
$errorsAlreadyPosted[$this->s_Title.$this->s_Message]++;
session::set('errorsAlreadyPosted', $errorsAlreadyPosted);
if ($errorsAlreadyPosted[$this->s_Title.$this->s_Message] > 1) {
/* Skip if the same message was already reported once */
return;
}
/* Append trace information, only if error messages are enabled */
if (isset($config) && is_object($config) &&
$config->get_cfg_value('displayerrors') == 'TRUE') {
if (empty($this->a_Trace)) {
$this->a_Trace = debug_backtrace();
}
} else {
$this->a_Trace = [];
}
if (session::is_set('msg_dialogs')) {
$msg_dialogs = session::get('msg_dialogs');
} else {
$msg_dialogs = [];
}
$msg_dialogs[] = $this;
session::set('msg_dialogs', $msg_dialogs);
}
/*!
* \brief Display a message dialog
*
* \param string|object $title The title of the message dialog, or the error object
*
* \param string $message The message of the message dialog (HTML)
*
* \param int $type The type of the message dialog, by default = INFO_DIALOG
*
* \param array $trace The trace from where the message was built
*/
public static function display ($title, string $message, int $type = INFO_DIALOG, array $trace = [])
{
if ($type === FATAL_ERROR_DIALOG) {
/* Deprecated */
throw new FatalError($message);
}
if ($title instanceof FusionDirectoryError) {
static::display(...$title->computeMsgDialogParameters());
return;
}
$dialog = new msg_dialog($title, $message, $type, $trace);
$dialog->show();
}
/*
* \brief Display checks
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
*
* \param array $messages Contains messages
*/
public static function displayChecks ($messages)
{
foreach ($messages as $error) {
if ($error instanceof FusionDirectoryError) {
static::display(...$error->computeMsgDialogParameters());
} else {
static::display(_('Error'), $error, ERROR_DIALOG);
}
}
}
/*
* \brief Accessor of message dialog's identifier
*
* \return The identifier of the message dialog
*/
public function getId (): int
{
return $this->i_ID;
}
/*!
* \brief Check if the message is confirmed by user
*
* \return True if is confirmed, else return false
*/
public function is_confirmed (): bool
{
return isset($_POST['MSG_OK'.$this->i_ID]);
}
/*!
* \brief Return an array with infos for the template
*/
protected function getDialogInfos (): array
{
return [
'id' => $this->i_ID,
'type' => $this->i_Type,
'title' => $this->s_Title,
'message' => $this->s_Message,
'trace' => ((count($this->a_Trace) > 0) ? print_a($this->a_Trace, TRUE) : ''),
];
}
/*!
* \brief Accessor of the message dialog rendered HTML
*/
public static function get_dialogs (): string
{
if (session::is_set('msg_dialogs') &&
is_array(session::get('msg_dialogs')) &&
count(session::get('msg_dialogs'))) {
$smarty = get_smarty();
$msg_dialogs = session::get('msg_dialogs');
$dialogInfos = [];
$dialogIds = [];
foreach ($msg_dialogs as $dialog) {
$dialogInfos[] = $dialog->getDialogInfos();
$dialogIds[] = $dialog->getId();
}
session::set('msg_dialogs', []);
$smarty->assign('dialogInfos', $dialogInfos);
$smarty->assign('dialogIds', $dialogIds);
211212213214215216217
return $smarty->fetch(get_template_path('msg_dialog.tpl'));
} else {
return '';
}
}
}