| | |
| | | $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id', 'cellpadding', 'cellspacing', 'border', 'summary')); |
| | | |
| | | $out = '<table' . $attrib_str . ">\n"; |
| | | |
| | | |
| | | |
| | | // define list of cols to be displayed |
| | | $a_show_cols = is_array($CONFIG['list_cols']) ? $CONFIG['list_cols'] : array('subject'); |
| | | $a_sort_cols = array('subject', 'date', 'from', 'to'); |
| | |
| | | if (strtolower($IMAP->get_mailbox_name())=='sent' && ($f = array_search('from', $a_show_cols))) |
| | | $a_show_cols[$f] = 'to'; |
| | | |
| | | // add col definition |
| | | $out .= '<colgroup>'; |
| | | $out .= '<col class="icon">'; |
| | | |
| | | foreach ($a_show_cols as $col) |
| | | $out .= sprintf('<col class="%s">', $col); |
| | | |
| | | $out .= '<col class="icon">'; |
| | | $out .= "</colgroup>\n"; |
| | | |
| | | // add table title |
| | | $out .= "<thead><tr>\n<td class=\"icon\"> </td>\n"; |
| | |
| | | |
| | | // make sort links |
| | | $sort = ''; |
| | | if (in_array($col, $a_sort_cols) && (!empty($attrib['sortdescbutton']) || !empty($attrib['sortascbutton']))) |
| | | if ($IMAP->get_capability('sort') && in_array($col, $a_sort_cols)) |
| | | { |
| | | $sort = ' '; |
| | | // have buttons configured |
| | | if (!empty($attrib['sortdescbutton']) || !empty($attrib['sortascbutton'])) |
| | | { |
| | | $sort = ' '; |
| | | |
| | | // asc link |
| | | if (!empty($attrib['sortascbutton'])) |
| | | { |
| | | $sort .= rcube_button(array('command' => 'sort', |
| | | 'prop' => $col.'_ASC', |
| | | 'image' => $attrib['sortascbutton'], |
| | | 'title' => 'sortasc')); |
| | | } |
| | | // asc link |
| | | if (!empty($attrib['sortascbutton'])) |
| | | { |
| | | $sort .= rcube_button(array('command' => 'sort', |
| | | 'prop' => $col.'_ASC', |
| | | 'image' => $attrib['sortascbutton'], |
| | | 'align' => 'absmiddle', |
| | | 'title' => 'sortasc')); |
| | | } |
| | | |
| | | // desc link |
| | | if (!empty($attrib['sortdescbutton'])) |
| | | // desc link |
| | | if (!empty($attrib['sortdescbutton'])) |
| | | { |
| | | $sort .= rcube_button(array('command' => 'sort', |
| | | 'prop' => $col.'_DESC', |
| | | 'image' => $attrib['sortdescbutton'], |
| | | 'align' => 'absmiddle', |
| | | 'title' => 'sortdesc')); |
| | | } |
| | | } |
| | | // just add a link tag to the header |
| | | else |
| | | { |
| | | $sort .= rcube_button(array('command' => 'sort', |
| | | 'prop' => $col.'_DESC', |
| | | 'image' => $attrib['sortdescbutton'], |
| | | 'title' => 'sortdesc')); |
| | | $col_name = sprintf('<a href="./#sort" onclick="return %s.command(\'sort\',\'%s\',this)" title="%s">%s</a>', |
| | | $JS_OBJECT_NAME, |
| | | $col, |
| | | rcube_label('sortby'), |
| | | $col_name); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // part is file/attachment |
| | | else if ($mail_part->disposition=='attachment' || $mail_part->disposition=='inline' || $mail_part->headers['content-id']) |
| | | else if ($mail_part->disposition=='attachment' || $mail_part->disposition=='inline' || $mail_part->headers['content-id'] || |
| | | (empty($mail_part->disposition) && ($mail_part->d_parameters['filename'] || $mail_part->d_parameters['name']))) |
| | | { |
| | | if ($message_ctype_secondary=='related' && $mail_part->headers['content-id']) |
| | | $sa_inline_objects[] = array('filename' => $mail_part->d_parameters['filename'], |
| | | $sa_inline_objects[] = array('filename' => rcube_imap::decode_mime_string($mail_part->d_parameters['filename']), |
| | | 'mimetype' => strtolower("$primary_type/$secondary_type"), |
| | | 'part_id' => $mail_part->mime_id, |
| | | 'content_id' => preg_replace(array('/^</', '/>$/'), '', $mail_part->headers['content-id'])); |
| | | |
| | | else if ($mail_part->d_parameters['filename']) |
| | | $a_attachments[] = array('filename' => $mail_part->d_parameters['filename'], |
| | | $a_attachments[] = array('filename' => rcube_imap::decode_mime_string($mail_part->d_parameters['filename']), |
| | | 'encoding' => strtolower($mail_part->headers['content-transfer-encoding']), |
| | | 'mimetype' => strtolower("$primary_type/$secondary_type"), |
| | | 'part_id' => $mail_part->mime_id, |
| | |
| | | 'content' => $mail_part->body */); |
| | | |
| | | else if ($mail_part->ctype_parameters['name']) |
| | | $a_attachments[] = array('filename' => $mail_part->ctype_parameters['name'], |
| | | $a_attachments[] = array('filename' => rcube_imap::decode_mime_string($mail_part->ctype_parameters['name']), |
| | | 'encoding' => strtolower($mail_part->headers['content-transfer-encoding']), |
| | | 'mimetype' => strtolower("$primary_type/$secondary_type"), |
| | | 'part_id' => $mail_part->mime_id, |
| | |
| | | // get source code of a specific message and cache it |
| | | function rcmail_message_source($uid) |
| | | { |
| | | global $IMAP, $DB; |
| | | global $IMAP, $DB, $CONFIG; |
| | | |
| | | // get message ID if uid is given |
| | | $headers = $IMAP->get_headers($uid); |
| | | // get message ID if uid is given |
| | | $cache_key = $IMAP->mailbox.'.msg'; |
| | | $cached = $IMAP->get_cached_message($cache_key, $uid, FALSE); |
| | | |
| | | // message is cached in database |
| | | if ($cached && !empty($cached->body)) |
| | | return $cached->body; |
| | | |
| | | if (!$cached) |
| | | $headers = $IMAP->get_headers($uid); |
| | | else |
| | | $headers = &$cached; |
| | | |
| | | |
| | | $message_id = $headers->messageID; |
| | | |
| | | // get cached message source |
| | | $msg_source = rcube_read_cache($message_id); |
| | | $temp_dir = $CONFIG['temp_dir'].(!eregi('\/$', $CONFIG['temp_dir']) ? '/' : ''); |
| | | $cache_dir = $temp_dir.$_SESSION['client_id']; |
| | | $cache_path = $cache_dir.'/'.$message_id; |
| | | |
| | | // get message from server and cache it |
| | | if (!$msg_source) |
| | | // message is cached in temp dir |
| | | if (is_dir($cache_dir) && is_file($cache_path)) |
| | | { |
| | | $msg_source = $IMAP->get_raw_body($uid); |
| | | rcube_write_cache($message_id, $msg_source, TRUE); |
| | | if ($fp = fopen($cache_path, 'r')) |
| | | { |
| | | $msg_source = fread($fp, filesize($cache_path)); |
| | | fclose($fp); |
| | | return $msg_source; |
| | | } |
| | | } |
| | | |
| | | |
| | | // get message from server |
| | | $msg_source = $IMAP->get_raw_body($uid); |
| | | |
| | | // let's cache the message body within the database |
| | | if ($CONFIG['enable_caching'] && $cached && ($CONFIG['db_max_length'] -300) > $headers->size) |
| | | { |
| | | $DB->query("UPDATE ".get_table_name('messages')." |
| | | SET body=? |
| | | WHERE user_id=? |
| | | AND cache_key=? |
| | | AND uid=?", |
| | | $msg_source, |
| | | $_SESSION['user_id'], |
| | | $cache_key, |
| | | $uid); |
| | | |
| | | return $msg_source; |
| | | } |
| | | |
| | | |
| | | // create dir for caching |
| | | if (!is_dir($cache_dir)) |
| | | $dir = mkdir($cache_dir); |
| | | else |
| | | $dir = true; |
| | | |
| | | // attempt to write a file with the message body |
| | | if ($dir && ($fp = fopen($cache_path, 'w'))) |
| | | { |
| | | fwrite($fp, $msg_source); |
| | | fclose($fp); |
| | | } |
| | | else |
| | | { |
| | | raise_error(array('code' => 403, 'type' => 'php', 'line' => __LINE__, 'file' => __FILE__, |
| | | 'message' => "Failed to write to temp dir"), TRUE, FALSE); |
| | | } |
| | | |
| | | return $msg_source; |