thomascube
2007-10-10 352aefed85962adf6c6079b4a9ed7abf3ad8cd50
program/include/main.inc
@@ -29,6 +29,7 @@
require_once('lib/des.inc');
require_once('lib/utf7.inc');
require_once('lib/utf8.class.php');
require_once('include/rcube_shared.inc');
require_once('include/rcmail_template.inc');
@@ -461,7 +462,7 @@
  // add some basic label to client
  if (!$OUTPUT->ajax_call)
    rcube_add_label('loading');
    rcube_add_label('loading', 'movingmessage');
  }
@@ -532,7 +533,6 @@
  {
  global $CONFIG, $IMAP, $DB, $sess_user_lang;
  $user_id = NULL;
  $user    = strtolower($user); // fix case: #1484473
  
  if (!$host)
    $host = $CONFIG['default_host'];
@@ -573,7 +573,7 @@
     Inspired by Marco <P0L0_notspam_binware.org>
  */
  // Check if we need to add domain
  if (!empty($CONFIG['username_domain']) && !strstr($user, '@'))
  if (!empty($CONFIG['username_domain']) && !strpos($user, '@'))
    {
    if (is_array($CONFIG['username_domain']) && isset($CONFIG['username_domain'][$host]))
      $user .= '@'.$CONFIG['username_domain'][$host];
@@ -581,14 +581,22 @@
      $user .= '@'.$CONFIG['username_domain'];
    }
  // try to resolve email address from virtuser table
  if (!empty($CONFIG['virtuser_file']) && strpos($user, '@'))
    $user = rcmail_email2user($user);
  // lowercase username if it's an e-mail address (#1484473)
  if (strpos($user, '@'))
    $user = strtolower($user);
  // query if user already registered
  $sql_result = $DB->query("SELECT user_id, username, language, preferences
                            FROM ".get_table_name('users')."
                            WHERE  mail_host=? AND (username=? OR alias=?)",
                            $host,
                            $user,
                            $user);
  $sql_result = $DB->query(
    "SELECT user_id, username, language, preferences
     FROM ".get_table_name('users')."
     WHERE  mail_host=? AND (username=? OR alias=?)",
    $host,
    $user,
    $user);
  // user already registered -> overwrite username
  if ($sql_arr = $DB->fetch_assoc($sql_result))
@@ -596,11 +604,6 @@
    $user_id = $sql_arr['user_id'];
    $user = $sql_arr['username'];
    }
  // try to resolve email address from virtuser table
  if (!empty($CONFIG['virtuser_file']) && strstr($user, '@'))
    $user = rcmail_email2user($user);
  // exit if IMAP login failed
  if (!($imap_login  = $IMAP->connect($host, $user, $pass, $imap_port, $imap_ssl)))
@@ -632,6 +635,15 @@
  else if ($CONFIG['auto_create_user'])
    {
    $user_id = rcmail_create_user($user, $host);
    }
  else
    {
    raise_error(array(
      'code' => 600,
      'type' => 'php',
      'file' => "config/main.inc.php",
      'message' => "Acces denied for new user $user. 'auto_create_user' is disabled"
      ), true, false);
    }
  if ($user_id)
@@ -671,7 +683,7 @@
  $user_email = '';
  // try to resolve user in virtusertable
  if (!empty($CONFIG['virtuser_file']) && strstr($user, '@')==FALSE)
  if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@'))
    $user_email = rcmail_user2email($user);
  $DB->query("INSERT INTO ".get_table_name('users')."
@@ -687,7 +699,7 @@
    $mail_domain = rcmail_mail_domain($host);
   
    if ($user_email=='')
      $user_email = strstr($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
      $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
    $user_name = $user!=$user_email ? $user : '';
@@ -840,6 +852,9 @@
function rcmail_save_user_prefs($a_user_prefs)
  {
  global $DB, $CONFIG, $sess_user_lang;
  // merge (partial) prefs array with existing settings
  $a_user_prefs += (array)$_SESSION['user_prefs'];
  
  $DB->query("UPDATE ".get_table_name('users')."
              SET    preferences=?,
@@ -1121,10 +1136,6 @@
  if (!$enctype)
    $enctype = $GLOBALS['OUTPUT_TYPE'];
  // convert nbsps back to normal spaces if not html
  if ($enctype!='html')
    $str = str_replace(chr(160), ' ', $str);
  // encode for plaintext
  if ($enctype=='text')
    return str_replace("\r\n", "\n", $mode=='remove' ? strip_tags($str) : $str);
@@ -1169,11 +1180,10 @@
    for ($c=160; $c<256; $c++)  // can be increased to support more charsets
      {
      $hex = dechex($c);
      $xml_rep_table[Chr($c)] = "&#$c;";
      
      if ($OUTPUT->get_charset()=='ISO-8859-1')
        $js_rep_table[Chr($c)] = sprintf("\u%s%s", str_repeat('0', 4-strlen($hex)), $hex);
        $js_rep_table[Chr($c)] = sprintf("\\u%04x", $c);
      }
    $xml_rep_table['"'] = '&quot;';
@@ -1450,6 +1460,50 @@
/**
 * Replace all css definitions with #container [def]
 *
 * @param string CSS source code
 * @param string Container ID to use as prefix
 * @return string Modified CSS source
 */
function rcmail_mod_css_styles($source, $container_id, $base_url = '')
  {
  $a_css_values = array();
  $last_pos = 0;
  // cut out all contents between { and }
  while (($pos = strpos($source, '{', $last_pos)) && ($pos2 = strpos($source, '}', $pos)))
  {
    $key = sizeof($a_css_values);
    $a_css_values[$key] = substr($source, $pos+1, $pos2-($pos+1));
    $source = substr($source, 0, $pos+1) . "<<str_replacement[$key]>>" . substr($source, $pos2, strlen($source)-$pos2);
    $last_pos = $pos+2;
  }
  // remove html commends and add #container to each tag selector.
  // also replace body definition because we also stripped off the <body> tag
  $styles = preg_replace(
    array(
      '/(^\s*<!--)|(-->\s*$)/',
      '/(^\s*|,\s*|\}\s*)([a-z0-9\._#][a-z0-9\.\-_]*)/im',
      '/@import\s+(url\()?[\'"]?([^\)\'"]+)[\'"]?(\))?/ime',
      '/<<str_replacement\[([0-9]+)\]>>/e',
      "/$container_id\s+body/i"
    ),
    array(
      '',
      "\\1#$container_id \\2",
      "sprintf(\"@import url('./bin/modcss.php?u=%s&c=%s')\", urlencode(make_absolute_url('\\2','$base_url')), urlencode($container_id))",
      "\$a_css_values[\\1]",
      "$container_id div.rcmBody"
    ),
    $source);
  return $styles;
  }
/**
 * Compose a valid attribute string for HTML tags
 *
 * @param array Named tag attributes