alecpl
2009-09-07 b48d9bf5d412a6f56f3f9ba4bad141ddfe175727
program/include/main.inc
@@ -183,9 +183,9 @@
  static $mbstring_loaded = null;
  static $mbstring_list = null;
  static $convert_warning = false;
  static $conv = null;
  $error = false;
  $conv = null;
  $to = empty($to) ? $to = strtoupper(RCMAIL_CHARSET) : rcube_parse_charset($to);
  $from = rcube_parse_charset($from);
@@ -223,34 +223,29 @@
    }
  }
  # try to convert with custom classes
  if (class_exists('utf8'))
    $conv = new utf8();
  // convert string to UTF-8
  // convert charset using bundled classes/functions
  if ($to == 'UTF-8') {
    if ($from == 'UTF7-IMAP') {
      if ($_str = utf7_to_utf8($str))
        $str = $_str;
      else
        $error = true;
        return $_str;
    }
    else if ($from == 'UTF-7') {
      if ($_str = rcube_utf7_to_utf8($str))
        $str = $_str;
      else
        $error = true;
        return $_str;
    }
    else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) {
      $str = utf8_encode($str);
      return utf8_encode($str);
    }
    else if ($from != 'UTF-8' && $conv) {
      $from = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $from);
      $conv->loadCharset($from);
      $str = $conv->strToUtf8($str);
    else if (class_exists('utf8')) {
      if (!$conv)
        $conv = new utf8($from);
      else
        $conv->loadCharset($from);
      if($_str = $conv->strToUtf8($str))
        return $_str;
    }
    else if ($from != 'UTF-8')
      $error = true;
    $error = true;
  }
  
  // encode string for output
@@ -258,36 +253,37 @@
    // @TODO: we need a function for UTF-7 (RFC2152) conversion
    if ($to == 'UTF7-IMAP' || $to == 'UTF-7') {
      if ($_str = utf8_to_utf7($str))
        $str = $_str;
      else
        $error = true;
        return $_str;
    }
    else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) {
      return utf8_decode($str);
    }
    else if ($to != 'UTF-8' && $conv) {
      $to = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $to);
      $conv->loadCharset($to);
      return $conv->utf8ToStr($str);
    else if (class_exists('utf8')) {
      if (!$conv)
        $conv = new utf8($to);
      else
        $conv->loadCharset($from);
      if ($_str = $conv->strToUtf8($str))
        return $_str;
    }
    else if ($to != 'UTF-8') {
      $error = true;
    }
    $error = true;
  }
  
  // report error
  if ($error && !$convert_warning){
  if ($error && !$convert_warning) {
    raise_error(array(
      'code' => 500,
      'type' => 'php',
      'file' => __FILE__,
      'line' => __LINE__,
      'message' => "Could not convert string from $from to $to. Make sure iconv/mbstring is installed or lib/utf8.class is available."
      ), true, false);
    
    $convert_warning = true;
  }
  
  // return UTF-8 string
  // return UTF-8 or original string
  return $str;
  }
@@ -313,20 +309,20 @@
    'ANSIX31101983' => 'WINDOWS-1252',
    'ANSIX341968'   => 'WINDOWS-1252',
    'UNKNOWN8BIT'   => 'ISO-8859-15',
    'XUNKNOWN'      => 'ISO-8859-15',
    'XUSERDEFINED'  => 'ISO-8859-15',
    'UNKNOWN'       => 'ISO-8859-15',
    'USERDEFINED'   => 'ISO-8859-15',
    'KSC56011987'   => 'EUC-KR',
    'GB2312'        => 'GBK',
    'GB231280'       => 'GBK',
    'UNICODE'       => 'UTF-8',
    'UTF7IMAP'       => 'UTF7-IMAP',
    'XXBIG5'       => 'BIG5',
    'TIS620'       => 'WINDOWS-874',
    'ISO88599'       => 'WINDOWS-1254',
    'ISO885911'       => 'WINDOWS-874',
  );
  $str = preg_replace('/[^a-z0-9]/i', '', $charset);
  // allow a-z and 0-9 only and remove X- prefix (e.g. X-ROMAN8 => ROMAN8)
  $str = preg_replace(array('/[^a-z0-9]/i', '/^x+/i'), '', $charset);
  if (isset($aliases[$str]))
    return $aliases[$str];
@@ -549,7 +545,7 @@
 * @return string   Field value or NULL if not available
 */
function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL)
  {
{
  global $OUTPUT;
  $value = NULL;
  
@@ -586,7 +582,26 @@
    return rcube_charset_convert($value, $OUTPUT->get_charset(), $charset);
  else
    return $value;
}
/**
 * Convert array of request parameters (prefixed with _)
 * to a regular array with non-prefixed keys.
 *
 * @param  int   Source to get value from (GPC)
 * @return array Hash array with all request parameters
 */
function request2param($mode = RCUBE_INPUT_GPC)
{
  $out = array();
  $src = $mode == RCUBE_INPUT_GET ? $_GET : ($mode == RCUBE_INPUT_POST ? $_POST : $_REQUEST);
  foreach ($src as $key => $value) {
    $fname = $key[0] == '_' ? substr($key, 1) : $key;
    $out[$fname] = get_input_value($key, $mode);
  }
  return $out;
}
/**
 * Remove all non-ascii and non-word chars
@@ -648,7 +663,7 @@
    while ($table_data && ($sql_arr = $db->fetch_assoc($table_data)))
    {
      $zebra_class = $c % 2 ? 'even' : 'odd';
      $table->add_row(array('id' => 'rcmrow' . $sql_arr[$id_col], 'class' => "contact $zebra_class"));
      $table->add_row(array('id' => 'rcmrow' . $sql_arr[$id_col], 'class' => $zebra_class));
      // format each col
      foreach ($a_show_cols as $col)
@@ -662,7 +677,7 @@
    foreach ($table_data as $row_data)
    {
      $zebra_class = $c % 2 ? 'even' : 'odd';
      $table->add_row(array('id' => 'rcmrow' . $row_data[$id_col], 'class' => "contact $zebra_class"));
      $table->add_row(array('id' => 'rcmrow' . $row_data[$id_col], 'class' => $zebra_class));
      // format each col
      foreach ($a_show_cols as $col)
@@ -962,8 +977,11 @@
  {
  $args = func_get_args();
  if (class_exists('rcmail', false))
    rcmail::get_instance()->plugins->exec_hook('console', $args);
  if (class_exists('rcmail', false)) {
    $rcmail = rcmail::get_instance();
    if (is_object($rcmail->plugins))
      $rcmail->plugins->exec_hook('console', $args);
  }
  $msg = array();
  foreach ($args as $arg)
@@ -991,23 +1009,34 @@
 */
function write_log($name, $line)
  {
  global $CONFIG;
  global $CONFIG, $RCMAIL;
  if (!is_string($line))
    $line = var_export($line, true);
 
  if (empty($CONFIG['log_date_format']))
    $CONFIG['log_date_format'] = 'd-M-Y H:i:s O';
  $date = date($CONFIG['log_date_format']);
  // trigger logging hook
  if (is_object($RCMAIL) && is_object($RCMAIL->plugins)) {
    $log = $RCMAIL->plugins->exec_hook('write_log', array('name' => $name, 'date' => $date, 'line' => $line));
    $name = $log['name'];
    $line = $log['line'];
    $date = $log['date'];
    if ($log['abort'])
      return;
  }
 
  $log_entry = sprintf("[%s]: %s\n", date($CONFIG['log_date_format']), $line);
  $log_entry = sprintf("[%s]: %s\n", $date, $line);
  if ($CONFIG['log_driver'] == 'syslog') {
    if ($name == 'errors')
      $prio = LOG_ERR;
    else
      $prio = LOG_INFO;
    $prio = $name == 'errors' ? LOG_ERR : LOG_INFO;
    syslog($prio, $log_entry);
  } else {
    return true;
  }
  else {
    // log_driver == 'file' is assumed here
    if (empty($CONFIG['log_dir']))
      $CONFIG['log_dir'] = INSTALL_PATH.'logs';
@@ -1017,8 +1046,10 @@
      fwrite($fp, $log_entry);
      fflush($fp);
      fclose($fp);
      return true;
    }
  }
  return false;
}
@@ -1034,7 +1065,7 @@
/**
 * @access private
 */
function rcube_print_time($timer, $label='Timer')
function rcube_print_time($timer, $label='Timer', $dest='console')
{
  static $print_count = 0;
  
@@ -1045,7 +1076,7 @@
  if (empty($label))
    $label = 'Timer '.$print_count;
  
  console(sprintf("%s: %0.4f sec", $label, $diff));
  write_log($dest, sprintf("%s: %0.4f sec", $label, $diff));
}