An error occurred while loading the file. Please try again.
-
dockx thibault authored
Parenthesis open in fnc call - code style part1
Verified62b995ff
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2003-2010 Cajus Pollmeier
Copyright (C) 2011-2018 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 php_setup.inc
* Source code for php_setup
*/
require_once ("variables.inc");
/*!
* \brief Escape string for HTML output
*/
function htmlescape ($str)
{
return htmlspecialchars($str, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
/*!
* \brief Unescape string for HTML output, reverse of htmlescape
*/
function htmlunescape ($html)
{
return html_entity_decode($html, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
function html_trace ($errstr = "")
{
static $hideArgs = [
'ldap_init' => [3],
'ldap_login_user' => [1],
'change_password' => [1],
'cred_decrypt' => [0,1],
'LDAP/__construct' => [1],
];
if (!function_exists ('debug_backtrace')) {
return ['', ''];
}
$trace = array_slice(debug_backtrace(), 1);
$loc = '';
if (isset($trace[0]['file'])) {
$loc = ' - '._('File').': '.$trace[0]['file'];
if (isset($trace[0]['line'])) {
$loc .= ' ('._('Line').' '.$trace[0]['line'].')';
}
}
$return_html = '<table width="100%" style="background-color:#402005;color:white;border:2px solid red;border-spacing:0;border-collapse:collapse;">'.
'<tr><td colspan="3">'.
'<h1 style="color:white">'._('PHP error').' "'.$errstr.'"'.$loc.'</h1>'.
'</td></tr>';
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
$return_mailto = rawurlencode('=== Trace ===');
/* Generate trace history */
for($index = 1, $c = count($trace); $index < $c; $index++) {
$ct = $trace[$index];
$loc = '';
$func = '';
if (isset($ct['class'])) {
$loc .= _("class")." ".$ct['class'];
$func .= $ct['class'];
if (isset($ct['function'])) {
$loc .= ' / ';
$func .= '/';
}
}
if (isset($ct['function'])) {
$loc .= _("function")." ".$ct['function'];
$func .= $ct['function'];
}
if (isset($ct['type'])) {
switch ($ct['type']) {
case "::":
$type = _("static");
break;
case "->":
$type = _("method");
break;
}
} else {
$type = "-";
}
$args = "";
if (isset($ct['args'])) {
if (isset($hideArgs[$func])) {
$hideArgsIndexes = $hideArgs[$func];
} else {
$hideArgsIndexes = [];
}
$f = function ($index, $arg) use (&$f, $hideArgsIndexes) {
static $i = 0;
if (($i == 0) && in_array($index, $hideArgsIndexes)) {
return '***';
}
if ($i > 4) {
return '…';
}
if (is_object($arg)) {
return "CLASS: ".get_class($arg);
} elseif (is_array($arg)) { /* Avoid converting array to string errors */
$i++;
$ret = "array(".implode(',', array_map($f, array_keys($arg), $arg)).")";
$i--;
return $ret;
} else {
if (strlen("$arg") > 512) {
$arg = substr("$arg", 0, 512)."…";
}
return '"'.htmlentities("$arg", ENT_COMPAT, 'UTF-8').'"';
}
};
$args = implode(',', array_map($f, array_keys($ct['args']), $ct['args']));
}
if (empty($args)) {
$args = "-";
}
if (isset($ct['file'])) {
$file = $ct['file'];
} else {
$file = "";
}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
if (isset($ct['line'])) {
$line = $ct['line'];
} else {
$line = "";
}
$color = ($index & 1) ? '#404040' : '606060';
$return_html .= "<tr style='background-color:$color'><td style='padding-left:20px' width=\"30%\">"._("Trace")."[$index]: $loc</td>";
$return_html .= "<td>"._("File").": $file ("._('Line')." $line)</td><td width=\"10%\">"._("Type").": $type</td></tr>";
$return_html .= "<tr style='background-color:$color'><td colspan=3 style='padding-left:20px;'>"._("Arguments").": $args</td></tr>";
/* Add trace part to mailto body */
$return_mailto .= rawurlencode(
"\nTrace[".$index."]:".$loc.
"\nFile : ".$file.
"\nLine : ".$line.
"\nType : ".$type.
"\n ".$args.
"\n");
}
$return_html .= "</table>";
$return_mailto .= rawurlencode("=== /Trace ===");
return [$return_html, $return_mailto];
}
/*!
* \brief Raise an error
*
* \param string $errno
*
* \param string $errstr The error string
*
* \param string $errfile The error filename
*
* \param string $errline The error line
*/
function gosaRaiseError ($errno, $errstr, $errfile, $errline)
{
global $error_collector,$config, $error_collector_mailto;
// To avoid recursion - restore original error handler.
restore_error_handler();
/* Return if error reporting is set to zero */
if (error_reporting() == 0) {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return FALSE;
}
/* Workaround for buggy imap_open error outputs */
if (preg_match('/imap_open/', $errstr)) {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return;
}
/* Hide ldap size limit messages */
if (preg_match('/ldap_error/', $errstr)) {
if (preg_match('/sizelimit/', $errstr)) {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return;
}
}
/* Error messages are hidden in FusionDirectory, so we only send them to the logging class and abort here */
if (isset($config->data) && $config->get_cfg_value('displayerrors') != 'TRUE') {
/* Write to syslog */
if (class_exists('logging') && !preg_match('/No such object/', $errstr)) {
logging::log('view', 'error', '', [], "PHP error: $errstr($errfile, line $errline)");
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
}
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return;
}
/* Send all errors to logging class, except "Ldap : No such object" messages*/
if (class_exists('logging') && !preg_match('/No such object/', $errstr)) {
logging::log('debug', 'all', $errfile, [], 'Type:'.$errno.', Message:'.$errstr.', File:'.$errfile.', Line: '.$errline);
}
/* Create header as needed */
if ($error_collector == "") {
/* Mailto body header */
$version = FD_VERSION;
$error_collector_mailto .= rawurlencode(
"Oups. Seems like you've catched some kind of bug inside FusionDirectory/PHP. You may want to help ".
"us to improve the software stability. If so, please provide some more information below.".
"\n\n".
"*** FusionDirectory bug report ***".
"\nFusionDirectory Version: $version".
"\n\n".
"Please describe what you did to produce this error as detailed as possible. Can you ".
"reproduce this bug using the demo on http://demo.FusionDirectory.org ?".
"\n\n".
"*** PHP error information ***\n\n");
$error_collector = '
<div class="error">
<table width="100%">
<tr>
<td>
<img src="geticon.php?context=status&icon=dialog-warning&size=16" alt="" class="center"/>
<strong style="font-size:14px">'.
_("Generating this page caused the PHP interpreter to raise some errors!").'
</strong>
</td>
<td align=right>
<a href="mailto:bugs@fusiondirectory.org?subject=FusionDirectory%20bugreport&body=%BUGBODY%">
<img src="geticon.php?context=applications&icon=internet-mail&size=16" title="'._("Send bug report to the FusionDirectory Team").
'" class="center" alt="'.("Mail icon").'"> '._("Send bugreport").'
</a>
</td>
<td align="right">
<button onClick="$(\'errorbox\').toggle();">'.
_("Toggle information").'
</button>
</td>
</tr>
</table>
</div>
<div id="errorbox" style="position:absolute; z-index:150; display: none;">';
}
/* Create error header */
$error_collector_mailto .= rawurlencode("=== Error === \n");
$error_collector_mailto .= rawurlencode("PHP error: $errstr($errfile, line $errline)\n");
$error_collector_mailto .= rawurlencode("=== /Error === \n\n");
list($html_trace, $mailto_trace) = html_trace($errstr);
$error_collector .= $html_trace;
$error_collector_mailto .= $mailto_trace;
/* Flush in case of fatal errors */
if (preg_match('/^fatal/i', $errstr) || (PHP_ERROR_FATAL == 'TRUE')) {
session::destroy();
if (PHP_ERROR_FATAL == 'TRUE') {
$error_collector = str_replace('display: none;', '', $error_collector);
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
}
echo $error_collector."</div>";
flush();
exit;
}
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
}
/*!
* \brief Dummy error handler
*/
function dummy_error_handler ()
{
}
/*! \brief Returns TRUE if SSL was used to contact FD, whether directly or through a proxy
*/
function sslOn ()
{
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
return (strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') == 0);
}
if (isset($_SERVER['HTTPS'])) {
return (strcasecmp($_SERVER['HTTPS'], 'on') == 0);
}
return FALSE;
}
/*! \brief Returns SSL URL to redirect to
*/
function sslUrl ()
{
$ssl = 'https://';
if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$ssl .= $_SERVER['HTTP_HOST'];
} else {
$ssl .= $_SERVER['HTTP_X_FORWARDED_HOST'];
}
if (empty($_SERVER['REQUEST_URI'])) {
$ssl .= $_SERVER['PATH_INFO'];
} else {
$ssl .= $_SERVER['REQUEST_URI'];
}
return $ssl;
}
/* Bail out for incompatible/old PHP versions */
if (!version_compare(phpversion(), PHP_MIN_VERSION, ">=")) {
echo "PHP version needs to be ".PHP_MIN_VERSION." or above to run FusionDirectory. Aborted.";
exit();
}
/* Set timezone */
date_default_timezone_set("GMT");
/* Get base dir for reference */
$BASE_DIR = dirname(dirname(__FILE__));
$ROOT_DIR = $BASE_DIR."/html";
error_reporting (E_ALL | E_STRICT);
/* Register error handler */
$error_collector = "";
$error_collector_mailto = "";
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
$variables_order = "ES";
ini_set("track_vars", 1);
ini_set("display_errors", 1);
351352353354355356357358359360361362363364365366367368369370371372
ini_set("report_memleaks", 1);
ini_set("include_path", ".:$BASE_DIR/include:".PHP_DIR.":".PEAR_DIR);
/* Do smarty setup */
require(SMARTY);
$smarty = new Smarty;
$smarty->template_dir = $BASE_DIR.'/ihtml/';
$smarty->caching = FALSE;
$smarty->assign('css_files', []);
$smarty->assign('js_files', []);
$smarty->php_handling = Smarty::PHP_REMOVE;
/* Check for SSL connection */
$ssl = '';
if (!sslOn()) {
$ssl = sslUrl();
}
?>