| | |
| | | if (is_array($_SESSION['compose']['attachments'][$id])) |
| | | { |
| | | @unlink($_SESSION['compose']['attachments'][$id]['path']); |
| | | $_SESSION['compose']['attachments'][$id] = NULL; |
| | | unset($_SESSION['compose']['attachments'][$id]); |
| | | $OUTPUT->command('remove_from_attachment_list', "rcmfile$id"); |
| | | $OUTPUT->send(); |
| | | exit; |
| | | } |
| | | exit; |
| | | } |
| | | |
| | | if ($RCMAIL->action=='display-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs)) |
| | |
| | | rcmail_compose_cleanup(); |
| | | $_SESSION['compose'] = array('id' => uniqid(rand()), 'param' => array_map('strip_tags', $_GET)); |
| | | |
| | | // process values like "mailto:foo@bar.com?subject=new+message&cc=another" |
| | | if ($_SESSION['compose']['param']['_to']) { |
| | | $mailto = explode('?', $_SESSION['compose']['param']['_to']); |
| | | if (count($mailto) > 1) { |
| | | $_SESSION['compose']['param']['_to'] = $mailto[0]; |
| | | parse_str($mailto[1], $query); |
| | | foreach ($query as $f => $val) |
| | | $_SESSION['compose']['param']["_$f"] = $val; |
| | | } |
| | | } |
| | | |
| | | // redirect to a unique URL with all parameters stored in session |
| | | $OUTPUT->redirect(array('_action' => 'compose', '_id' => $_SESSION['compose']['id'])); |
| | | } |
| | |
| | | { |
| | | if($MESSAGE->headers->in_reply_to) |
| | | { |
| | | // TODO: chow to get reply_uid/forward_uid value, maybe we must set X-Reply-UID/X-Forward-UID |
| | | // TODO: how to get reply_uid/forward_uid value, maybe we must set X-Reply-UID/X-Forward-UID |
| | | // $_SESSION['compose']['reply_uid'] = ? |
| | | // $_SESSION['compose']['forward_uid'] = ? |
| | | $_SESSION['compose']['reply_msgid'] = '<'.$MESSAGE->headers->in_reply_to.'>'; |
| | | } |
| | | $_SESSION['compose']['references'] = $MESSAGE->headers->references; |
| | |
| | | // we have a set of recipients stored is session |
| | | if (($mailto_id = $_SESSION['compose']['param']['_mailto']) && $_SESSION['mailto'][$mailto_id]) |
| | | $fvalue = urldecode($_SESSION['mailto'][$mailto_id]); |
| | | else if (!empty($_SESSION['compose']['param']['_to'])) |
| | | $fvalue = $_SESSION['compose']['param']['_to']; |
| | | |
| | | |
| | | case 'cc': |
| | | if (!$fname) |
| | | { |
| | |
| | | $fname = '_replyto'; |
| | | $allow_attrib = array('id', 'class', 'style', 'size', 'tabindex'); |
| | | $field_type = 'html_inputfield'; |
| | | break; |
| | | break; |
| | | } |
| | | |
| | | if ($fname && !empty($_POST[$fname])) |
| | | $fvalue = get_input_value($fname, RCUBE_INPUT_POST, TRUE); |
| | | else if ($fname && !$fvalue && !empty($_SESSION['compose']['param'][$fname])) |
| | | $fvalue = $_SESSION['compose']['param'][$fname]; |
| | | |
| | | else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY) |
| | | { |
| | |
| | | { |
| | | $to_addresses = $IMAP->decode_address_list($fvalue); |
| | | $fvalue = ''; |
| | | |
| | | foreach ($to_addresses as $addr_part) |
| | | { |
| | | if (!empty($addr_part['mailto']) && !in_array($addr_part['mailto'], $sa_recipients) && (!$MESSAGE->compose_from || !in_array($addr_part['mailto'], $MESSAGE->compose_from))) |
| | | if (!empty($addr_part['mailto']) |
| | | && !in_array($addr_part['mailto'], $sa_recipients) |
| | | && (!$MESSAGE->compose_from |
| | | || !in_array($addr_part['mailto'], $MESSAGE->compose_from) |
| | | || count($to_addresses)==1)) // allow reply to yourself |
| | | { |
| | | $fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string']; |
| | | $sa_recipients[] = $addr_part['mailto']; |
| | |
| | | if ($fname && $field_type) |
| | | { |
| | | // pass the following attributes to the form class |
| | | $field_attrib = array('name' => $fname); |
| | | $field_attrib = array('name' => $fname, 'spellcheck' => 'false'); |
| | | foreach ($attrib as $attr => $value) |
| | | if (in_array($attr, $allow_attrib)) |
| | | $field_attrib[$attr] = $value; |
| | |
| | | // load draft message body |
| | | else if ($compose_mode == RCUBE_COMPOSE_DRAFT) |
| | | $body = rcmail_create_draft_body($body, $isHtml); |
| | | |
| | | if ($isHtml) { |
| | | // replace cid with href in inline images links |
| | | foreach ((array)$_SESSION['compose']['attachments'] as $pid => $attachment) { |
| | | if ($attachment['content_id']) { |
| | | $body = str_replace('cid:'. $attachment['content_id'], |
| | | $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$pid, $body); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else if (!empty($_SESSION['compose']['param']['_body'])) |
| | | { |
| | | $body = $_SESSION['compose']['param']['_body']; |
| | | } |
| | | |
| | | $lang = $tinylang = strtolower(substr($_SESSION['language'], 0, 2)); |
| | |
| | | $msgtype = new html_hiddenfield(array('name' => '_is_html', 'value' => ($isHtml?"1":"0"))); |
| | | $out .= $msgtype->show(); |
| | | |
| | | // If desired, set this text area to be editable by TinyMCE |
| | | if ($isHtml) $attrib['class'] = "mce_editor"; |
| | | // If desired, set this textarea to be editable by TinyMCE |
| | | if ($isHtml) $attrib['class'] = 'mce_editor'; |
| | | $textarea = new html_textarea($attrib); |
| | | $out .= $textarea->show($body); |
| | | $out .= $form_end ? "\n$form_end" : ''; |
| | |
| | | |
| | | function rcmail_create_reply_body($body, $bodyIsHtml) |
| | | { |
| | | global $IMAP, $MESSAGE; |
| | | global $IMAP, $MESSAGE, $OUTPUT; |
| | | |
| | | if (! $bodyIsHtml) |
| | | { |
| | | // soft-wrap message first |
| | | $body = wordwrap($body, 75); |
| | | $body = rcmail_wrap_quoted($body, 75); |
| | | |
| | | // split body into single lines |
| | | $a_lines = preg_split('/\r?\n/', $body); |
| | |
| | | $body = join("\n", $a_lines); |
| | | |
| | | // add title line |
| | | $prefix = sprintf("\n\n\nOn %s, %s wrote:\n", |
| | | $prefix = sprintf("On %s, %s wrote:\n", |
| | | $MESSAGE->headers->date, |
| | | $MESSAGE->get_header('from')); |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | $prefix = sprintf("<br /><br />On %s, %s wrote:<br />\n", |
| | | $prefix = sprintf("On %s, %s wrote:<br />\n", |
| | | $MESSAGE->headers->date, |
| | | Q($MESSAGE->get_header('from'))); |
| | | htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); |
| | | $prefix .= '<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%">'; |
| | | $suffix = "</blockquote>"; |
| | | |
| | | rcmail_write_inline_attachments($MESSAGE); |
| | | } |
| | | |
| | | return $prefix.$body.$suffix; |
| | |
| | | |
| | | function rcmail_create_forward_body($body, $bodyIsHtml) |
| | | { |
| | | global $IMAP, $MESSAGE; |
| | | global $IMAP, $MESSAGE, $OUTPUT; |
| | | |
| | | if (!$bodyIsHtml) |
| | | { |
| | | // soft-wrap message first |
| | | $body = wordwrap($body, 80); |
| | | |
| | | $prefix = sprintf("\n\n\n-------- Original Message --------\nSubject: %s\nDate: %s\nFrom: %s\nTo: %s\n\n", |
| | | $MESSAGE->subject, |
| | | $MESSAGE->headers->date, |
| | | $MESSAGE->get_header('from'), |
| | | $MESSAGE->get_header('to')); |
| | | $prefix = "\n\n\n-------- Original Message --------\n"; |
| | | $prefix .= 'Subject: ' . $MESSAGE->subject . "\n"; |
| | | $prefix .= 'Date: ' . $MESSAGE->headers->date . "\n"; |
| | | $prefix .= 'From: ' . $MESSAGE->get_header('from') . "\n"; |
| | | $prefix .= 'To: ' . $MESSAGE->get_header('to') . "\n"; |
| | | if ($MESSAGE->headers->replyto && $MESSAGE->headers->replyto != $MESSAGE->headers->from) |
| | | $prefix .= 'Reply-To: ' . $MESSAGE->get_header('replyto') . "\n"; |
| | | $prefix .= "\n"; |
| | | } |
| | | else |
| | | { |
| | |
| | | "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Subject: </th><td>%s</td></tr>" . |
| | | "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Date: </th><td>%s</td></tr>" . |
| | | "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">From: </th><td>%s</td></tr>" . |
| | | "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">To: </th><td>%s</td></tr>" . |
| | | "</tbody></table><br>", |
| | | "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">To: </th><td>%s</td></tr>", |
| | | Q($MESSAGE->subject), |
| | | Q($MESSAGE->headers->date), |
| | | Q($MESSAGE->get_header('from')), |
| | | Q($MESSAGE->get_header('to'))); |
| | | htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true), |
| | | htmlspecialchars(Q($MESSAGE->get_header('to'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); |
| | | |
| | | if ($MESSAGE->headers->replyto && $MESSAGE->headers->replyto != $MESSAGE->headers->from) |
| | | $prefix .= sprintf("<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Reply-To: </th><td>%s</td></tr>", |
| | | htmlspecialchars(Q($MESSAGE->get_header('replyto'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); |
| | | |
| | | $prefix .= "</tbody></table><br>"; |
| | | } |
| | | |
| | | // add attachments |
| | |
| | | |
| | | function rcmail_write_compose_attachments(&$message, $bodyIsHtml) |
| | | { |
| | | global $RCMAIL, $IMAP; |
| | | |
| | | $temp_dir = unslashify($RCMAIL->config->get('temp_dir')); |
| | | |
| | | if (!is_array($_SESSION['compose']['attachments'])) |
| | | $_SESSION['compose']['attachments'] = array(); |
| | | |
| | | foreach ((array)$message->mime_parts as $pid => $part) |
| | | { |
| | | if (($part->ctype_primary != 'message' || !$bodyIsHtml) && |
| | | ($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] || |
| | | (empty($part->disposition) && $part->filename))) |
| | | ($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] |
| | | || (empty($part->disposition) && $part->filename))) |
| | | { |
| | | $tmp_path = tempnam($temp_dir, 'rcmAttmnt'); |
| | | if ($fp = fopen($tmp_path, 'w')) |
| | | { |
| | | fwrite($fp, $message->get_part_content($pid)); |
| | | fclose($fp); |
| | | |
| | | $_SESSION['compose']['attachments'][] = array( |
| | | 'mimetype' => $part->ctype_primary . '/' . $part->ctype_secondary, |
| | | 'name' => $part->filename, |
| | | 'path' => $tmp_path |
| | | ); |
| | | } |
| | | if ($attachment = rcmail_save_attachment($message, $pid)) |
| | | $_SESSION['compose']['attachments'][] = $attachment; |
| | | } |
| | | } |
| | | |
| | | $_SESSION['compose']['forward_attachments'] = true; |
| | | } |
| | | |
| | | |
| | | function rcmail_write_inline_attachments(&$message) |
| | | { |
| | | foreach ((array)$message->mime_parts as $pid => $part) |
| | | { |
| | | if ($part->content_id && $part->filename) |
| | | { |
| | | if ($attachment = rcmail_save_attachment($message, $pid)) |
| | | $_SESSION['compose']['attachments'][] = $attachment; |
| | | } |
| | | } |
| | | } |
| | | |
| | | function rcmail_save_attachment(&$message, $pid) |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | $temp_dir = unslashify($RCMAIL->config->get('temp_dir')); |
| | | $tmp_path = tempnam($temp_dir, 'rcmAttmnt'); |
| | | $part = $message->mime_parts[$pid]; |
| | | |
| | | if ($fp = fopen($tmp_path, 'w')) |
| | | { |
| | | $message->get_part_content($pid, $fp); |
| | | fclose($fp); |
| | | |
| | | return array( |
| | | 'mimetype' => $part->ctype_primary . '/' . $part->ctype_secondary, |
| | | 'name' => $part->filename, |
| | | 'path' => $tmp_path, |
| | | 'content_id' => $part->content_id |
| | | ); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | unset($attrib['form']); |
| | | |
| | | $attrib['name'] = '_subject'; |
| | | $attrib['spellcheck'] = 'true'; |
| | | $textfield = new html_inputfield($attrib); |
| | | |
| | | $subject = ''; |
| | | |
| | | // use subject from post |
| | | if (isset($_POST['_subject'])) |
| | | if (isset($_POST['_subject'])) { |
| | | $subject = get_input_value('_subject', RCUBE_INPUT_POST, TRUE); |
| | | |
| | | } |
| | | // create a reply-subject |
| | | else if ($compose_mode == RCUBE_COMPOSE_REPLY) |
| | | { |
| | | else if ($compose_mode == RCUBE_COMPOSE_REPLY) { |
| | | if (eregi('^re:', $MESSAGE->subject)) |
| | | $subject = $MESSAGE->subject; |
| | | else |
| | | $subject = 'Re: '.$MESSAGE->subject; |
| | | } |
| | | |
| | | // create a forward-subject |
| | | else if ($compose_mode == RCUBE_COMPOSE_FORWARD) |
| | | { |
| | | else if ($compose_mode == RCUBE_COMPOSE_FORWARD) { |
| | | if (eregi('^fwd:', $MESSAGE->subject)) |
| | | $subject = $MESSAGE->subject; |
| | | else |
| | | $subject = 'Fwd: '.$MESSAGE->subject; |
| | | } |
| | | |
| | | // creeate a draft-subject |
| | | else if ($compose_mode == RCUBE_COMPOSE_DRAFT) |
| | | else if ($compose_mode == RCUBE_COMPOSE_DRAFT) { |
| | | $subject = $MESSAGE->subject; |
| | | } |
| | | else if (!empty($_SESSION['compose']['param']['_subject'])) { |
| | | $subject = $_SESSION['compose']['param']['_subject']; |
| | | } |
| | | |
| | | $out = $form_start ? "$form_start\n" : ''; |
| | | $out .= $textfield->show($subject); |
| | |
| | | |
| | | $out = html::div($attrib, |
| | | $OUTPUT->form_tag(array('name' => 'form', 'method' => 'post', 'enctype' => 'multipart/form-data')) . |
| | | rcmail_compose_attachment_field(array()) . html::br() . |
| | | $button->show(rcube_label('close'), array('onclick' => "document.getElementById('$attrib[id]').style.visibility='hidden'")) . |
| | | $button->show(rcube_label('upload'), array('onclick' => JS_OBJECT_NAME . ".command('send-attachment', this.form)")) |
| | | html::div(null, rcmail_compose_attachment_field(array())) . |
| | | html::div('hint', rcube_label(array('name' => 'maxuploadsize', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize'))))))) . |
| | | html::div('buttons', |
| | | $button->show(rcube_label('close'), array('onclick' => "document.getElementById('$attrib[id]').style.visibility='hidden'")) . ' ' . |
| | | $button->show(rcube_label('upload'), array('onclick' => JS_OBJECT_NAME . ".command('send-attachment', this.form)"))) |
| | | ); |
| | | |
| | | |
| | |
| | | function rcmail_store_target_selection($attrib) |
| | | { |
| | | $attrib['name'] = '_store_target'; |
| | | $select = rcmail_mailbox_select(array('noselection' => '- '.rcube_label('dontsave').' -')); |
| | | $select = rcmail_mailbox_select(array_merge($attrib, array('noselection' => '- '.rcube_label('dontsave').' -'))); |
| | | return $select->show(rcmail::get_instance()->config->get('sent_mbox'), $attrib); |
| | | } |
| | | |