alecpl
2010-05-19 b62a0d2d23db19f3e69937de0f162294c98cdbc9
program/include/bugs.inc
@@ -4,8 +4,8 @@
 +-----------------------------------------------------------------------+
 | program/include/bugs.inc                                              |
 |                                                                       |
 | This file is part of the BQube Webmail client                         |
 | Copyright (C) 2005, BQube Dev - Switzerland                           |
 | This file is part of the RoudCube Webmail client                      |
 | Copyright (C) 2005-2010, RoudCube Dev - Switzerland                   |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
@@ -20,94 +20,87 @@
*/
// throw system error and show error page
function raise_error($arg=array(), $log=FALSE, $terminate=FALSE)
  {
  global $__page_content, $CONFIG, $OUTPUT, $ERROR_CODE, $ERROR_MESSAGE;
/**
 * Error handling and logging functions
 *
 * @package Core
 */
/**
 * Throw system error and show error page
 *
 * @param array Named parameters
 *  - code: Error code (required)
 *  - type: Error type [php|db|imap|javascript] (required)
 *  - message: Error message
 *  - file: File where error occured
 *  - line: Line where error occured
 * @param boolean True to log the error
 * @param boolean Terminate script execution
 */
function raise_error($arg=array(), $log=false, $terminate=false)
{
    global $__page_content, $CONFIG, $OUTPUT, $ERROR_CODE, $ERROR_MESSAGE;
  
  /* $arg keys:
       int     code
       string  type (php, xpath, db, imap, javascript)
       string  message
       sring   file
       int     line
  */
    // report bug (if not incompatible browser)
    if ($log && $arg['type'] && $arg['message'])
        log_bug($arg);
  // report bug (if not incompatible browser)
  if ($log && $arg['type'] && $arg['message'])
    log_bug($arg);
  // display error page and terminate script
  if ($terminate)
    {
    $ERROR_CODE = $arg['code'];
    $ERROR_MESSAGE = $arg['message'];
    include("program/steps/error.inc");
    exit;
    // display error page and terminate script
    if ($terminate) {
        $ERROR_CODE = $arg['code'];
        $ERROR_MESSAGE = $arg['message'];
        include("program/steps/error.inc");
        exit;
    }
  }
}
// report error
/**
 * Report error according to configured debug_level
 *
 * @param array Named parameters
 * @see raise_error()
 */
function log_bug($arg_arr)
  {
  global $CONFIG, $INSTALL_PATH;
  $program = $arg_arr['type']=='xpath' ? 'XPath' : strtoupper($arg_arr['type']);
{
    global $CONFIG;
    $program = strtoupper($arg_arr['type']);
  // write error to local log file
  if ($CONFIG['debug_level'] & 1)
    {
    $log_entry = sprintf("[%s] %s Error: %s in %s on line %d\n",
                 date("d-M-Y H:i:s O", mktime()),
                 $program,
                 $arg_arr['message'],
                 $arg_arr['file'],
                 $arg_arr['line']);
    if (empty($CONFIG['log_dir']))
      $CONFIG['log_dir'] = $INSTALL_PATH.'logs';
    if ($fp = fopen($CONFIG['log_dir'].'/errors', 'a'))
    // write error to local log file
    if ($CONFIG['debug_level'] & 1) {
        $post_query = ($_SERVER['REQUEST_METHOD'] == 'POST' ? '?_task='.urlencode($_POST['_task']).'&_action='.urlencode($_POST['_action']) : '');
        $log_entry = sprintf("%s Error: %s%s (%s %s)",
            $program,
            $arg_arr['message'],
            $arg_arr['file'] ? sprintf(' in %s on line %d', $arg_arr['file'], $arg_arr['line']) : '',
            $_SERVER['REQUEST_METHOD'],
            $_SERVER['REQUEST_URI'] . $post_query);
    
      {
      fwrite($fp, $log_entry);
      fclose($fp);
      }
        if (!write_log('errors', $log_entry)) {
            // send error to PHPs error handler if write_log didn't succeed
            trigger_error($arg_arr['message']);
        }
    }
/*
  // resport the bug to the global bug reporting system
  if ($CONFIG['debug_level'] & 2)
    {
    $delm = '%AC';
    http_request(sprintf('http://roundcube.net/log/bug.php?_type=%s&_domain=%s&_server_ip=%s&_client_ip=%s&_useragent=%s&_url=%s%%3A//%s&_errors=%s%s%s%s%s',
                 $arg_arr['type'],
                $GLOBALS['HTTP_HOST'],
                 $GLOBALS['SERVER_ADDR'],
                 $GLOBALS['REMOTE_ADDR'],
                 rawurlencode($GLOBALS['HTTP_USER_AGENT']),
                  $GLOBALS['SERVER_PORT']==43 ? 'https' : 'http',
                  $GLOBALS['HTTP_HOST'].$GLOBALS['REQUEST_URI'],
                  $arg_arr['file'], $delm,
                 $arg_arr['line'], $delm,
                 rawurlencode($arg_arr['message'])));
    // resport the bug to the global bug reporting system
    if ($CONFIG['debug_level'] & 2) {
        // TODO: Send error via HTTP
    }
*/
  // show error if debug_mode is on
  if ($CONFIG['debug_level'] & 4)
    {
    print "<b>$program Error";
    // show error if debug_mode is on
    if ($CONFIG['debug_level'] & 4) {
        print "<b>$program Error";
    if (!empty($arg_arr['file']) && !empty($arg_arr['line']))
      print " in $arg_arr[file] ($arg_arr[line])";
        if (!empty($arg_arr['file']) && !empty($arg_arr['line']))
            print " in $arg_arr[file] ($arg_arr[line])";
    print ":</b>&nbsp;";
    print nl2br($arg_arr['message']);
    print '<br />';
    flush();
        print ':</b>&nbsp;';
        print nl2br($arg_arr['message']);
        print '<br />';
        flush();
    }
  }
}
?>
?>