| | |
| | | * Remove temp files older than two days |
| | | */ |
| | | function rcmail_temp_gc() |
| | | { |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | |
| | | $tmp = unslashify($rcmail->config->get('temp_dir')); |
| | | $expire = mktime() - 172800; // expire in 48 hours |
| | | |
| | | if ($dir = opendir($tmp)) |
| | | { |
| | | while (($fname = readdir($dir)) !== false) |
| | | { |
| | | if ($dir = opendir($tmp)) { |
| | | while (($fname = readdir($dir)) !== false) { |
| | | if ($fname{0} == '.') |
| | | continue; |
| | | |
| | | if (filemtime($tmp.'/'.$fname) < $expire) |
| | | @unlink($tmp.'/'.$fname); |
| | | } |
| | | } |
| | | |
| | | closedir($dir); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | * @return void |
| | | */ |
| | | function rcmail_cache_gc() |
| | | { |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | $db = $rcmail->get_dbh(); |
| | | |
| | | |
| | | // get target timestamp |
| | | $ts = get_offset_time($rcmail->config->get('message_cache_lifetime', '30d'), -1); |
| | | |
| | | |
| | | $db->query("DELETE FROM ".get_table_name('messages')." |
| | | WHERE created < " . $db->fromunixtime($ts)); |
| | | |
| | | $db->query("DELETE FROM ".get_table_name('cache')." |
| | | WHERE created < " . $db->fromunixtime($ts)); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | * @param string Error message |
| | | */ |
| | | function rcube_error_handler($errno, $errstr) |
| | | { |
| | | { |
| | | throw new ErrorException($errstr, 0, $errno); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | * @return string Converted string |
| | | */ |
| | | function rcube_charset_convert($str, $from, $to=NULL) |
| | | { |
| | | { |
| | | static $iconv_options = null; |
| | | static $mbstring_loaded = null; |
| | | static $mbstring_list = null; |
| | | static $convert_warning = false; |
| | | static $conv = null; |
| | | |
| | | $error = false; |
| | |
| | | |
| | | if ($mbstring_loaded === null) |
| | | $mbstring_loaded = extension_loaded('mbstring'); |
| | | |
| | | |
| | | // convert charset using mbstring module |
| | | if ($mbstring_loaded) { |
| | | $aliases['WINDOWS-1257'] = 'ISO-8859-13'; |
| | | |
| | | |
| | | if ($mbstring_list === null) { |
| | | $mbstring_list = mb_list_encodings(); |
| | | $mbstring_list = array_map('strtoupper', $mbstring_list); |
| | |
| | | |
| | | $mb_from = $aliases[$from] ? $aliases[$from] : $from; |
| | | $mb_to = $aliases[$to] ? $aliases[$to] : $to; |
| | | |
| | | |
| | | // return if encoding found, string matches encoding and convert succeeded |
| | | if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) { |
| | | if (mb_check_encoding($str, $mb_from) && ($out = mb_convert_encoding($str, $mb_to, $mb_from))) |
| | |
| | | $error = true; |
| | | } |
| | | |
| | | // report error |
| | | 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 or original string |
| | | return $str; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | * @return string The validated charset name |
| | | */ |
| | | function rcube_parse_charset($input) |
| | | { |
| | | { |
| | | static $charsets = array(); |
| | | $charset = strtoupper($input); |
| | | |
| | |
| | | // some clients sends windows-1252 text as latin1, |
| | | // it is safe to use windows-1252 for all latin1 |
| | | $result = $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso; |
| | | } |
| | | } |
| | | // handle broken charset names e.g. WINDOWS-1250HTTP-EQUIVCONTENT-TYPE |
| | | else if (preg_match('/(WIN|WINDOWS)([0-9]+)/', $str, $m)) { |
| | | $result = 'WINDOWS-' . $m[2]; |
| | | } |
| | | } |
| | | // LATIN |
| | | else if (preg_match('/LATIN(.*)/', $str, $m)) { |
| | | $aliases = array('2' => 2, '3' => 3, '4' => 4, '5' => 9, '6' => 10, |
| | |
| | | // it is safe to use windows-1252 for all latin1 |
| | | if ($m[1] == 1) { |
| | | $result = 'WINDOWS-1252'; |
| | | } |
| | | } |
| | | // if iconv is not supported we need ISO labels, it's also safe for iconv |
| | | else if (!empty($aliases[$m[1]])) { |
| | | $result = 'ISO-8859-'.$aliases[$m[1]]; |
| | | } |
| | | } |
| | | // iconv requires convertion of e.g. LATIN-1 to LATIN1 |
| | | else { |
| | | $result = $str; |
| | | } |
| | | } |
| | | } |
| | | else { |
| | | $result = $charset; |
| | | } |
| | | } |
| | | |
| | | $charsets[$input] = $result; |
| | | |
| | | return $result; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | |
| | | // use value from post |
| | | if (isset($_POST[$fname])) { |
| | | $postvalue = get_input_value($fname, RCUBE_INPUT_POST, |
| | | $type == 'textarea' && strpos($attrib['class'], 'mce_editor')!==false ? true : false); |
| | | $postvalue = get_input_value($fname, RCUBE_INPUT_POST, true); |
| | | $value = $attrib['array'] ? $postvalue[intval($colcounts[$col]++)] : $postvalue; |
| | | } |
| | | |
| | |
| | | // an alternative would be to convert the date() format string to fit with strftime() |
| | | $out = ''; |
| | | for($i=0; $i<strlen($format); $i++) { |
| | | if ($format{$i}=='\\') // skip escape chars |
| | | if ($format[$i]=='\\') // skip escape chars |
| | | continue; |
| | | |
| | | // write char "as-is" |
| | | if ($format{$i}==' ' || $format{$i-1}=='\\') |
| | | $out .= $format{$i}; |
| | | if ($format[$i]==' ' || $format{$i-1}=='\\') |
| | | $out .= $format[$i]; |
| | | // weekday (short) |
| | | else if ($format{$i}=='D') |
| | | else if ($format[$i]=='D') |
| | | $out .= rcube_label(strtolower(date('D', $timestamp))); |
| | | // weekday long |
| | | else if ($format{$i}=='l') |
| | | else if ($format[$i]=='l') |
| | | $out .= rcube_label(strtolower(date('l', $timestamp))); |
| | | // month name (short) |
| | | else if ($format{$i}=='M') |
| | | else if ($format[$i]=='M') |
| | | $out .= rcube_label(strtolower(date('M', $timestamp))); |
| | | // month name (long) |
| | | else if ($format{$i}=='F') |
| | | else if ($format[$i]=='F') |
| | | $out .= rcube_label('long'.strtolower(date('M', $timestamp))); |
| | | else if ($format{$i}=='x') |
| | | else if ($format[$i]=='x') |
| | | $out .= strftime('%x %X', $timestamp); |
| | | else |
| | | $out .= date($format{$i}, $timestamp); |
| | | $out .= date($format[$i], $timestamp); |
| | | } |
| | | |
| | | if ($today) { |
| | |
| | | |
| | | $RCMAIL->output->add_gui_object('mailboxlist', $attrib['id']); |
| | | $RCMAIL->output->set_env('mailboxes', $js_mailboxlist); |
| | | $RCMAIL->output->set_env('collapsed_folders', $RCMAIL->config->get('collapsed_folders')); |
| | | $RCMAIL->output->set_env('collapsed_folders', (string)$RCMAIL->config->get('collapsed_folders')); |
| | | } |
| | | |
| | | return $out; |
| | |
| | | $classes = array('mailbox'); |
| | | |
| | | // set special class for Sent, Drafts, Trash and Junk |
| | | if ($folder['id']==$CONFIG['sent_mbox']) |
| | | if ($folder['id'] == $CONFIG['sent_mbox']) |
| | | $classes[] = 'sent'; |
| | | else if ($folder['id']==$CONFIG['drafts_mbox']) |
| | | else if ($folder['id'] == $CONFIG['drafts_mbox']) |
| | | $classes[] = 'drafts'; |
| | | else if ($folder['id']==$CONFIG['trash_mbox']) |
| | | else if ($folder['id'] == $CONFIG['trash_mbox']) |
| | | $classes[] = 'trash'; |
| | | else if ($folder['id']==$CONFIG['junk_mbox']) |
| | | else if ($folder['id'] == $CONFIG['junk_mbox']) |
| | | $classes[] = 'junk'; |
| | | else if ($folder['id']=='INBOX') |
| | | else if ($folder['id'] == 'INBOX') |
| | | $classes[] = 'inbox'; |
| | | else |
| | | $classes[] = '_'.asciiwords($folder_class ? $folder_class : strtolower($folder['id']), true); |
| | |
| | | if ($folder['id'] == $mbox_name) |
| | | $classes[] = 'selected'; |
| | | |
| | | $collapsed = preg_match('/&'.rawurlencode($folder['id']).'&/', $RCMAIL->config->get('collapsed_folders')); |
| | | $collapsed = strpos($CONFIG['collapsed_folders'], '&'.rawurlencode($folder['id']).'&') !== false; |
| | | $unread = $msgcounts ? intval($msgcounts[$folder['id']]['UNSEEN']) : 0; |
| | | |
| | | if ($folder['virtual']) |
| | |
| | | |
| | | $domain = $is_utf ? idn_to_ascii($domain) : idn_to_utf8($domain); |
| | | |
| | | if ($domain === false) { |
| | | return ''; |
| | | } |
| | | |
| | | return $at ? $user . '@' . $domain : $domain; |
| | | } |
| | | |