2007-03-29 18:10:14 +02:00
|
|
|
<?php
|
|
|
|
/*******************************************************************************
|
|
|
|
* Copyright (C) 2007 Easter-eggs
|
2021-04-13 18:04:19 +02:00
|
|
|
* https://ldapsaisie.org
|
2007-03-29 18:10:14 +02:00
|
|
|
*
|
|
|
|
* Author: See AUTHORS file in top-level directory.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License version 2
|
|
|
|
* as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gestion des erreurs pour LdapSaisie
|
|
|
|
*
|
2008-04-25 16:09:27 +02:00
|
|
|
* Cette classe gère les retours d'erreurs.
|
2007-03-29 18:10:14 +02:00
|
|
|
*
|
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*/
|
|
|
|
class LSerror {
|
|
|
|
|
2022-12-31 21:15:19 +01:00
|
|
|
/**
|
|
|
|
* Registered error codes
|
2023-01-02 01:17:46 +01:00
|
|
|
* @var array<string|int,array>
|
2022-12-31 21:15:19 +01:00
|
|
|
*/
|
2009-01-25 15:37:03 +01:00
|
|
|
private static $_errorCodes = array(
|
|
|
|
'0' => array('msg' => "%{msg}")
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Define an error
|
2009-01-25 15:37:03 +01:00
|
|
|
*
|
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @param string $code The error code
|
|
|
|
* @param LSformat $msg The LSformat of the error message
|
|
|
|
* @param boolean $escape Set to false if you don't want the message
|
2020-05-28 15:48:25 +02:00
|
|
|
* to be escaped on display (Default: true)
|
2009-01-25 15:37:03 +01:00
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @return void
|
2020-04-29 15:54:21 +02:00
|
|
|
*/
|
2022-12-31 21:15:19 +01:00
|
|
|
public static function defineError($code='-1', $msg='', $escape=True) {
|
2009-01-25 15:37:03 +01:00
|
|
|
self :: $_errorCodes[$code] = array(
|
2020-05-28 15:48:25 +02:00
|
|
|
'msg' => $msg,
|
|
|
|
'escape' => boolval($escape),
|
2009-01-25 15:37:03 +01:00
|
|
|
);
|
|
|
|
}
|
2020-04-29 15:54:21 +02:00
|
|
|
|
2007-03-29 18:10:14 +02:00
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Add an error
|
2007-03-29 18:10:14 +02:00
|
|
|
*
|
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @param string $code The error code
|
|
|
|
* @param mixed $msg If error code is not specified (or not defined), it could content the
|
2020-05-28 15:48:25 +02:00
|
|
|
* the error message. If error code is provided (and defined), this parameter
|
|
|
|
* will be used to format registred error message (as LSformat). In this case,
|
|
|
|
* it could be any of data support by getFData function as $data parameter.
|
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @param boolean $escape Set to false if you don't want the message
|
2020-05-28 15:48:25 +02:00
|
|
|
* to be escaped on display (Default: true)
|
2007-03-29 18:10:14 +02:00
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @return void
|
2020-04-29 15:54:21 +02:00
|
|
|
*/
|
2020-05-28 15:48:25 +02:00
|
|
|
public static function addErrorCode($code=null, $msg=null, $escape=true) {
|
2020-08-07 16:11:32 +02:00
|
|
|
$_SESSION['LSerror'][] = self :: formatError($code, $msg, $escape);
|
2019-06-28 18:00:37 +02:00
|
|
|
if (class_exists('LSlog'))
|
2020-05-28 15:48:25 +02:00
|
|
|
LSlog :: error(self :: formatError($code, $msg, $escape, 'addslashes'));
|
2007-03-29 18:10:14 +02:00
|
|
|
}
|
2020-04-29 15:54:21 +02:00
|
|
|
|
2007-03-29 18:10:14 +02:00
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Show errors
|
2007-03-29 18:10:14 +02:00
|
|
|
*
|
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @param boolean $return True if you want to retrieved errors message. If false,
|
2020-05-28 15:48:25 +02:00
|
|
|
* (default), LSerrors template variable will be assigned
|
|
|
|
* with errors message.
|
2020-04-29 15:54:21 +02:00
|
|
|
*
|
2023-01-02 01:17:46 +01:00
|
|
|
* @return array|null
|
2009-01-02 17:00:25 +01:00
|
|
|
*/
|
2009-01-25 15:37:03 +01:00
|
|
|
public static function display($return=False) {
|
2020-05-28 15:48:25 +02:00
|
|
|
$errors = self :: getErrors();
|
2021-08-25 16:50:29 +02:00
|
|
|
if ($errors && $return)
|
|
|
|
return $errors;
|
|
|
|
LStemplate :: assign('LSerrors', base64_encode(json_encode($errors)));
|
2023-01-02 01:17:46 +01:00
|
|
|
return null;
|
2007-03-29 18:10:14 +02:00
|
|
|
}
|
2008-02-05 17:11:21 +01:00
|
|
|
|
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Format current errors message
|
2008-02-26 18:40:05 +01:00
|
|
|
*
|
2023-05-26 09:40:28 +02:00
|
|
|
* @param bool $reset Reset errors (optional, default: true)
|
|
|
|
*
|
2008-02-26 18:40:05 +01:00
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2023-01-02 01:17:46 +01:00
|
|
|
* @return array Array of formated error messages
|
2008-02-26 18:40:05 +01:00
|
|
|
*/
|
2023-05-26 09:40:28 +02:00
|
|
|
public static function getErrors($reset=true) {
|
2021-08-25 16:50:29 +02:00
|
|
|
$return = (
|
|
|
|
self :: errorsDefined()?
|
|
|
|
$_SESSION['LSerror']:
|
|
|
|
array()
|
|
|
|
);
|
2023-05-26 09:40:28 +02:00
|
|
|
if ($reset)
|
|
|
|
self :: resetError();
|
2021-08-25 16:50:29 +02:00
|
|
|
return $return;
|
2008-02-26 18:40:05 +01:00
|
|
|
}
|
2020-04-29 15:54:21 +02:00
|
|
|
|
2009-01-02 17:00:25 +01:00
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Format error message
|
2009-01-02 17:00:25 +01:00
|
|
|
*
|
2022-12-31 21:15:19 +01:00
|
|
|
* @param string|null $code The error code
|
|
|
|
* @param mixed $message Error message data for registred errors or the error message as string, or null
|
|
|
|
* @param bool $escape Set to false to disable escaping error message
|
|
|
|
* @param callable $escape_method The escape method (default: htmlentities)
|
2009-01-02 17:00:25 +01:00
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2022-12-31 21:15:19 +01:00
|
|
|
* @return string Le texte des erreurs
|
2009-01-02 17:00:25 +01:00
|
|
|
*/
|
2020-05-28 15:48:25 +02:00
|
|
|
private static function formatError($code=null, $message=null, $escape=True, $escape_method=null) {
|
|
|
|
if ($code && array_key_exists($code, self :: $_errorCodes)) {
|
2020-08-25 17:31:50 +02:00
|
|
|
$message = getFData(__(self :: $_errorCodes[$code]['msg']), $message);
|
2020-05-28 15:48:25 +02:00
|
|
|
if (!self :: $_errorCodes[$code]['escape'] === false)
|
|
|
|
$escape = false;
|
|
|
|
}
|
|
|
|
else if (!$message) {
|
|
|
|
if ($code)
|
|
|
|
$message = $code;
|
|
|
|
else
|
|
|
|
$message = _("Unknown error");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($escape !== false) {
|
|
|
|
if (is_null($escape_method) || !is_callable($escape_method))
|
|
|
|
$escape_method = 'htmlentities';
|
|
|
|
$code = call_user_func($escape_method, $code);
|
|
|
|
$message = call_user_func($escape_method, $message);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ($code?"(Code $code) ":"").$message;
|
2009-01-02 17:00:25 +01:00
|
|
|
}
|
2020-04-29 15:54:21 +02:00
|
|
|
|
2008-02-26 18:40:05 +01:00
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Check if some errors are defined
|
2008-02-26 18:40:05 +01:00
|
|
|
*
|
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2022-12-31 21:15:19 +01:00
|
|
|
* @return boolean
|
2008-02-26 18:40:05 +01:00
|
|
|
*/
|
2009-01-25 15:37:03 +01:00
|
|
|
public static function errorsDefined() {
|
2021-08-25 16:50:29 +02:00
|
|
|
return (
|
|
|
|
isset($_SESSION['LSerror']) &&
|
|
|
|
is_array($_SESSION['LSerror']) &&
|
|
|
|
!empty($_SESSION['LSerror'])
|
|
|
|
);
|
2009-01-21 18:08:09 +01:00
|
|
|
}
|
2020-04-29 15:54:21 +02:00
|
|
|
|
2009-01-21 18:08:09 +01:00
|
|
|
/**
|
2020-05-28 15:48:25 +02:00
|
|
|
* Clear current errors
|
2009-01-21 18:08:09 +01:00
|
|
|
*
|
|
|
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
|
|
|
*
|
2022-12-31 21:15:19 +01:00
|
|
|
* @return void
|
2009-01-21 18:08:09 +01:00
|
|
|
*/
|
2009-01-25 15:37:03 +01:00
|
|
|
private static function resetError() {
|
2021-08-25 16:50:29 +02:00
|
|
|
if (isset($_SESSION['LSerror']))
|
|
|
|
unset ($_SESSION['LSerror']);
|
2008-02-26 18:40:05 +01:00
|
|
|
}
|
2020-04-29 15:54:21 +02:00
|
|
|
|
2009-10-26 00:38:28 +01:00
|
|
|
/**
|
|
|
|
* Check if is Net_LDAP2 error and display possible error message
|
2020-04-29 15:54:21 +02:00
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @param mixed $data Data
|
2020-04-29 15:54:21 +02:00
|
|
|
*
|
2022-12-31 05:52:31 +01:00
|
|
|
* @return boolean True if it's an error or False
|
2009-10-26 00:38:28 +01:00
|
|
|
**/
|
2019-03-11 18:17:17 +01:00
|
|
|
public static function isLdapError($data) {
|
2009-10-26 00:38:28 +01:00
|
|
|
if (Net_LDAP2::isError($data)) {
|
2020-05-28 15:48:25 +02:00
|
|
|
LSerror :: addErrorCode(0, $data -> getMessage());
|
2009-10-26 00:38:28 +01:00
|
|
|
return true;
|
|
|
|
}
|
2020-05-28 15:48:25 +02:00
|
|
|
return false;
|
2009-10-26 00:38:28 +01:00
|
|
|
}
|
2014-11-20 12:04:03 +01:00
|
|
|
|
2007-03-29 18:10:14 +02:00
|
|
|
}
|
|
|
|
|
2009-01-02 17:00:25 +01:00
|
|
|
/*
|
|
|
|
* Error Codes
|
|
|
|
*/
|
2020-08-25 17:31:50 +02:00
|
|
|
LSerror :: defineError(-1, ___("Unknown error : %{error}"));
|