function error($description, $error_place='', $params=array())
{
  trigger_error('error', E_USER_WARNING);

  if(isset($GLOBALS['error_recursion']) && $GLOBALS['error_recursion'])
    die($description . ' - (error recursion!!!)');

  $description = $description . "\n\nback trace:\n" . get_trace_back();

  $GLOBALS['error_recursion'] = true;

  rollback_user_transaction();

  debug :: set_message_output(DEBUG_OUTPUT_MESSAGE_STORE | DEBUG_OUTPUT_MESSAGE_SEND);
  debug :: write_error($description, $error_place, $params);

  if (debug :: is_console_enabled())
  {
    debug :: write_error($description, $error_place, $params);
    echo debug :: parse_console();
  }

  ob_end_flush();

  exit();
}
function error($description, $error_place='', $params=array()) 
{
	if(isset($GLOBALS['error_recursion']) && $GLOBALS['error_recursion'])
		die();
		
	$GLOBALS['error_recursion'] = true;
	
	if(defined('DEVELOPER_ENVIROMENT'))
	{
		trigger_error('error', E_USER_WARNING);
		
		echo(  $description . '<br>' . $error_place . '<br><pre>');
		print_r($params);
		echo('</pre>');
	}
	
	$description = $description . "\n\nback trace:\n" . get_trace_back();
		
	rollback_user_transaction();

	debug :: set_message_output(DEBUG_OUTPUT_MESSAGE_STORE | DEBUG_OUTPUT_MESSAGE_SEND);
	debug :: write_error($description, $error_place, $params);
	
	if (debug :: is_console_enabled())
	{
		debug :: write_error($description, $error_place, $params);
		echo debug :: parse_console();
	}
		
	ob_end_flush();
			
	exit;
}