403Webshell
Server IP : 85.158.181.41  /  Your IP : 216.73.217.12
Web Server : Apache
System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64
User : moncbefd ( 1024)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/moncbefd/www.moneta.at/system/core/logging/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/moncbefd/www.moneta.at/system/core/logging/LogEvent.inc.php
<?php
/* --------------------------------------------------------------
  LogEvent.inc.php 2019-09-23
  Gambio GmbH
  http://www.gambio.de
  Copyright (c) 2019 Gambio GmbH
  Released under the GNU General Public License (Version 2)
  [http://www.gnu.org/licenses/gpl-2.0.html]
  --------------------------------------------------------------
 */

class LogEvent
{
	protected $group;
	protected $level;
	protected $level_type;
	protected $error_code;
	protected $message;
	protected $additional_info;
	protected $log_file_name;
	protected $configuration;
	
	protected $file;
	protected $line;
	protected $backtrace_array;
	
	protected $request_type;
	protected $request_url;
	protected $request_duration; //ms
	protected $server;
	protected $server_address;
	protected $remote_address;
	protected $user_agent;
	protected $date;
	
	protected $session_data_array;
	protected $post_data_array;
	protected $get_data_array;


	public function __construct($p_message, $p_group = '', $p_log_file_name = 'debug', $p_level = 'notice', $p_level_type = 'USER NOTICE',
								$p_error_code = E_USER_NOTICE, $p_additional_info = '', $p_coo_configuration = null)
	{
		$this->date = date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);
		$this->message = $p_message;
		$this->additional_info = $p_additional_info;
		$this->group = $p_group;
		$this->log_file_name = $p_log_file_name;
		$this->level = $p_level;
		$this->level_type = $p_level_type;
		$this->error_code = $p_error_code;
		
		$this->configuration = $p_coo_configuration;
		
		$this->backtrace_array = array();
		
		if($this->build_request_data_active())
		{
			$this->init_request_data();
			$this->init_session_data();
		}
		
		if($this->build_backtrace_active())
		{
			$this->init_backtrace_data();
		}

		if($this->build_function_data_active())
		{
			$this->init_function_data();
		}

		if($this->build_class_data_active())
		{
			$this->init_class_data();
		}
		
		if(count($this->backtrace_array) > 0)
		{
			$this->file = $this->determine_file();
			$this->line = $this->determine_line();
		}
		else
		{
			$this->file = '';
			$this->line = '';
		}
	}
	
	protected function determine_file()
	{
		$t_file = '';
		$t_backtrace_array = debug_backtrace();
		
		foreach($t_backtrace_array as $t_call)
		{
			if($this->is_excluded_call($t_call))
			{
				continue;
			}

			$t_file = $t_call['file'];
			
			break;
		}
		
		return $t_file;
	}

	protected function determine_line()
	{
		$t_line = '';
		$t_backtrace_array = debug_backtrace();
		
		foreach($t_backtrace_array as $t_call)
		{
			if($this->is_excluded_call($t_call))
			{
				continue;
			}

			$t_line = $t_call['line'];
			
			break;
		}

		return $t_line;
	}
	
	protected function init_request_data()
	{
		if(isset($_SERVER))
		{
			$this->request_type = $_SERVER['REQUEST_METHOD'];
			$this->request_url = $_SERVER['REQUEST_URI'];
			if(isset($_SERVER['REQUEST_TIME_FLOAT']))
			{
				$this->request_duration = round((int)(microtime(true) * 1000) - (int)($_SERVER['REQUEST_TIME_FLOAT'] * 1000));
			}
			else
			{
				$this->request_duration = round((int)microtime(true) - $_SERVER['REQUEST_TIME']);
			}
			$this->server = $_SERVER['SERVER_SOFTWARE'];
			$this->server_address = $_SERVER['SERVER_ADDR'];

			if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
			{
				$this->remote_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
			}
			elseif(isset($_SERVER['HTTP_CLIENT_IP']))
			{
				$this->remote_address = $_SERVER['HTTP_CLIENT_IP'];
			}
			else
			{
				$this->remote_address = $_SERVER['REMOTE_ADDR'];
			}
			
			$this->user_agent = $_SERVER['HTTP_USER_AGENT'];
		}
		
		if(isset($_POST))
		{
			$this->post_data_array = $this->censor($_POST);
		}
		else
		{
			$this->post_data_array = array();
		}
		
		if($_GET)
		{
			$this->get_data_array = $this->censor($_GET);
		}
		else
		{
			$this->get_data_array = array();
		}
	}
	
	protected function init_backtrace_data()
	{
		if($this->determine_file() == '')
		{
			return;
		}
		
		$t_index = 0;
		$t_raw_backtrace_array = debug_backtrace();
		
		foreach($t_raw_backtrace_array as $t_key => $t_call)
		{
			if($this->is_excluded_call($t_call))
			{
				continue;
			}
			
			$this->backtrace_array[$t_index] = $t_call;
			
			$t_index++;
		}
	}
	
	protected function init_function_data()
	{
		if($this->determine_file() == '')
		{
			return;
		}
		
		foreach($this->backtrace_array as $t_index => $t_call)
		{
			$this->backtrace_array[$t_index]['function_parameter_array'] = array();
			
			// method called
            if($t_call['function'] !== '' && strpos($t_call['function'], 'closure') === false && isset($t_call['class']))
            {
				$coo_reflector = new ReflectionClass($t_call['class']);
				$coo_method = $coo_reflector->getMethod($t_call['function']);
				$t_parameter_array = $coo_method->getParameters();

				for($i = 0; $i < count($t_parameter_array); $i++)
				{
					if(isset($t_call['args'][$i]) == false && $t_parameter_array[$i]->isOptional())
					{
						if($t_parameter_array[$i]->isPassedByReference())
						{
							$t_key = $t_parameter_array[$i]->name . ' (passed by reference)';
						}
						else
						{
							$t_key = $t_parameter_array[$i]->name;
						}

						if($t_parameter_array[$i]->isDefaultValueAvailable())
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] = '### default value: ' . $this->var_export($t_parameter_array[$i]->getDefaultValue(), true);

							if(method_exists(get_class($t_parameter_array[$i]), 'isDefaultValueConstant') && $t_parameter_array[$i]->isDefaultValueConstant())
							{
								$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] .= ' (value of constant)';
							}
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] .= ' ###';
						}
						else
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] = '### indeterminate value ###';
						}
					}
					else
					{
						if($t_parameter_array[$i]->isPassedByReference())
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_parameter_array[$i]->name . ' (passed by reference)'] = $this->var_export($t_call['args'][$i], true);
						}
						elseif(isset($t_call['args']))
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_parameter_array[$i]->name] = $this->var_export($t_call['args'][$i], true);
						}
					}
				}
			}
			// function called
			elseif($t_call['function'] != '' && function_exists($t_call['function']))
			{
				$coo_reflector = new ReflectionFunction($t_call['function']);
				$t_parameter_array = $coo_reflector->getParameters();

				for($i = 0; $i < count($t_parameter_array); $i++)
				{
					if($t_parameter_array[$i]->isOptional())
					{
						if($t_parameter_array[$i]->isPassedByReference())
						{
							$t_key = $t_parameter_array[$i]->name . ' (passed by reference)';
						}
						else
						{
							$t_key = $t_parameter_array[$i]->name;
						}

						if($t_parameter_array[$i]->isDefaultValueAvailable())
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] = '### indeterminate value, default value: ' . $this->var_export($t_parameter_array[$i]->getDefaultValue(), true);
	
							if(method_exists(get_class($t_parameter_array[$i]), 'isDefaultValueConstant') && $t_parameter_array[$i]->isDefaultValueConstant())
							{
								$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] .= ' (value of constant)';
							}
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] .= ' ###';
						}
						else
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_key] = '### indeterminate value ###';
						}
					}
					else
					{
						if($t_parameter_array[$i]->isPassedByReference())
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_parameter_array[$i]->name . ' (passed by reference)'] = '### indeterminate value ###';
						}
						else
						{
							$this->backtrace_array[$t_index]['function_parameter_array'][$t_parameter_array[$i]->name] = '### indeterminate value ###';
						}
					}
					
				}
			}
			
			if($t_call['function'] != '' && isset($t_call['args']) && is_array($t_call['args']))
			{
				$t_args_array = array();

				foreach($t_call['args'] as $t_arg)
				{
					$t_args_array[] = $this->var_export($t_arg, true);
				}
				
				$this->backtrace_array[$t_index]['function'] .= '(' . implode(', ', $t_args_array) . ')';
			}

			if($this->configuration->get_any_by_output_type($this->level, 'backtrace') == false)
			{
				break;
			}
		}
	}
	
	protected function init_class_data()
	{
		if($this->determine_file() == '')
		{
			return;
		}
		
		foreach($this->backtrace_array as $t_index => $t_call)
		{
			if(isset($t_call['class']) == false || isset($t_call['file']) == false || in_array(basename($t_call['file']), $this->configuration->get_excluded_files_array()))
			{
				continue;
			}

			$this->backtrace_array[$t_index]['class_property_array'] = array();
			
			if($t_call['class'] != '' && isset($t_call['object']))
			{
				$t_class_property_array = &$this->backtrace_array[$t_index]['class_property_array'];
				$this->init_class_properties($t_call['class'], $t_call['object'], $t_class_property_array);
			}

			if($this->configuration->get_any_by_output_type($this->level, 'backtrace') == false)
			{
				break;
			}
		}
	}
	
	protected function init_class_properties($p_class, $p_coo_class_object, array &$p_class_property_array = array())
	{
		$coo_reflector = new ReflectionClass($p_class);
		$t_properties_array = $coo_reflector->getProperties();
		
		foreach($t_properties_array as $t_property)
		{
			$t_property_value = $this->var_export(null);
			
			if(isset($p_coo_class_object->{$t_property->name}))
			{
				$t_property_value = $this->var_export($p_coo_class_object->{$t_property->name});
			}
			elseif($t_property->isPublic())
			{
				$t_property_value = $this->var_export(null);
			}
			elseif(method_exists($p_coo_class_object, 'get_' . $t_property->name))
			{
				$t_property_value = $this->var_export(call_user_func(array($p_coo_class_object, 'get_' . $t_property->name)));
			}
			elseif(method_exists($p_coo_class_object, 'get_') && $t_property->isPrivate() == false)
			{
				$t_property_value = $this->var_export(call_user_func(array($p_coo_class_object, 'get_'), $t_property->name));
			}
			else
			{
				$t_modifier_names = Reflection::getModifierNames($t_property->getModifiers());
				$t_property_value = '### Cannot access ' . implode(' ', $t_modifier_names) . ' property ' . $p_class . '::$' . $t_property->name . ' ###';
			}
			
			$p_class_property_array[$t_property->name] = $t_property_value;
		}
	}
	
	protected function init_session_data()
	{
		if(isset($_SESSION) && $this->build_session_data_active())
		{
			$t_session_key_array = $this->configuration->get_session_keys();
			if(empty($t_session_key_array))
			{
				$this->session_data_array = $_SESSION;
			}
			else
			{
				foreach($t_session_key_array as $t_session_key)
				{
					if(isset($_SESSION[$t_session_key]))
					{
						$this->session_data_array[$t_session_key] = $_SESSION[$t_session_key];
					}
					else
					{
						$this->session_data_array[$t_session_key] = '### Session entry not present ###';
					}
				}
			}
		}
	}
	
	public function __toString()
	{
		$t_output = $this->get_output();
		return $t_output;
	}
	
	public function get_output($p_output_mode = 'file')
	{
		$t_output = '';
		
		switch($p_output_mode)
		{
			case 'screen':
			case 'html_file':
				$t_output = $this->get_html_output($p_output_mode);
				break;
			default:
				$t_output = $this->get_text_output($p_output_mode);
		}
		
		return $t_output;
	}
	
	protected function var_export($p_expression)
	{
		$t_print_r = print_r($p_expression, true);
		
		if(strpos($t_print_r, '*RECURSION*') !== false)
		{
			$t_var_export = str_replace("\n", "\n\t\t\t", print_r($p_expression, true));
		}
		else
		{
			$t_var_export = str_replace("\n", "\n\t\t\t", var_export($p_expression, true));
		}

		unset($t_print_r);
				
		return $t_var_export;
	}
	
	protected function get_html_output($p_output_mode = 'screen')
	{
		$t_output = $this->generate_style_for_html_output();
		$t_output .= '<pre style="margin: 0; padding: 0">';
		$t_output .= $this->generate_output('html_file', $p_output_mode);
		$t_output .= '</pre>';
		
		return $t_output;
	}
	
	protected function get_text_output($p_output_mode = 'file')
	{
		$t_output = str_repeat('=', 80) . "\r\n";
		$t_output .= $this->generate_output('text', $p_output_mode);
		
		return $t_output;
	}
	
	protected function generate_output($p_output_type = 'text', $p_output_mode = 'screen')
	{
		$t_div_id = $this->generate_div_id();
		$t_head = $this->generate_head_output($p_output_type, $p_output_mode, $t_div_id);
		$t_details_start_div = $this->generate_error_box_div_output($p_output_type, 'details', true, $t_div_id);
		$t_backtrace = $this->generate_backtrace_output($p_output_type, $p_output_mode);
		$t_request_data = $this->generate_request_data_output($p_output_type, $p_output_mode);
		$t_additional_info = $this->generate_additional_info_output($p_output_type);
		$t_details_end_div = $this->generate_error_box_div_output($p_output_type, 'details', false);
		
		$t_output = $t_head
					. $t_details_start_div
					. $t_backtrace
					. $t_request_data
					. $t_additional_info
					. $t_details_end_div;
		
		return $t_output;
	}
	
	protected function generate_head_output($p_output_type = 'text', $p_output_mode = 'screen', $p_div_id = 0)
	{
		$t_head_start_div = $this->generate_error_box_div_output($p_output_type, 'head');
		$t_date = $this->generate_date_output($p_output_type, $p_output_mode);
		$t_error_code = $this->generate_error_code_output($p_output_type);
		$t_message = '"' . $this->generate_text_output($p_output_type, $this->message) . '"';
		$t_filepath = '';
		$t_detail_link = '';
		$t_head_end_div = $this->generate_error_box_div_output($p_output_type, 'head', false);
		$t_div_id = $p_div_id;
		$t_backtrace_head = '';
		
		if(empty($this->backtrace_array) == false && $this->get_specific_output($p_output_mode, 'filepath'))
		{
			$t_filepath = $this->generate_filepath_output($p_output_type);
			
			if($this->get_specific_output($p_output_mode, 'backtrace') || $this->get_specific_output($p_output_mode, 'request_data'))
			{
				$t_detail_link = $this->generate_detail_link_output($p_output_type, $t_div_id);
			}
			
			if($this->get_specific_output($p_output_mode, 'backtrace'))
			{
				$t_backtrace_head .= $this->generate_backtrace_head_output($p_output_type);
			}
		}
		
		$t_head = $t_date
				. $t_error_code
				. $t_message
				. $t_filepath;
		
		$t_head = $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_head, 'unfolder');
		
		$t_head = $t_head_start_div
				. $t_head
				. $t_detail_link
				. $t_head_end_div;
		
		return $t_head;
	}
	
	protected function generate_backtrace_output($p_output_type = 'text', $p_output_mode = 'screen')
	{
		$t_backtrace = '';
		
		if($this->get_specific_output($p_output_mode, 'filepath') && $this->get_specific_output($p_output_mode, 'backtrace'))
		{
			$t_count = count($this->backtrace_array);
			foreach($this->backtrace_array as $t_backtrace_array)
			{
				$t_count--;
				$t_filepath_data = $this->generate_filepath_data_output($t_count, $t_backtrace_array);
				$t_div_id = $this->generate_div_id();
				$t_subdetails_link = $this->generate_detail_link_output($p_output_type, $t_div_id);
				$t_subdetails_start_div = $this->generate_error_box_div_output($p_output_type, 'subdetails', true, $t_div_id);
				$t_class_data = $this->generate_class_data_output($p_output_type, $p_output_mode, $t_backtrace_array);
				$t_function_data = $this->generate_function_data_output($p_output_type, $p_output_mode, $t_backtrace_array);
				$t_code_snippet = $this->generate_code_snippet_output($p_output_type, $p_output_mode, $t_backtrace_array);
				$t_subdetails_end_div = $this->generate_error_box_div_output($p_output_type, 'subdetails', false);
				
				if($this->get_specific_output($p_output_type, 'code_snippet')
					|| $this->get_specific_output($p_output_type, 'class_data')
					|| $this->get_specific_output($p_output_type, 'function_data'))
				{
					$t_backtrace .= $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_filepath_data, 'unfolder');
					$t_backtrace .= $t_subdetails_link;
				}
				else
				{
					$t_backtrace .= $this->generate_text_output($p_output_type, $t_filepath_data);
					$t_backtrace .= $this->generate_line_break_output($p_output_type);
				}
				
				$t_backtrace .= $t_subdetails_start_div
								. $t_class_data
								. $t_function_data
								. $t_code_snippet
								. $t_subdetails_end_div;
			}
		}
		
		return $t_backtrace;
	}
	
	protected function generate_request_data_output($p_output_type = 'text', $p_output_mode = 'screen')
	{
		$t_request_data = '';
		
		if($this->get_specific_output($p_output_mode, 'request_data'))
		{
			$t_request_data_base = $this->generate_request_data_base_output($p_output_type, $p_output_mode);
			$t_session_data = '';
			$t_post_data = '';
			$t_get_data = '';
			
			if($this->get_specific_output($p_output_mode, 'session_data') && empty($this->session_data_array) == false)
			{
				$t_session_data = $this->generate_request_data_array_output($p_output_type, 'Session', $this->session_data_array);
			}

			if(empty($this->post_data_array) == false)
			{
				$t_post_data = $this->generate_request_data_array_output($p_output_type, 'Post', $this->post_data_array);
			}

			if(empty($this->get_data_array) == false)
			{
				$t_get_data = $this->generate_request_data_array_output($p_output_type, 'Get', $this->get_data_array);
			}
			
			$t_request_data = $t_request_data_base
								. $t_session_data
								. $t_post_data
								. $t_get_data;
		}
		
		return $t_request_data;
	}
	
	protected function generate_additional_info_output($p_output_type = 'text')
	{
		$t_additional_info = '';
		
		if(empty($this->additional_info) == false)
		{
			if($p_output_type == 'html_file')
			{
				$t_additional_info .=  '<b>Information:</b>';
			}
			else
			{
				$t_additional_info .= 'Information:';
			}
			
			$t_additional_info .= $this->generate_line_break_output($p_output_type);
			$t_additional_info .= $this->generate_text_output($p_output_type, $this->additional_info);
		}
		
		return $t_additional_info;
	}
	
	protected function generate_filepath_data_output($p_position = 0, $p_backtrace_array = array())
	{
		$t_filepath = '#' . $p_position;
		
		if(isset($p_backtrace_array['file']))
		{
			$t_filepath .= '	File: ' . $p_backtrace_array['file'];
			if(isset($p_backtrace_array['line']))
			{
				$t_filepath .= ':' . $p_backtrace_array['line'];
			}
		}
		
		return $t_filepath;
	}
	
	protected function generate_class_data_output($p_output_type = 'text', $p_output_mode = 'screen', $p_backtrace_array = array())
	{
		$t_class_data = '';
		
		if($this->get_specific_output($p_output_mode, 'class_data') && isset($p_backtrace_array['class'])
			&& $p_backtrace_array['class'] != '' && $this->configuration->is_excluded_class($p_backtrace_array['class']) == false)
		{
			$t_div_id = $this->generate_div_id();

			$t_class = '	Class: ' . $p_backtrace_array['class'];
			$t_class_detail_link = '';
			$t_class_start_div = '';
			$t_class_properties = '';
			$t_class_end_div = '';
			
			if(empty($p_backtrace_array['class_property_array']) == false)
			{
				$t_class_detail_link = $this->generate_detail_link_output($p_output_type, $t_div_id);
				$t_class_start_div = $this->generate_error_box_div_output($p_output_type, 'subdetails', true, $t_div_id);
				foreach($p_backtrace_array['class_property_array'] as $t_class_property_name => $t_class_property_value)
				{
					$t_class_properties .= $this->generate_variable_output($p_output_type, $t_class_property_name, $t_class_property_value);
				}
				$t_class_end_div = $this->generate_error_box_div_output($p_output_type, 'subdetails', false);
				
				$t_class_data = $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_class, 'unfolder');
				$t_class_data .= $t_class_detail_link
							. $t_class_start_div
							. $t_class_properties
							. $t_class_end_div;
			}
			else
			{
				$t_class_data = $t_class . $this->generate_line_break_output($p_output_type);
			}
		}
		
		return $t_class_data;
	}
	
	protected function generate_function_data_output($p_output_type = 'text', $p_output_mode = 'screen', $p_backtrace_array = array())
	{
		$t_function_data = '';
		
		if($this->get_specific_output($p_output_mode, 'function_data') && isset($p_backtrace_array['function']) && $p_backtrace_array['function'] != ''
			&& (isset($p_backtrace_array['class']) == false || $p_backtrace_array['class'] == '' || isset($p_backtrace_array['class'])
			&& $p_backtrace_array['class'] != '' && $this->configuration->is_excluded_class($p_backtrace_array['class']) == false))
		{
			$t_div_id = $this->generate_div_id();
			
			if(isset($p_backtrace_array['class']) && $p_backtrace_array['class'] != '')
			{
				$t_function = '	Method: ' . $p_backtrace_array['function'];
			}
			else
			{
				$t_function = '	Function: ' . $p_backtrace_array['function'];
			}

			if($p_output_type == 'html_file')
			{
				$t_function = $this->htmlentities_wrapper($t_function);
			}
			
			$t_function_detail_link = '';
			$t_function_start_div = '';
			$t_function_parameters = '';
			$t_function_end_div = '';
			if(empty($p_backtrace_array['function_parameter_array']) == false)
			{
				$t_function_detail_link = $this->generate_detail_link_output($p_output_type, $t_div_id);
				$t_function_start_div = $this->generate_error_box_div_output($p_output_type, 'subdetails', true, $t_div_id);
				foreach($p_backtrace_array['function_parameter_array'] as $t_function_parameter_name => $t_function_parameter_value)
				{
					$t_function_parameters .= $this->generate_variable_output($p_output_type, $t_function_parameter_name, $t_function_parameter_value);
				}
				$t_function_end_div = $this->generate_error_box_div_output($p_output_type, 'subdetails', false);
				
				$t_function_data = $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_function, 'unfolder');
				$t_function_data .= $t_function_detail_link
								. $t_function_start_div
								. $t_function_parameters
								. $t_function_end_div;
			}
			else
			{
				$t_function_data = $t_function . $this->generate_line_break_output($p_output_type);
			}
		}
		
		return $t_function_data;
	}
	
	protected function generate_code_snippet_output($p_output_type = 'text', $p_output_mode = 'screen', $p_backtrace_array = array())
	{
		$t_code = '';
		
		if($this->get_specific_output($p_output_mode, 'code_snippet') && is_readable($p_backtrace_array['file']) && $p_backtrace_array['line'] > 0)
		{
			$t_lines_array = file($p_backtrace_array['file']);
			$t_code = '	Code:' . $this->generate_line_break_output($p_output_type);

			if(isset($t_lines_array[$p_backtrace_array['line'] - 3]))
			{
				$t_code .= $this->generate_code_line($p_output_type, $t_lines_array, $p_backtrace_array['line'] - 3);
			}
			if(isset($t_lines_array[$p_backtrace_array['line'] - 2]))
			{
				$t_code .= $this->generate_code_line($p_output_type, $t_lines_array, $p_backtrace_array['line'] - 2);
			}
			if(isset($t_lines_array[$p_backtrace_array['line'] - 1]))
			{
				$t_code .= $this->generate_code_line($p_output_type, $t_lines_array, $p_backtrace_array['line'] - 1, true);
			}
			if(isset($t_lines_array[$p_backtrace_array['line']]))
			{
				$t_code .= $this->generate_code_line($p_output_type, $t_lines_array, $p_backtrace_array['line']);
			}
			if(isset($t_lines_array[$p_backtrace_array['line'] + 1]))
			{
				$t_code .= $this->generate_code_line($p_output_type, $t_lines_array, $p_backtrace_array['line'] + 1);
			}

			unset($t_lines_array);
		}
		
		return $t_code;
	}
	
	protected function generate_request_data_base_output($p_output_type = 'text', $p_output_mode = 'screen')
	{
		$t_request_data = '';
		
		if($p_output_type == 'html_file')
		{
			$t_request_data .= '<b>Request:</b> ';
		}
		else
		{
			$t_request_data .= 'Request: ';
		}
		$t_request_data .= $this->request_type . ' ' . $this->generate_text_output($p_output_type, $this->request_url);
		$t_div_id = $this->generate_div_id();
		$t_request_data = $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_request_data, 'unfolder');
		$t_request_data .= $this->generate_detail_link_output($p_output_type, $t_div_id);
		$t_request_data .= $this->generate_error_box_div_output($p_output_type, 'subdetails', true, $t_div_id);
		
		$t_request_data .= '	- duration: ~' . $this->request_duration . 'ms' . $this->generate_line_break_output($p_output_type);
		$t_request_data .= '	- server: ' . $this->generate_text_output($p_output_type, $this->server) . $this->generate_line_break_output($p_output_type);
		$t_request_data .= '	- server address: ' . $this->server_address . $this->generate_line_break_output($p_output_type);
		$t_request_data .= '	- user agent: ' . $this->generate_text_output($p_output_type, $this->user_agent) . $this->generate_line_break_output($p_output_type);
		if($p_output_mode != 'screen')
		{
			$t_request_data .= '	- remote address: ' . md5($this->remote_address) . $this->generate_line_break_output($p_output_type);
		}
		
		$t_request_data .= $this->generate_error_box_div_output($p_output_type, 'subdetails', false);
		
		return $t_request_data;
	}
	
	protected function generate_request_data_array_output($p_output_type = 'text', $p_request_data_type = 'Session', $p_request_data_array = array())
	{
		$t_data = '';
		
		if($p_output_type == 'html_file')
		{
			$t_data .= '<b>' . $p_request_data_type . ':</b> ';
		}
		else
		{
			$t_data .= $p_request_data_type . ': ';
		}
		
		$t_div_id = $this->generate_div_id();
		if(empty($p_request_data_array) == false)
		{
			$t_data = $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_data, 'unfolder');
			$t_data .= $this->generate_detail_link_output($p_output_type, $t_div_id);
		}
		$t_data .= $this->generate_error_box_div_output($p_output_type, 'subdetails', true, $t_div_id);
		
		foreach($p_request_data_array as $t_key => $t_value)
		{
			$t_data .= $this->generate_variable_output($p_output_type, $t_key, str_replace("\n", "\n\t\t", print_r($t_value, true)), 1, '');
		}
		
		$t_data .= $this->generate_error_box_div_output($p_output_type, 'subdetails', false);
		
		return $t_data;
	}
	
	protected function generate_line_break_output($p_output_type = 'text')
	{
		switch($p_output_type)
		{
			case 'html_file':
				return '<br/>';
			case 'text':
			default:
				return "\r\n";
		}
	}
	
	protected function generate_error_box_div_output($p_output_type = 'text', $p_div_class = 'head', $p_opening = true, $p_div_id = 0)
	{
		$t_error_box_div = '';
		if($p_output_type != 'html_file')
		{
			return $this->generate_line_break_output($p_output_type);
		}
		
		$t_div_id = '';
		$t_div_style = '';
		if(empty($p_div_id) == false)
		{
			$t_div_id = ' id="error_' . $p_div_id . '"';
			$t_div_style = ' style="display: none;"';
		}
		
		if($p_opening)
		{
			$t_error_box_div = '<span' . $t_div_id . ' class="gambio_error_box ' . $p_div_class . ' ' . $this->level . '"' . $t_div_style . '>';
		}
		else
		{
			$t_error_box_div = '</span>';
		}
		
		return $t_error_box_div;
	}
	
	protected function generate_error_code_output($p_output_type = 'text')
	{
		$t_error_code = $this->level_type;
		
		if($this->error_code > 0)
		{
			$t_error_code .= '(' . $this->error_code . ')';
		}
		
		$t_error_code .= ': ';
		
		if($p_output_type == 'html_file')
		{
			$t_error_code = '<b>' . $t_error_code . '</b>';
		}
		
		return $t_error_code;
	}
	
	protected function generate_date_output($p_output_type = 'text', $p_output_mode = 'file')
	{
		$t_date = '';
		
		if($p_output_mode != 'screen')
		{
			$t_date .= $this->date;

			if(empty($this->remote_address) == false)
			{
				$t_date .= ' (' . md5($this->remote_address) . ')';
			}

			$t_date .= ' ';
		}
		
		return $t_date;
	}
	
	protected function generate_text_output($p_output_type = 'text', $p_text = '')
	{
		$t_text = $p_text;
		
		if($p_output_type == 'html_file')
		{
			$t_text = $this->htmlentities_wrapper($p_text);
		}
		
		return $t_text;
	}
	
	protected function generate_filepath_output($p_output_type = 'text')
	{
		$t_filepath = ' in ' . $this->backtrace_array[0]['file'] . ':' . $this->backtrace_array[0]['line'];
		
		return $t_filepath;
	}
	
	protected function generate_detail_link_output($p_output_type = 'text', $p_div_id = 0)
	{
		$t_detail_link = '';
		
		if($p_output_type != 'html_file' || empty($p_div_id))
		{
			return $t_detail_link;
		}
		
		$t_detail_link .= ' (' . $this->generate_unfold_link_output($p_output_type, $p_div_id, 'Details') . ')' . $this->generate_line_break_output($p_output_type);
		
		return $t_detail_link;
	}
	
	protected function generate_unfold_link_output($p_output_type = 'text', $p_div_id = 0, $p_link_text = '', $p_class = '')
	{
		$t_unfold_link = '';
		
		if($p_output_type != 'html_file' || empty($p_div_id))
		{
			return $p_link_text;
		}
		
		$t_unfold_link = '<a href="#" class="' . $p_class . '" onclick="if(document.getElementById(\'error_' . $p_div_id . '\').style.display == \'none\'){document.getElementById(\'error_' . $p_div_id . '\').style.display=\'block\';}else{document.getElementById(\'error_' . $p_div_id . '\').style.display=\'none\';}return false;">' . $p_link_text . '</a>';
		
		return $t_unfold_link;
	}
	
	protected function generate_backtrace_head_output($p_output_type = 'text')
	{
		switch($p_output_type)
		{
			case 'html_file':
				return '<b>Backtrace:</b>' . $this->generate_line_break_output($p_output_type);
			case 'text':
			default:
				return "Backtrace:" . $this->generate_line_break_output($p_output_type);
		}
	}
	
	protected function generate_code_line($p_output_type = 'text', $p_lines_array = array(), $p_line = 0, $p_is_actual_line = false)
	{
		$t_code = '';

		if(isset($p_lines_array[$p_line]))
		{
			$t_code = ($p_line + 1) . ': ' . $this->generate_text_output($p_output_type, $p_lines_array[$p_line]);
		}

		if($p_is_actual_line)
		{
			if($p_output_type == 'html_file')
			{
				$t_code = "├─\t<b>line " . $t_code . '</b>';
			}
			else
			{
				$t_code = "├─\tline " . $t_code;
			}
		}
		else
		{
			$t_code = "│\tline " . $t_code;
		}

		return $t_code;
	}
	
	protected function generate_variable_output($p_output_type = 'text', $p_variable_name = '', $p_variable_value = '', $p_indent_depth = 2, $p_variable_prefix = '$')
	{
		$t_variable = '';
		$t_variable_lines = substr_count($p_variable_value, "\n") + 1;
		$t_max_variable_lines = 3;
		$t_indent = '';
		
		if(empty($p_variable_name))
		{
			return $t_variable;
		}
		
		for($i = 0; $i < $p_indent_depth; $i++)
		{
			$t_indent .= '	';
		}
		
		$t_variable_value = $p_variable_value;
		if($t_variable_lines > $t_max_variable_lines && $p_output_type == 'html_file')
		{
			$t_variable_value = '[...]';
		}
		
		$t_variable .= $t_indent . '- ' . $p_variable_prefix . $p_variable_name . ': ' . $this->generate_text_output($p_output_type, $t_variable_value);
		
		if($t_variable_lines > $t_max_variable_lines && $p_output_type == 'html_file')
		{
			$t_div_id = $this->generate_div_id();
			$t_variable = $this->generate_unfold_link_output($p_output_type, $t_div_id, $t_variable, 'unfolder');
			$t_variable .= $this->generate_line_break_output($p_output_type);
			$t_variable .= $this->generate_error_box_div_output($p_output_type, 'subdetails', true, $t_div_id);
			$t_variable .= $t_indent . '	' . $this->generate_text_output($p_output_type, $p_variable_value);
			$t_variable .= $this->generate_error_box_div_output($p_output_type, 'subdetails', false);
		}
		else
		{
			$t_variable .= $this->generate_line_break_output($p_output_type);
		}
		
		return $t_variable;
	}
	
	protected function generate_style_for_html_output()
	{
		$t_style = '<style type="text/css">
						.gambio_error_box {
							font-size: 1em !important;
							color:  black !important;
							margin: 0 !important;
							padding: 0 !important;
							display: block;
						}
						
						.gambio_error_box a.unfolder {
							color: #000000 !important;
							text-decoration: none !important;
							outline: none !important;
							font-family: monospace !important;
							font-size: 12px !important;
						}
						
						.gambio_error_box a.unfolder:hover {
							color: #0000FF !important;
							text-decoration: underline !important;
						}
						
						.gambio_error_box.head.error {
							background-color: #ff9797 !important;
						}
						
						.gambio_error_box.details.error {
							background-color: #ffcaca !important;
						}
						
						.gambio_error_box.subdetails.error {
							background-color: #ffdddd !important;
						}
						
						.gambio_error_box.head.warning {
							background-color: #eecc88 !important;
						}
						
						.gambio_error_box.details.warning {
							background-color: #ffeeaa !important;
						}
						
						.gambio_error_box.subdetails.warning {
							background-color: #fff5cc !important;
						}
						
						.gambio_error_box.head.notice {
							background-color: #9797ff !important;
						}
						
						.gambio_error_box.details.notice {
							background-color: #cacaff !important;
						}
						
						.gambio_error_box.subdetails.notice {
							background-color: #ddddff !important;
						}
						
						.gambio_error_box a {
							color:  blue !important;
						}
					</style>';
		return $t_style;
	}
	
	protected function generate_div_id()
	{
		return rand(10000, 99999);
	}

	public function htmlentities_wrapper($p_string)
	{
		if(defined('ENT_HTML401'))
		{
			$t_flags = ENT_COMPAT | ENT_HTML401;
		}
		else
		{
			$t_flags = ENT_COMPAT;
		}

		// search for UTF-8 characters
        if(preg_match('//u', $p_string))
		{
			$t_encoding = 'UTF-8';
		}
		elseif(isset($_SESSION['language_charset']))
		{
			$t_allowed_charsets_array = array();
			$t_allowed_charsets_array[] = 'ISO-8859-1';
			$t_allowed_charsets_array[] = 'ISO8859-1';
			$t_allowed_charsets_array[] = 'ISO-8859-15';
			$t_allowed_charsets_array[] = 'ISO8859-15';
			$t_allowed_charsets_array[] = 'UTF-8';
			$t_allowed_charsets_array[] = 'cp866';
			$t_allowed_charsets_array[] = 'ibm866';
			$t_allowed_charsets_array[] = '866';
			$t_allowed_charsets_array[] = 'cp1251';
			$t_allowed_charsets_array[] = 'Windows-1251';
			$t_allowed_charsets_array[] = 'win-1251';
			$t_allowed_charsets_array[] = '1251';
			$t_allowed_charsets_array[] = 'cp1252';
			$t_allowed_charsets_array[] = 'Windows-1252';
			$t_allowed_charsets_array[] = '1252';
			$t_allowed_charsets_array[] = 'KOI8-R';
			$t_allowed_charsets_array[] = 'koi8-ru';
			$t_allowed_charsets_array[] = 'koi8r';
			$t_allowed_charsets_array[] = 'BIG5';
			$t_allowed_charsets_array[] = '950';
			$t_allowed_charsets_array[] = 'GB2312';
			$t_allowed_charsets_array[] = '936';
			$t_allowed_charsets_array[] = 'BIG5-HKSCS';
			$t_allowed_charsets_array[] = 'Shift_JIS';
			$t_allowed_charsets_array[] = 'SJIS';
			$t_allowed_charsets_array[] = '932';
			$t_allowed_charsets_array[] = 'EUC-JP';
			$t_allowed_charsets_array[] = 'EUCJP';

			$t_key = array_search(strtolower(trim((string)$_SESSION['language_charset'])), array_map('strtolower', $t_allowed_charsets_array));
			if($t_key !== false)
			{
				$t_encoding = $t_allowed_charsets_array[$t_key];
			}
		}
		else
		{
			$t_encoding = 'ISO-8859-1';
		}

		return htmlentities($p_string, $t_flags, $t_encoding);
	}
	
	public function build_request_data_active()
	{
		return $this->configuration->get_any_by_output_type($this->level, 'request_data');
	}

	public function build_backtrace_active()
	{
		return $this->configuration->get_any_by_output_type($this->level, 'backtrace');
	}

	public function build_code_snippet_active()
	{
		return $this->configuration->get_any_by_output_type($this->level, 'code_snippet');
	}

	public function build_function_data_active()
	{
		return $this->configuration->get_any_by_output_type($this->level, 'function_data');
	}

	public function build_class_data_active()
	{
		return $this->configuration->get_any_by_output_type($this->level, 'class_data');
	}

	public function build_session_data_active()
	{
		return $this->configuration->get_any_by_output_type($this->level, 'session_data');
	}
	
	protected function is_excluded_call($p_call_array)
	{
		return	isset($p_call_array['file']) && $this->configuration->is_excluded_file($p_call_array['file'])
				&& isset($p_call_array['class']) && $this->configuration->is_excluded_class($p_call_array['class'])
				|| isset($p_call_array['file']) == false && isset($p_call_array['class'])
				&& $this->configuration->is_excluded_class($p_call_array['class'])
				|| isset($p_call_array['file']) && isset($p_call_array['class']) == false
				&& $this->configuration->is_excluded_file($p_call_array['file']);
	}
	
	protected function get_specific_output($p_output_type = 'file', $p_output = 'output')
	{
		return $this->configuration->get($this->level, $p_output_type, $p_output);
	}
	
	protected function censor(array $p_array)
	{
		$t_array = $p_array;
		
		if(isset($t_array['password']))
		{
			$t_array['password'] = '*****';
		}

        if(isset($t_array['confirmation']))
        {
            $t_array['confirmation'] = '*****';
        }

		if(isset($t_array['FTP_PASSWORD']))
		{
			$t_array['FTP_PASSWORD'] = '*****';
		}
			
		return $t_array;
	}
	
	public function get_group()
	{
		return $this->group;
	}

	public function get_level()
	{
		return $this->level;
	}
	
	public function get_level_type()
	{
		return $this->level_type;
	}

	public function get_configuration()
	{
		return $this->configuration;
	}

	public function get_error_code()
	{
		return $this->error_code;
	}

	public function get_message()
	{
		return $this->message;
	}

	public function get_additional_info()
	{
		return $this->additional_info;
	}
	
	public function get_log_file_name()
	{
		return $this->log_file_name;
	}

	public function get_backtrace_array()
	{
		return $this->backtrace_array;
	}

	public function get_file()
	{
		return $this->file;
	}

	public function get_line()
	{
		return $this->line;
	}

	public function get_request_type()
	{
		return $this->request_type;
	}

	public function get_request_url()
	{
		return $this->request_url;
	}

	public function get_request_duration()
	{
		return $this->request_duration;
	}

	public function get_server()
	{
		return $this->server;
	}

	public function get_server_address()
	{
		return $this->server_address;
	}

	public function get_remote_address()
	{
		return $this->remote_address;
	}

	public function get_user_agent()
	{
		return $this->user_agent;
	}

	public function get_date()
	{
		return $this->date;
	}

	public function get_session_data_array()
	{
		return $this->session_data_array;
	}

	public function get_post_data_array()
	{
		return $this->post_data_array;
	}

	public function get_get_data_array()
	{
		return $this->get_data_array;
	}
	
	public function get_output_array()
	{
		return $this->output_array;
	}

	public function set_group($p_group)
	{
		$this->group = $p_group;
	}

	public function set_level($p_level)
	{
		$this->level = $p_level;
	}
	
	public function set_level_type($p_level_type)
	{
		$this->level_type = $p_level_type;
	}

	public function set_configuration($p_configuration)
	{
		$this->configuration = $p_configuration;
	}

	
	public function set_error_code($p_error_code)
	{
		$this->error_code = $p_error_code;
	}

	public function set_message($p_message)
	{
		$this->message = $p_message;
	}

	public function set_additional_info($p_additional_info)
	{
		$this->additional_info = $p_additional_info;
	}
	
	public function set_log_file_name($p_log_file_name)
	{
		if(is_string($p_log_file_name))
		{
			$this->log_file_name = basename($p_log_file_name);
		}
	}

	public function set_backtrace_array(array $p_backtrace_array)
	{
		$this->backtrace_array = $p_backtrace_array;
	}

	public function set_file($p_file)
	{
		$this->file = $p_file;
	}

	public function set_line($p_line)
	{
		$this->line = $p_line;
	}

	public function set_request_type($p_request_type)
	{
		$this->request_type = $p_request_type;
	}

	public function set_request_url($p_request_url)
	{
		$this->request_url = $p_request_url;
	}

	public function set_request_duration($p_request_duration)
	{
		$this->request_duration = $p_request_duration;
	}

	public function set_server($p_server)
	{
		$this->server = $p_server;
	}

	public function set_server_address($p_server_address)
	{
		$this->server_address = $p_server_address;
	}

	public function set_remote_address($p_remote_address)
	{
		$this->remote_address = $p_remote_address;
	}

	public function set_user_agent($p_user_agent)
	{
		$this->user_agent = $p_user_agent;
	}

	public function set_date($p_date)
	{
		$this->date = $p_date;
	}

	public function set_session_data_array($p_session_data_array)
	{
		$this->session_data_array = $p_session_data_array;
	}

	public function set_post_data_array($p_post_data_array)
	{
		$this->post_data_array = $p_post_data_array;
	}

	public function set_get_data_array($p_get_data_array)
	{
		$this->get_data_array = $p_get_data_array;
	}
	
	public function set_output_array($p_output_array)
	{
		$this->output_array = $p_output_array;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit