From f3704e18d89e4065cede8509256d7fbf483b7fe6 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Tue, 04 Apr 2006 17:46:27 -0400 Subject: [PATCH] Added labels for nextpage/previouspage --- program/include/main.inc | 243 ++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 203 insertions(+), 40 deletions(-) diff --git a/program/include/main.inc b/program/include/main.inc index 3c07836..a3a3913 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -24,6 +24,12 @@ require_once('lib/utf8.class.php'); +// define constannts for input reading +define('RCUBE_INPUT_GET', 0x0101); +define('RCUBE_INPUT_POST', 0x0102); +define('RCUBE_INPUT_GPC', 0x0103); + + // register session and connect to server function rcmail_startup($task='mail') { @@ -66,12 +72,14 @@ // 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 = new rcube_db($CONFIG['db_dsnw'], $CONFIG['db_dsnr'], $CONFIG['db_persistent']); $DB->sqlite_initials = $INSTALL_PATH.'SQL/sqlite.initial.sql'; + $DB->db_connect('w'); + // we can use the database for storing session data // session queries do not work with MDB2 - if ($CONFIG['db_backend']!='mdb2' && is_object($DB)) + if ($CONFIG['db_backend']!='mdb2' && !$DB->is_error()) include_once('include/session.inc'); @@ -265,7 +273,7 @@ $lang = $rcube_language_aliases[$lang]; // try the first two chars - if (!isset($rcube_languages[$lang]) && strlen($lang>2)) + if (!isset($rcube_languages[$lang]) && strlen($lang)>2) { $lang = substr($lang, 0, 2); $lang = rcube_language_prop($lang); @@ -279,6 +287,7 @@ $charset = $rcube_charsets[$lang]; else $charset = 'UTF-8'; + if ($prop=='charset') return $charset; @@ -306,11 +315,12 @@ $OUTPUT->include_script('program/js/common.js'); $OUTPUT->include_script('program/js/app.js'); + // set locale setting + rcmail_set_locale($sess_user_lang); + // set user-selected charset if (!empty($CONFIG['charset'])) $OUTPUT->set_charset($CONFIG['charset']); - else - rcmail_set_locale($sess_user_lang); // add some basic label to client rcube_add_label('loading'); @@ -320,7 +330,39 @@ // set localization charset based on the given language function rcmail_set_locale($lang) { - global $OUTPUT; + global $OUTPUT, $MBSTRING, $MBSTRING_ENCODING; + static $s_mbstring_loaded = NULL; + + // settings for mbstring module (by Tadashi Jokagi) + if ($s_mbstring_loaded===NULL) + { + if ($s_mbstring_loaded = extension_loaded("mbstring")) + { + $MBSTRING = TRUE; + if (function_exists("mb_mbstring_encodings")) + $MBSTRING_ENCODING = mb_mbstring_encodings(); + else + $MBSTRING_ENCODING = array("ISO-8859-1", "UTF-7", "UTF7-IMAP", "UTF-8", + "ISO-2022-JP", "EUC-JP", "EUCJP-WIN", + "SJIS", "SJIS-WIN"); + + $MBSTRING_ENCODING = array_map("strtoupper", $MBSTRING_ENCODING); + if (in_array("SJIS", $MBSTRING_ENCODING)) + $MBSTRING_ENCODING[] = "SHIFT_JIS"; + } + else + { + $MBSTRING = FALSE; + $MBSTRING_ENCODING = array(); + } + } + + if ($MBSTRING && function_exists("mb_language")) + { + if (!@mb_language(strtok($lang, "_"))) + $MBSTRING = FALSE; // unsupport language + } + $OUTPUT->set_charset(rcube_language_prop($lang, 'charset')); } @@ -342,6 +384,22 @@ $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']); } + else + $imap_port = $CONFIG['default_port']; + + + /* Modify username with domain if required + Inspired by Marco <P0L0_notspam_binware.org> + */ + // Check if we need to add domain + if ($CONFIG['username_domain'] && !strstr($user, '@')) + { + if (is_array($CONFIG['username_domain']) && isset($CONFIG['username_domain'][$host])) + $user .= '@'.$CONFIG['username_domain'][$host]; + else if (!empty($CONFIG['username_domain'])) + $user .= '@'.$CONFIG['username_domain']; + } + // query if user already registered $sql_result = $DB->query("SELECT user_id, username, language, preferences @@ -436,10 +494,10 @@ if ($user_id = $DB->insert_id(get_sequence_name('users'))) { - if (is_string($CONFIG['mail_domain'])) - $mail_domain = $CONFIG['mail_domain']; - else if (is_array($CONFIG['mail_domain']) && isset($CONFIG['mail_domain'][$host])) + if (is_array($CONFIG['mail_domain']) && isset($CONFIG['mail_domain'][$host])) $mail_domain = $CONFIG['mail_domain'][$host]; + else if (!empty($CONFIG['mail_domain'])) + $mail_domain = $CONFIG['mail_domain']; else $mail_domain = $host; @@ -448,24 +506,25 @@ $user_name = $user!=$user_email ? $user : ''; - // also create a new identity record + // try to resolve the e-mail address from the virtuser table + if (!empty($CONFIG['virtuser_query'])) + { + $sql_result = $DB->query(preg_replace('/%u/', $user, $CONFIG['virtuser_query'])); + if ($sql_arr = $DB->fetch_array($sql_result)) + $user_email = $sql_arr[0]; + } + + // also create new identity records $DB->query("INSERT INTO ".get_table_name('identities')." (user_id, del, standard, name, email) VALUES (?, 0, 1, ?, ?)", $user_id, $user_name, $user_email); + // get existing mailboxes $a_mailboxes = $IMAP->list_mailboxes(); - - // check if the configured mailbox for sent messages exists - if ($CONFIG['sent_mbox'] && !in_array_nocase($CONFIG['sent_mbox'], $a_mailboxes)) - $IMAP->create_mailbox($CONFIG['sent_mbox'], TRUE); - - // check if the configured mailbox for sent messages exists - if ($CONFIG['trash_mbox'] && !in_array_nocase($CONFIG['trash_mbox'], $a_mailboxes)) - $IMAP->create_mailbox($CONFIG['trash_mbox'], TRUE); } else { @@ -568,13 +627,13 @@ } -function show_message($message, $type='notice') +function show_message($message, $type='notice', $vars=NULL) { global $OUTPUT, $JS_OBJECT_NAME, $REMOTE_REQUEST; - + $framed = $GLOBALS['_framed']; $command = sprintf("display_message('%s', '%s');", - addslashes(rep_specialchars_output(rcube_label($message))), + addslashes(rep_specialchars_output(rcube_label(array('name' => $message, 'vars' => $vars)))), $type); if ($REMOTE_REQUEST) @@ -619,6 +678,7 @@ // send correct response on a remote request function rcube_remote_response($js_code, $flush=FALSE) { + global $OUTPUT, $CHARSET; static $s_header_sent = FALSE; if (!$s_header_sent) @@ -630,7 +690,7 @@ } // send response code - print rcube_charset_convert($js_code, 'UTF-8', $GLOBALS['CHARSET']); + print rcube_charset_convert($js_code, $CHARSET, $OUTPUT->get_charset()); if ($flush) // flush the output buffer flush(); @@ -662,7 +722,6 @@ closedir($dh); } } - return $sa_languages; } @@ -697,21 +756,48 @@ } +// remove all expired message cache records +function rcmail_message_cache_gc() + { + global $DB, $CONFIG; + + // no cache lifetime configured + if (empty($CONFIG['message_cache_lifetime'])) + return; + + // get target timestamp + $ts = get_offset_time($CONFIG['message_cache_lifetime'], -1); + + $DB->query("DELETE FROM ".get_table_name('messages')." + WHERE created < ".$DB->fromunixtime($ts)); + } + // convert a string from one charset to another // this function is not complete and not tested well function rcube_charset_convert($str, $from, $to=NULL) { + global $MBSTRING, $MBSTRING_ENCODING; + $from = strtoupper($from); $to = $to==NULL ? strtoupper($GLOBALS['CHARSET']) : strtoupper($to); - + if ($from==$to) return $str; - // convert charset using iconv module - if (0 && function_exists('iconv') && $from!='UTF-7' && $to!='UTF-7') { - return iconv($from, $to, $str); + // convert charset using mbstring module + if ($MBSTRING) + { + $to = $to=="UTF-7" ? "UTF7-IMAP" : $to; + $from = $from=="UTF-7" ? "UTF7-IMAP": $from; + + if (in_array($to, $MBSTRING_ENCODING) && in_array($from, $MBSTRING_ENCODING)) + return mb_convert_encoding($str, $to, $from); } + + // convert charset using iconv module + if (function_exists('iconv') && $from!='UTF-7' && $to!='UTF-7') + return iconv($from, $to, $str); $conv = new utf8(); @@ -797,6 +883,7 @@ if (!$js_rep_table) { $js_rep_table = $rtf_rep_table = $xml_rep_table = array(); + $xml_rep_table['&'] = '&'; for ($c=160; $c<256; $c++) // can be increased to support more charsets { @@ -818,7 +905,12 @@ // encode for javascript use if ($enctype=='js') + { + if ($OUTPUT->get_charset()!='UTF-8') + $str = rcube_charset_convert($str, $GLOBALS['CHARSET'], $OUTPUT->get_charset()); + return preg_replace(array("/\r\n/", '/"/', "/([^\\\])'/"), array('\n', '\"', "$1\'"), strtr($str, $js_rep_table)); + } // encode for RTF if ($enctype=='rtf') @@ -827,6 +919,52 @@ // no encoding given -> return original string return $str; } + + +/** + * Read input value and convert it for internal use + * Performs stripslashes() and charset conversion if necessary + * + * @param string Field name to read + * @param int Source to get value from (GPC) + * @param boolean Allow HTML tags in field value + * @param string Charset to convert into + * @return string Field value or NULL if not available + */ +function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL) + { + global $OUTPUT; + $value = NULL; + + if ($source==RCUBE_INPUT_GET && isset($_GET[$fname])) + $value = $_GET[$fname]; + else if ($source==RCUBE_INPUT_POST && isset($_POST[$fname])) + $value = $_POST[$fname]; + else if ($source==RCUBE_INPUT_GPC) + { + if (isset($_POST[$fname])) + $value = $_POST[$fname]; + else if (isset($_GET[$fname])) + $value = $_GET[$fname]; + else if (isset($_COOKIE[$fname])) + $value = $_COOKIE[$fname]; + } + + // strip slashes if magic_quotes enabled + if ((bool)get_magic_quotes_gpc()) + $value = stripslashes($value); + + // remove HTML tags if not allowed + if (!$allow_html) + $value = strip_tags($value); + + // convert to internal charset + if (is_object($OUTPUT)) + return rcube_charset_convert($value, $OUTPUT->get_charset(), $charset); + else + return $value; + } + @@ -978,6 +1116,7 @@ 'composeattachment' => 'rcmail_compose_attachment_field', 'priorityselector' => 'rcmail_priority_selector', 'charsetselector' => 'rcmail_charset_selector', + 'searchform' => 'rcmail_search_form', // ADDRESS BOOK 'addresslist' => 'rcmail_contacts_list', @@ -1002,7 +1141,16 @@ // execute object handler function if ($object_handlers[$object] && function_exists($object_handlers[$object])) return call_user_func($object_handlers[$object], $attrib); - + + else if ($object=='productname') + { + $name = !empty($CONFIG['product_name']) ? $CONFIG['product_name'] : 'RoundCube Webmail'; + return rep_specialchars_output($name, 'html', 'all'); + } + else if ($object=='version') + { + return (string)RCMAIL_VERSION; + } else if ($object=='pagetitle') { $task = $GLOBALS['_task']; @@ -1030,7 +1178,7 @@ // create and register a button function rcube_button($attrib) { - global $CONFIG, $OUTPUT, $JS_OBJECT_NAME, $BROWSER; + global $CONFIG, $OUTPUT, $JS_OBJECT_NAME, $BROWSER, $COMM_PATH, $MAIN_TASKS; static $sa_buttons = array(); static $s_button_count = 100; @@ -1102,6 +1250,7 @@ // register button in the system if ($attrib['command']) + { $OUTPUT->add_script(sprintf("%s.register_button('%s', '%s', '%s', '%s', '%s', '%s');", $JS_OBJECT_NAME, $command, @@ -1110,6 +1259,11 @@ $attrib['imageact'] ? $skin_path.$attrib['imageact'] : $attrib['classact'], $attirb['imagesel'] ? $skin_path.$attirb['imagesel'] : $attrib['classsel'], $attrib['imageover'] ? $skin_path.$attrib['imageover'] : '')); + + // make valid href to task buttons + if (in_array($attrib['command'], $MAIN_TASKS)) + $attrib['href'] = ereg_replace('_task=[a-z]+', '_task='.$attrib['command'], $COMM_PATH); + } // overwrite attributes if (!$attrib['href']) @@ -1284,25 +1438,30 @@ { global $CONFIG, $sess_user_lang; + $ts = NULL; + if (is_numeric($date)) $ts = $date; else if (!empty($date)) - $ts = strtotime($date); - else + $ts = @strtotime($date); + + if (empty($ts)) return ''; + + // get user's timezone + $tz = $CONFIG['timezone']; + if ($CONFIG['dst_active']) + $tz++; // convert time to user's timezone - $timestamp = $ts - date('Z', $ts) + ($CONFIG['timezone'] * 3600); + $timestamp = $ts - date('Z', $ts) + ($tz * 3600); // get current timestamp in user's timezone $now = time(); // local time $now -= (int)date('Z'); // make GMT time - $now += ($CONFIG['timezone'] * 3600); // user's time + $now += ($tz * 3600); // user's time $now_date = getdate(); - //$day_secs = 60*((int)date('H', $now)*60 + (int)date('i', $now)); - //$week_secs = 60 * 60 * 24 * 7; - //$diff = $now - $timestamp; $today_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday'], $now_date['year']); $week_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday']-6, $now_date['year']); @@ -1414,7 +1573,7 @@ $input_action = new hiddenfield(array('name' => '_action', 'value' => 'login')); $fields = array(); - $fields['user'] = $input_user->show($_POST['_user']); + $fields['user'] = $input_user->show(get_input_value('_user', RCUBE_INPUT_POST)); $fields['pass'] = $input_pass->show(); $fields['action'] = $input_action->show(); @@ -1471,9 +1630,10 @@ } - function rcmail_charset_selector($attrib) { + global $OUTPUT; + // pass the following attributes to the form class $field_attrib = array('name' => '_charset'); foreach ($attrib as $attr => $value) @@ -1482,10 +1642,11 @@ $charsets = array( 'US-ASCII' => 'ASCII (English)', - 'X-EUC-JP' => 'EUC-JP (Japanese)', + 'EUC-JP' => 'EUC-JP (Japanese)', 'EUC-KR' => 'EUC-KR (Korean)', 'BIG5' => 'BIG5 (Chinese)', 'GB2312' => 'GB2312 (Chinese)', + 'ISO-2022-JP' => 'ISO-2022-JP (Japanese)', 'ISO-8859-1' => 'ISO-8859-1 (Latin-1)', 'ISO-8859-2' => 'ISO-8895-2 (Central European)', 'ISO-8859-7' => 'ISO-8859-7 (Greek)', @@ -1501,11 +1662,13 @@ $select = new select($field_attrib); $select->add(array_values($charsets), array_keys($charsets)); - $set = $_POST['_charset'] ? $_POST['_charset'] : $GLOBALS['CHARSET']; + $set = $_POST['_charset'] ? $_POST['_charset'] : $OUTPUT->get_charset(); return $select->show($set); } +/****** debugging function ********/ + function rcube_timer() { list($usec, $sec) = explode(" ", microtime()); -- Gitblit v1.9.1