| | |
| | | && (($f = array_search('from', $a_show_cols)) !== false) && array_search('to', $a_show_cols) === false) |
| | | $a_show_cols[$f] = 'to'; |
| | | |
| | | // make sure 'threads' column is present |
| | | if (!in_array('threads', $a_show_cols)) |
| | | array_unshift($a_show_cols, 'threads'); |
| | | |
| | | $skin_path = $_SESSION['skin_path'] = $CONFIG['skin_path']; |
| | | |
| | | // set client env |
| | |
| | | */ |
| | | function rcmail_js_message_list($a_headers, $insert_top=FALSE, $head_replace=FALSE) |
| | | { |
| | | global $CONFIG, $IMAP, $OUTPUT; |
| | | global $CONFIG, $IMAP, $RCMAIL, $OUTPUT; |
| | | |
| | | if (!empty($_SESSION['list_attrib']['columns'])) |
| | | $a_show_cols = $_SESSION['list_attrib']['columns']; |
| | |
| | | && (($f = array_search('from', $a_show_cols)) !== false) && array_search('to', $a_show_cols) === false) |
| | | $a_show_cols[$f] = 'to'; |
| | | |
| | | // make sure 'threads' column is present |
| | | if (!in_array('threads', $a_show_cols)) |
| | | array_unshift($a_show_cols, 'threads'); |
| | | |
| | | // Plugins may set header's list_cols/list_flags and other rcube_mail_header variables |
| | | // and list columns |
| | | $plugin = $RCMAIL->plugins->exec_hook('messages_list', |
| | | array('messages' => $a_headers, 'cols' => $a_show_cols)); |
| | | |
| | | $a_show_cols = $plugin['cols']; |
| | | $a_headers = $plugin['messages']; |
| | | |
| | | $thead = $head_replace ? rcmail_message_list_head($_SESSION['list_attrib'], $a_show_cols) : NULL; |
| | | |
| | | $OUTPUT->command('set_message_coltypes', $a_show_cols, $thead); |
| | |
| | | if (empty($a_headers)) |
| | | return; |
| | | |
| | | // remove 'attachment' and 'flag' columns, we don't need them here |
| | | if(($key = array_search('attachment', $a_show_cols)) !== FALSE) |
| | | // remove 'threads', 'attachment', 'flag' columns, we don't need them here |
| | | if (($key = array_search('attachment', $a_show_cols)) !== FALSE) |
| | | unset($a_show_cols[$key]); |
| | | if(($key = array_search('flag', $a_show_cols)) !== FALSE) |
| | | if (($key = array_search('flag', $a_show_cols)) !== FALSE) |
| | | unset($a_show_cols[$key]); |
| | | |
| | | if (($key = array_search('threads', $a_show_cols)) !== FALSE) |
| | | unset($a_show_cols[$key]); |
| | | // loop through message headers |
| | | |
| | | foreach ($a_headers as $n => $header) |
| | | { |
| | | $a_msg_cols = array(); |
| | | $a_msg_flags = array(); |
| | | |
| | | if (empty($header)) |
| | | continue; |
| | | |
| | | $a_msg_cols = array(); |
| | | $a_msg_flags = array(); |
| | | |
| | | $IMAP->set_charset(!empty($header->charset) ? $header->charset : $CONFIG['default_charset']); |
| | | |
| | |
| | | $a_msg_flags['attachment'] = 1; |
| | | $a_msg_flags['mbox'] = $mbox; |
| | | |
| | | // merge with plugin result |
| | | if (!empty($header->list_flags) && is_array($header->list_flags)) |
| | | $a_msg_flags = array_merge($a_msg_flags, $header->list_flags); |
| | | if (!empty($header->list_cols) && is_array($header->list_cols)) |
| | | $a_msg_cols = array_merge($a_msg_cols, $header->list_cols); |
| | | |
| | | $OUTPUT->command('add_message_row', |
| | | $header->uid, |
| | | $a_msg_cols, |
| | |
| | | $insert_top); |
| | | } |
| | | |
| | | if ($IMAP->threading && $a_headers) { |
| | | if ($IMAP->threading) { |
| | | $OUTPUT->command('init_threads', (array) $roots); |
| | | } |
| | | } |
| | |
| | | else |
| | | $list_menu = ''; |
| | | |
| | | $cells = array(array('className' => 'threads', 'html' => $list_menu)); |
| | | $cells = array(); |
| | | |
| | | foreach ($a_show_cols as $col) { |
| | | // get column name |
| | |
| | | break; |
| | | case 'attachment': |
| | | $col_name = sprintf($image_tag, $skin_path, $attrib['attachmenticon'], ''); |
| | | break; |
| | | case 'threads': |
| | | $col_name = $list_menu; |
| | | break; |
| | | default: |
| | | $col_name = Q(rcube_label($col)); |
| | |
| | | } |
| | | |
| | | |
| | | function rcmail_send_unread_count($mbox_name, $force=false) |
| | | function rcmail_send_unread_count($mbox_name, $force=false, $count=null) |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | $old_unseen = $_SESSION['unseen_count'][$mbox_name]; |
| | | $unseen = $RCMAIL->imap->messagecount($mbox_name, 'UNSEEN', $force); |
| | | |
| | | if ($count === null) |
| | | $unseen = $RCMAIL->imap->messagecount($mbox_name, 'UNSEEN', $force); |
| | | else |
| | | $unseen = $count; |
| | | |
| | | if ($unseen != $old_unseen || ($mbox_name == 'INBOX')) |
| | | $RCMAIL->output->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX')); |
| | |
| | | if (!isset($part->body)) |
| | | $part->body = $MESSAGE->get_part_content($part->mime_id); |
| | | |
| | | // message is cached but not exists (#1485443), or other error |
| | | if ($part->body === false) { |
| | | rcmail_message_error($MESSAGE->uid); |
| | | } |
| | | |
| | | // re-format format=flowed content |
| | | if ($part->ctype_secondary == "plain" && $part->ctype_parameters['format'] == "flowed") |
| | | $part->body = rcube_message::unfold_flowed($part->body); |
| | | |
| | | $body = rcmail_print_body($part, array('safe' => $safe_mode, 'plain' => !$CONFIG['prefer_html'])); |
| | | |
| | | if ($part->ctype_secondary == 'html') |
| | |
| | | |
| | | /** |
| | | * Wrap text to a given number of characters per line |
| | | * but respect the mail quotation of replies messages (>) |
| | | * but respect the mail quotation of replies messages (>). |
| | | * Finally add another quotation level by prpending the lines |
| | | * with > |
| | | * |
| | | * @param string Text to wrap |
| | | * @param int The line width |
| | | * @return string The wrapped text |
| | | */ |
| | | function rcmail_wrap_quoted($text, $max = 76) |
| | | function rcmail_wrap_and_quote($text, $length = 72) |
| | | { |
| | | // Rebuild the message body with a maximum of $max chars, while keeping quoted message. |
| | | $max = min(77, $length + 8); |
| | | $lines = preg_split('/\r?\n/', trim($text)); |
| | | $out = ''; |
| | | |
| | | foreach ($lines as $line) { |
| | | if (strlen($line) > $max) { |
| | | if (preg_match('/^([>\s]+)/', $line, $regs)) { |
| | | $length = strlen($regs[0]); |
| | | $prefix = substr($line, 0, $length); |
| | | |
| | | // Remove '> ' from the line, then wordwrap() the line |
| | | $line = rc_wordwrap(substr($line, $length), $max - $length); |
| | | |
| | | // Rebuild the line with '> ' at the beginning of each 'subline' |
| | | $newline = ''; |
| | | foreach (explode("\n", $line) as $l) { |
| | | $newline .= $prefix . $l . "\n"; |
| | | } |
| | | |
| | | // Remove the righest newline char |
| | | $line = rtrim($newline); |
| | | // don't wrap already quoted lines |
| | | if ($line[0] == '>') |
| | | $line = '>' . rtrim($line); |
| | | else if (mb_strlen($line) > $max) { |
| | | $newline = ''; |
| | | foreach(explode("\n", rc_wordwrap($line, $length - 2)) as $l) { |
| | | if (strlen($l)) |
| | | $newline .= '> ' . $l . "\n"; |
| | | else |
| | | $newline .= ">\n"; |
| | | } |
| | | else { |
| | | $line = rc_wordwrap($line, $max); |
| | | } |
| | | $line = rtrim($newline); |
| | | } |
| | | else |
| | | $line = '> ' . $line; |
| | | |
| | | // Append the line |
| | | $out .= $line . "\n"; |
| | |
| | | if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { |
| | | if (preg_match_all('/<([^@]+@[^>]+)>/', $headers_enc['To'], $m)) { |
| | | $headers_enc['To'] = implode(', ', $m[1]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | $msg_body = $message->get(); |
| | | |
| | |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Could not create message: ".$msg_body->getMessage()), |
| | | TRUE, FALSE); |
| | | else if (ini_get('safe_mode')) |
| | | $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str); |
| | | else |
| | | $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str, "-f$from"); |
| | | else { |
| | | $delim = $RCMAIL->config->header_delimiter(); |
| | | $to = $headers_enc['To']; |
| | | $subject = $headers_enc['Subject']; |
| | | |
| | | if ($delim != "\r\n") { |
| | | $header_str = str_replace("\r\n", $delim, $header_str); |
| | | $msg_body = str_replace("\r\n", $delim, $msg_body); |
| | | $to = str_replace("\r\n", $delim, $to); |
| | | $subject = str_replace("\r\n", $delim, $subject); |
| | | } |
| | | |
| | | if (ini_get('safe_mode')) |
| | | $sent = mail($to, $subject, $msg_body, $header_str); |
| | | else |
| | | $sent = mail($to, $subject, $msg_body, $header_str, "-f$from"); |
| | | } |
| | | } |
| | | |
| | | if ($sent) { |
| | |
| | | $recipient = array_shift($IMAP->decode_address_list($message->headers->mdn_to)); |
| | | $mailto = $recipient['mailto']; |
| | | |
| | | $compose = new Mail_mime($RCMAIL->config->header_delimiter()); |
| | | $compose = new Mail_mime("\r\n"); |
| | | |
| | | $compose->setParam('text_encoding', 'quoted-printable'); |
| | | $compose->setParam('html_encoding', 'quoted-printable'); |
| | |
| | | |
| | | // compose headers array |
| | | $headers = array( |
| | | 'Date' => date('r'), |
| | | 'Date' => rcmail_user_date(), |
| | | 'From' => $sender, |
| | | 'To' => $message->headers->mdn_to, |
| | | 'Subject' => rcube_label('receiptread') . ': ' . $message->subject, |
| | |
| | | return false; |
| | | } |
| | | |
| | | // Returns RFC2822 formatted current date in user's timezone |
| | | function rcmail_user_date() |
| | | { |
| | | global $CONFIG; |
| | | |
| | | // get user's timezone |
| | | if ($CONFIG['timezone'] === 'auto') { |
| | | $tz = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : date('Z')/3600; |
| | | } |
| | | else { |
| | | $tz = $CONFIG['timezone']; |
| | | if ($CONFIG['dst_active']) |
| | | $tz++; |
| | | } |
| | | |
| | | $date = time() + $tz * 60 * 60; |
| | | $date = gmdate('r', $date); |
| | | $date = preg_replace('/[+-][0-9]{4}$/', sprintf('%+05d', $tz * 100), $date); |
| | | |
| | | return $date; |
| | | } |
| | | |
| | | |
| | | function rcmail_search_filter($attrib) |
| | | { |
| | | global $OUTPUT, $CONFIG; |
| | |
| | | return $out; |
| | | } |
| | | |
| | | function rcmail_message_error($uid=null) |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | // Set env variables for messageerror.html template |
| | | if ($RCMAIL->action == 'show') { |
| | | $mbox_name = $RCMAIL->imap->get_mailbox_name(); |
| | | $RCMAIL->output->set_env('mailbox', $mbox_name); |
| | | $RCMAIL->output->set_env('uid', null); |
| | | } |
| | | // display error message |
| | | $RCMAIL->output->show_message('messageopenerror', 'error'); |
| | | // ... display message error page |
| | | $RCMAIL->output->send('messageerror'); |
| | | } |
| | | |
| | | // register UI objects |
| | | $OUTPUT->add_handlers(array( |
| | |
| | | )); |
| | | |
| | | ?> |
| | | |