| | |
| | | |
| | | // add some labels to client |
| | | rcube_add_label('purgefolderconfirm'); |
| | | rcube_add_label('deletemessagesconfirm'); |
| | | |
| | | // $mboxlist_start = rcube_timer(); |
| | | |
| | |
| | | $javascript .= sprintf("%s.set_env('messages', %s);", $JS_OBJECT_NAME, array2js($a_js_message_arr)); |
| | | |
| | | $OUTPUT->add_script($javascript); |
| | | $OUTPUT->include_script('list.js'); |
| | | |
| | | return $out; |
| | | } |
| | |
| | | $a_show_cols = is_array($CONFIG['list_cols']) ? $CONFIG['list_cols'] : array('subject'); |
| | | |
| | | // show 'to' instead of from in sent messages |
| | | if (strtolower($IMAP->get_mailbox_name())=='sent' && ($f = array_search('from', $a_show_cols)) |
| | | && !array_search('to', $a_show_cols)) |
| | | if (($IMAP->get_mailbox_name()==$CONFIG['sent_mbox'] || $IMAP->get_mailbox_name()==$CONFIG['drafts_mbox']) |
| | | && ($f = array_search('from', $a_show_cols)) && !array_search('to', $a_show_cols)) |
| | | $a_show_cols[$f] = 'to'; |
| | | |
| | | $commands .= sprintf("this.set_message_coltypes(%s);\n", array2js($a_show_cols)); |
| | |
| | | return $commands; |
| | | } |
| | | |
| | | |
| | | // return an HTML iframe for loading mail content |
| | | function rcmail_messagecontent_frame($attrib) |
| | | { |
| | | global $OUTPUT, $JS_OBJECT_NAME; |
| | | |
| | | if (empty($attrib['id'])) |
| | | $attrib['id'] = 'rcmailcontentwindow'; |
| | | |
| | | // allow the following attributes to be added to the <iframe> tag |
| | | $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'src', 'width', 'height', 'frameborder')); |
| | | $framename = $attrib['id']; |
| | | |
| | | $out = sprintf('<iframe name="%s"%s></iframe>'."\n", |
| | | $framename, |
| | | $attrib_str); |
| | | |
| | | $OUTPUT->add_script("$JS_OBJECT_NAME.set_env('contentframe', '$framename');"); |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | // return code for search function |
| | | function rcmail_search_form($attrib) |
| | |
| | | |
| | | function rcmail_quota_display($attrib) |
| | | { |
| | | global $IMAP, $OUTPUT, $JS_OBJECT_NAME; |
| | | global $IMAP, $OUTPUT, $JS_OBJECT_NAME, $COMM_PATH; |
| | | |
| | | if (!$attrib['id']) |
| | | $attrib['id'] = 'rcmquotadisplay'; |
| | |
| | | |
| | | // allow the following attributes to be added to the <span> tag |
| | | $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id')); |
| | | |
| | | |
| | | if (!$IMAP->get_capability('QUOTA')) |
| | | $quota_text = rcube_label('unknown'); |
| | | else if (!($quota_text = $IMAP->get_quota())) |
| | | else if ($quota = $IMAP->get_quota()) |
| | | { |
| | | $quota_text = sprintf("%s / %s (%.0f%%)", |
| | | show_bytes($quota["used"] * 1024), |
| | | show_bytes($quota["total"] * 1024), |
| | | $quota["percent"]); |
| | | |
| | | // show quota as image (by Brett Patterson) |
| | | if ($attrib['display'] == 'image' && function_exists('imagegif')) |
| | | { |
| | | $attrib += array('width' => 100, 'height' => 14); |
| | | $quota_text = sprintf('<img src="%s&_action=quotaimg&u=%s&q=%d&w=%d&h=%d" width="%d" height="%d" alt="%s" title="%s / %s" />', |
| | | $COMM_PATH, |
| | | $quota['used'], $quota['total'], |
| | | $attrib['width'], $attrib['height'], |
| | | $attrib['width'], $attrib['height'], |
| | | $quota_text, |
| | | show_bytes($quota["used"] * 1024), |
| | | show_bytes($quota["total"] * 1024)); |
| | | } |
| | | } |
| | | else |
| | | $quota_text = rcube_label('unlimited'); |
| | | |
| | | |
| | | $out = '<span' . $attrib_str . '>'; |
| | | $out .= $quota_text; |
| | |
| | | global $IMAP, $REMOTE_OBJECTS, $JS_OBJECT_NAME; |
| | | |
| | | $body = is_array($part->replaces) ? strtr($part->body, $part->replaces) : $part->body; |
| | | |
| | | |
| | | // text/html |
| | | if ($part->ctype_secondary=='html') |
| | | { |
| | |
| | | |
| | | if (!$safe) // remove remote images and scripts |
| | | { |
| | | $remote_patterns = array('/(src|background)=(["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)(\2|\s|>)/Ui', |
| | | // '/(src|background)=(["\']?)([\.\/]+[^"\'\s]+)(\2|\s|>)/Ui', |
| | | $remote_patterns = array('/<img\s+(.*)src=(["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)(\2|\s|>)/Ui', |
| | | '/(src|background)=(["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)(\2|\s|>)/Ui', |
| | | '/(<base.*href=["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)([^<]*>)/i', |
| | | '/(<link.*href=["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)([^<]*>)/i', |
| | | '/url\s*\(["\']?([hftps]{3,5}:\/{2}[^"\'\s]+)["\']?\)/i', |
| | | '/url\s*\(["\']?([\.\/]+[^"\'\s]+)["\']?\)/i', |
| | | '/<script.+<\/script>/Umis'); |
| | | |
| | | $remote_replaces = array('', // '\\1=\\2#\\4', |
| | | // '\\1=\\2#\\4', |
| | | $remote_replaces = array('<img \\1src=\\2./program/blank.gif\\4', |
| | | '', |
| | | '', // '\\1#\\3', |
| | | '', |
| | | '', |
| | | 'none', |
| | | 'none', |
| | | ''); |
| | |
| | | // insert the links for urls and mailtos |
| | | $body = preg_replace("/##string_replacement\{([0-9]+)\}##/e", "\$replace_strings[\\1]", join("\n", $a_lines)); |
| | | |
| | | return "<div class=\"pre\">\n".$body."\n</div>"; |
| | | return "<div class=\"pre\">".$body."\n</div>"; |
| | | } |
| | | } |
| | | |
| | |
| | | $a_replaces = array(); |
| | | |
| | | foreach ($sa_inline_objects as $inline_object) |
| | | $a_replaces['cid:'.$inline_object->content_id] = sprintf($get_url, $inline_object->mime_id); |
| | | $a_replaces['cid:'.$inline_object->content_id] = htmlspecialchars(sprintf($get_url, $inline_object->mime_id)); |
| | | |
| | | // add replace array to each content part |
| | | // (will be applied later when part body is available) |
| | |
| | | else if ($part->type=='content') |
| | | { |
| | | if (empty($part->ctype_parameters) || empty($part->ctype_parameters['charset'])) |
| | | $$part->ctype_parameters['charset'] = $MESSAGE['headers']->charset; |
| | | |
| | | $part->ctype_parameters['charset'] = $MESSAGE['headers']->charset; |
| | | |
| | | // fetch part if not available |
| | | if (!isset($part->body)) |
| | | $part->body = $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part); |
| | | |
| | | |
| | | $body = rcmail_print_body($part, $safe_mode); |
| | | $out .= '<div class="message-part">'; |
| | | |
| | |
| | | foreach ($MESSAGE['attachments'] as $attach_prop) |
| | | { |
| | | if (strpos($attach_prop->mimetype, 'image/')===0) |
| | | $out .= sprintf("\n<hr />\n<p align=\"center\"><img src=\"%s&_part=%s\" alt=\"%s\" title=\"%s\" /></p>\n", |
| | | $GET_URL, $attach_prop->mime_id, |
| | | $out .= sprintf("\n<hr />\n<p align=\"center\"><img src=\"%s&_part=%s\" alt=\"%s\" title=\"%s\" /></p>\n", |
| | | htmlspecialchars($GET_URL), $attach_prop->mime_id, |
| | | $attach_prop->filename, |
| | | $attach_prop->filename); |
| | | } |
| | |
| | | // find STYLE tags |
| | | while (($pos = strpos($body_lc, '<style', $last_style_pos)) && ($pos2 = strpos($body_lc, '</style>', $pos))) |
| | | { |
| | | $pos2 += 8; |
| | | $body_pre = substr($body, 0, $pos); |
| | | $styles = substr($body, $pos, $pos2-$pos); |
| | | $body_post = substr($body, $pos2, strlen($body)-$pos2); |
| | | |
| | | $pos = strpos($body_lc, '>', $pos)+1; |
| | | |
| | | // replace all css definitions with #container [def] |
| | | $styles = rcmail_mod_css_styles($styles, $container_id); |
| | | |
| | | $body = $body_pre . $styles . $body_post; |
| | | $styles = rcmail_mod_css_styles(substr($body, $pos, $pos2-$pos), $container_id); |
| | | |
| | | $body = substr($body, 0, $pos) . $styles . substr($body, $pos2); |
| | | $last_style_pos = $pos2; |
| | | } |
| | | |
| | |
| | | '/(<\/?meta[^>]*>)/i'), |
| | | '<!--\\1-->', |
| | | $body); |
| | | |
| | | |
| | | $out = preg_replace(array('/(<body[^>]*>)/i', |
| | | '/(<\/body>)/i'), |
| | | array('<div class="rcmBody">', |
| | | '</div>'), |
| | | $out); |
| | | |
| | | |
| | | return $out; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | function rcmail_has_html_part($message_parts) |
| | | { |
| | | if (!is_array($message_parts)) |
| | | return FALSE; |
| | | |
| | | // return first text part of a message |
| | | function rcmail_first_text_part($message_struct) |
| | | // check all message parts |
| | | foreach ($message_parts as $pid => $part) |
| | | { |
| | | $mimetype = strtolower($part->ctype_primary.'/'.$part->ctype_secondary); |
| | | if ($mimetype=='text/html') |
| | | { |
| | | return TRUE; |
| | | } |
| | | } |
| | | |
| | | return FALSE; |
| | | } |
| | | |
| | | // return first HTML part of a message |
| | | function rcmail_first_html_part($message_struct) |
| | | { |
| | | global $IMAP; |
| | | |
| | | if (!is_array($message_struct['parts'])) |
| | | return FALSE; |
| | | |
| | | $html_part = NULL; |
| | | |
| | | // check all message parts |
| | | foreach ($message_struct['parts'] as $pid => $part) |
| | | { |
| | | $mimetype = strtolower($part->ctype_primary.'/'.$part->ctype_secondary); |
| | | if ($mimetype=='text/html') |
| | | { |
| | | $html_part = $IMAP->get_message_part($message_struct['UID'], $pid, $part); |
| | | } |
| | | } |
| | | |
| | | if ($html_part) |
| | | { |
| | | // remove special chars encoding |
| | | //$trans = array_flip(get_html_translation_table(HTML_ENTITIES)); |
| | | //$html_part = strtr($html_part, $trans); |
| | | |
| | | return $html_part; |
| | | } |
| | | |
| | | return FALSE; |
| | | } |
| | | |
| | | |
| | | // return first text part of a message |
| | | function rcmail_first_text_part($message_struct) |
| | | { |
| | | global $IMAP; |
| | | |
| | | if (empty($message_struct['parts'])) |
| | | return $message_struct['UID'] ? $IMAP->get_body($message_struct['UID']) : false; |
| | | |
| | | // check all message parts |
| | | foreach ($message_struct['parts'] as $pid => $part) |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | // create temp dir for attachments |
| | | function rcmail_create_compose_tempdir() |
| | | { |
| | | global $CONFIG; |
| | | |
| | | if ($_SESSION['compose']['temp_dir']) |
| | | return $_SESSION['compose']['temp_dir']; |
| | | |
| | | if (!empty($CONFIG['temp_dir'])) |
| | | $temp_dir = $CONFIG['temp_dir'].(!eregi('\/$', $CONFIG['temp_dir']) ? '/' : '').$_SESSION['compose']['id']; |
| | | |
| | | // create temp-dir for uploaded attachments |
| | | if (!empty($CONFIG['temp_dir']) && is_writeable($CONFIG['temp_dir'])) |
| | | { |
| | | mkdir($temp_dir); |
| | | $_SESSION['compose']['temp_dir'] = $temp_dir; |
| | | } |
| | | |
| | | return $_SESSION['compose']['temp_dir']; |
| | | } |
| | | |
| | | |
| | | // clear message composing settings |
| | | function rcmail_compose_cleanup() |
| | | { |
| | | if (!isset($_SESSION['compose'])) |
| | | return; |
| | | |
| | | |
| | | // remove attachment files from temp dir |
| | | if (is_array($_SESSION['compose']['attachments'])) |
| | | foreach ($_SESSION['compose']['attachments'] as $attachment) |
| | | @unlink($attachment['path']); |
| | | |
| | | // kill temp dir |
| | | if ($_SESSION['compose']['temp_dir']) |
| | | @rmdir($_SESSION['compose']['temp_dir']); |
| | | |
| | | unset($_SESSION['compose']); |
| | | } |