From 43fa235da354c8b53aa69ba745c1d398a758fcaf Mon Sep 17 00:00:00 2001 From: svncommit <devs@roundcube.net> Date: Wed, 26 Oct 2005 05:42:19 -0400 Subject: [PATCH] --- program/include/main.inc | 221 +++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 156 insertions(+), 65 deletions(-) diff --git a/program/include/main.inc b/program/include/main.inc index ebf2f26..0e20616 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -30,7 +30,7 @@ // check client $BROWSER = rcube_browser(); - + // load config file include_once('config/main.inc.php'); $CONFIG = is_array($rcmail_config) ? $rcmail_config : array(); @@ -51,13 +51,20 @@ ini_set('display_errors', 1); else ini_set('display_errors', 0); + + // set session garbage collecting time according to session_lifetime + if (!empty($CONFIG['session_lifetime'])) + ini_set('session.gc_maxlifetime', ($CONFIG['session_lifetime']+2)*60); // prepare DB connection + require_once('include/rcube_'.(empty($CONFIG['db_backend']) ? 'db' : $CONFIG['db_backend']).'.inc'); + $DB = new rcube_db($CONFIG['db_dsnw'], $CONFIG['db_dsnr']); + $DB->sqlite_initials = $INSTALL_PATH.'SQL/sqlite.initial.sql'; // we can use the database for storing session data - if (is_object($DB)) + if (is_object($DB) && $DB->db_provider!='sqlite') include_once('include/session.inc'); @@ -69,7 +76,7 @@ if (!$_SESSION['client_id']) { $_SESSION['client_id'] = $sess_id; - $_SESSION['user_lang'] = 'en'; + $_SESSION['user_lang'] = substr($CONFIG['locale_string'], 0, 2); $_SESSION['auth_time'] = mktime(); $_SESSION['auth'] = rcmail_auth_hash($sess_id, $_SESSION['auth_time']); unset($GLOBALS['_auth']); @@ -132,33 +139,46 @@ function rcmail_imap_init($connect=FALSE) { global $CONFIG, $IMAP; - + $IMAP = new rcube_imap(); - - // set root dir from config - if (strlen($CONFIG['imap_root'])) - $IMAP->set_rootdir($CONFIG['imap_root']); - - if (is_array($CONFIG['default_imap_folders'])) - $IMAP->set_default_mailboxes($CONFIG['default_imap_folders']); - - if (strlen($_SESSION['mbox'])) - $IMAP->set_mailbox($_SESSION['mbox']); - - if (isset($_SESSION['page'])) - $IMAP->set_page($_SESSION['page']); - - // set pagesize from config - if (isset($CONFIG['pagesize'])) - $IMAP->set_pagesize($CONFIG['pagesize']); - // connect with stored session data if ($connect) { - if (!($conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password'])))) + if (!($conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']))) show_message('imaperror', 'error'); + + rcmail_set_imap_prop(); } + + // enable caching of imap data + if ($CONFIG['enable_caching']===TRUE) + $IMAP->set_caching(TRUE); + + if (is_array($CONFIG['default_imap_folders'])) + $IMAP->set_default_mailboxes($CONFIG['default_imap_folders']); + + // set pagesize from config + if (isset($CONFIG['pagesize'])) + $IMAP->set_pagesize($CONFIG['pagesize']); + } + + +// set root dir and last stored mailbox +// this must be done AFTER connecting to the server +function rcmail_set_imap_prop() + { + global $CONFIG, $IMAP; + + // set root dir from config + if (strlen($CONFIG['imap_root'])) + $IMAP->set_rootdir($CONFIG['imap_root']); + + if (strlen($_SESSION['mbox'])) + $IMAP->set_mailbox($_SESSION['mbox']); + + if (isset($_SESSION['page'])) + $IMAP->set_page($_SESSION['page']); } @@ -215,7 +235,7 @@ $javascript = "var $JS_OBJECT_NAME = new rcube_webmail();\n"; $javascript .= "$JS_OBJECT_NAME.set_env('comm_path', '$COMM_PATH');\n"; - if ($_GET['_framed'] || $_POST['_framed']) + if (!empty($GLOBALS['_framed'])) $javascript .= "$JS_OBJECT_NAME.set_env('framed', true);\n"; $OUTPUT->add_script($javascript); @@ -228,26 +248,42 @@ function rcmail_login($user, $pass, $host=NULL) { global $CONFIG, $IMAP, $DB, $sess_user_lang; + $user_id = NULL; if (!$host) $host = $CONFIG['default_host']; - // exit if IMAP login failed - if (!($imap_login = $IMAP->connect($host, $user, $pass))) - return FALSE; + // parse $host URL + $a_host = parse_url($host); + if ($a_host['host']) + { + $host = $a_host['host']; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE; + $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']); + } // query if user already registered - $sql_result = $DB->query(sprintf("SELECT user_id, language, preferences - FROM %s - WHERE username='%s' AND mail_host='%s'", - get_table_name('users'), - $user, $host)); + $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 + // user already registered -> overwrite username if ($sql_arr = $DB->fetch_assoc($sql_result)) { $user_id = $sql_arr['user_id']; - + $user = $sql_arr['username']; + } + + // exit if IMAP login failed + if (!($imap_login = $IMAP->connect($host, $user, $pass, $imap_port, $imap_ssl))) + return FALSE; + + // user already registered + if ($user_id && !empty($sql_arr)) + { // get user prefs if (strlen($sql_arr['preferences'])) { @@ -256,16 +292,16 @@ array_merge($CONFIG, $user_prefs); } + // set user specific language if (strlen($sql_arr['language'])) $sess_user_lang = $_SESSION['user_lang'] = $sql_arr['language']; - + // update user's record - $DB->query(sprintf("UPDATE %s - SET last_login=NOW() - WHERE user_id=%d", - get_table_name('users'), - $user_id)); + $DB->query("UPDATE ".get_table_name('users')." + SET last_login=NOW() + WHERE user_id=?", + $user_id); } // create new system user else if ($CONFIG['auto_create_user']) @@ -277,7 +313,10 @@ { $_SESSION['user_id'] = $user_id; $_SESSION['imap_host'] = $host; + $_SESSION['imap_port'] = $imap_port; + $_SESSION['imap_ssl'] = $imap_ssl; $_SESSION['username'] = $user; + $_SESSION['user_lang'] = $sess_user_lang; $_SESSION['password'] = encrypt_passwd($pass); // force reloading complete list of subscribed mailboxes @@ -294,24 +333,26 @@ function rcmail_create_user($user, $host) { global $DB, $CONFIG, $IMAP; + + $DB->query("INSERT INTO ".get_table_name('users')." + (created, last_login, username, mail_host, language) + VALUES (NOW(), NOW(), ?, ?, ?)", + $user, + $host, + $_SESSION['user_lang']); - $DB->query(sprintf("INSERT INTO %s - (created, last_login, username, mail_host) - VALUES (NOW(), NOW(), '%s', '%s')", - get_table_name('users'), - $user, $host)); - - if ($user_id = $DB->insert_id()) + if ($user_id = $DB->insert_id('user_ids')) { + $user_email = strstr($user, '@') ? $user : sprintf('%s@%s', $user, $host); + $user_name = $user!=$user_email ? $user : ''; + // also create a new identity record - $DB->query(sprintf("INSERT INTO %s - (user_id, `default`, name, email) - VALUES (%d, '1', '%s', '%s@%s')", - get_table_name('identities'), - $user_id, - $user, - $user, - $host)); + $DB->query("INSERT INTO ".get_table_name('identities')." + (user_id, `default`, name, email) + VALUES (?, '1', ?, ?)", + $user_id, + $user_name, + $user_email); // get existing mailboxes $a_mailboxes = $IMAP->list_mailboxes(); @@ -324,6 +365,14 @@ if ($CONFIG['trash_mbox'] && !in_array_nocase($CONFIG['trash_mbox'], $a_mailboxes)) $IMAP->create_mailbox($CONFIG['trash_mbox'], TRUE); } + else + { + raise_error(array('code' => 500, + 'type' => 'php', + 'line' => __LINE__, + 'file' => __FILE__, + 'message' => "Failed to create new user"), TRUE, FALSE); + } return $user_id; } @@ -333,7 +382,7 @@ { global $OUTPUT, $JS_OBJECT_NAME, $REMOTE_REQUEST; - $framed = ($_GET['framed'] || $_POST['_framed']); + $framed = $GLOBALS['_framed']; $command = sprintf("display_message('%s', '%s');", addslashes(rep_specialchars_output(rcube_label($message))), $type); @@ -353,8 +402,13 @@ function console($msg, $type=1) { - print $msg; - print "\n<hr>\n"; + if ($GLOBALS['REMOTE_REQUEST']) + print "// $msg\n"; + else + { + print $msg; + print "\n<hr>\n"; + } } @@ -384,6 +438,33 @@ exit; } + +// read directory program/localization/ and return a list of available languages +function rcube_list_languages() + { + global $CONFIG, $INSTALL_PATH; + static $sa_languages = array(); + + if (!sizeof($sa_languages)) + { + @include_once($INSTLL_PATH.'program/localization/index.inc'); + + if ($dh = @opendir($INSTLL_PATH.'program/localization')) + { + while (($name = readdir($dh)) !== false) + { + if ($name{0}=='.' || !is_dir($INSTLL_PATH.'program/localization/'.$name)) + continue; + + if ($label = $rcube_languages[$name]) + $sa_languages[$name] = $label ? $label : $name; + } + closedir($dh); + } + } + + return $sa_languages; + } @@ -483,7 +564,7 @@ // show a label case 'label': if ($attrib['name'] || $attrib['command']) - return rcube_label($attrib); + return rep_specialchars_output(rcube_label($attrib)); break; // create a menu item @@ -615,7 +696,7 @@ else if (isset($GLOBALS['PAGE_TITLE'])) return rep_specialchars_output("RoundCube|Mail :: ".$GLOBALS['PAGE_TITLE']); else if ($task=='mail' && ($mbox_name = $IMAP->get_mailbox_name())) - return "RoundCube|Mail :: $mbox_name"; + return "RoundCube|Mail :: ".rep_specialchars_output(UTF7DecodeString($mbox_name), 'html', 'all'); else return "RoundCube|Mail :: $task"; } @@ -633,7 +714,7 @@ // create and register a button function rcube_button($attrib) { - global $CONFIG, $OUTPUT, $JS_OBJECT_NAME; + global $CONFIG, $OUTPUT, $JS_OBJECT_NAME, $BROWSER; static $sa_buttons = array(); static $s_button_count = 100; @@ -690,7 +771,14 @@ if ($attrib['alt']) $attrib['alt'] = rep_specialchars_output(rcube_label($attrib['alt'])); - + + // set title to alt attribute for IE browsers + if ($BROWSER['ie'] && $attrib['title'] && !$attrib['alt']) + { + $attrib['alt'] = $attrib['title']; + unset($attrib['title']); + } + // add empty alt attribute for XHTML compatibility if (!isset($attrib['alt'])) $attrib['alt'] = ''; @@ -782,7 +870,7 @@ $table .= "<thead><tr>\n"; foreach ($a_show_cols as $col) - $table .= '<td class="'.$col.'">' . rcube_label($col) . "</td>\n"; + $table .= '<td class="'.$col.'">' . rep_specialchars_output(rcube_label($col)) . "</td>\n"; $table .= "</tr></thead>\n<tbody>\n"; @@ -831,7 +919,7 @@ $input = new textfield($attrib); // use value from post - if ($_POST[$fname]) + if (!empty($_POST[$fname])) $value = $_POST[$fname]; $out = $input->show($value); @@ -957,7 +1045,10 @@ if (is_array($CONFIG['default_host'])) { $select_host = new select(array('name' => '_host')); - $select_host->add($CONFIG['default_host']); + + foreach ($CONFIG['default_host'] as $key => $value) + $select_host->add($value, (is_numeric($key) ? $value : $key)); + $fields['host'] = $select_host->show($_POST['_host']); } else if (!strlen($CONFIG['default_host'])) -- Gitblit v1.9.1