| | |
| | | } |
| | | } |
| | | |
| | | // select folder where to save the sent message |
| | | $_SESSION['compose']['param']['sent_mbox'] = $RCMAIL->config->get('sent_mbox'); |
| | | |
| | | // pipe compose parameters thru plugins |
| | | $plugin = $RCMAIL->plugins->exec_hook('message_compose', $_SESSION['compose']); |
| | | $_SESSION['compose']['param'] = array_merge($_SESSION['compose']['param'], $plugin['param']); |
| | | $_SESSION['compose']['param'] = array_merge($_SESSION['compose']['param'], $plugin['param']); |
| | | |
| | | // add attachments listed by message_compose hook |
| | | if (is_array($plugin['attachments'])) { |
| | |
| | | $OUTPUT->set_env('show_sig', false); |
| | | |
| | | // set line length for body wrapping |
| | | $LINE_LENGTH = $RCMAIL->config->get('line_length', 75); |
| | | $LINE_LENGTH = $RCMAIL->config->get('line_length', 72); |
| | | |
| | | if (!empty($msg_uid)) |
| | | { |
| | |
| | | $CONFIG['prefer_html'] = $CONFIG['prefer_html'] || $CONFIG['htmleditor'] || $compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT; |
| | | $MESSAGE = new rcube_message($msg_uid); |
| | | |
| | | // make sure message is marked as read |
| | | if ($MESSAGE && $MESSAGE->headers && !$MESSAGE->headers->seen) |
| | | $IMAP->set_flag($msg_uid, 'SEEN'); |
| | | |
| | | if (!empty($MESSAGE->headers->charset)) |
| | | $IMAP->set_charset($MESSAGE->headers->charset); |
| | | |
| | |
| | | static $sa_recipients = array(); |
| | | |
| | | list($form_start, $form_end) = get_form_tags($attrib); |
| | | |
| | | |
| | | $out = ''; |
| | | $part = strtolower($attrib['part']); |
| | | |
| | | |
| | | switch ($part) |
| | | { |
| | | case 'from': |
| | | return rcmail_compose_header_from($attrib); |
| | | return $form_start . rcmail_compose_header_from($attrib); |
| | | |
| | | case 'to': |
| | | $fname = '_to'; |
| | | $header = $param = 'to'; |
| | | |
| | | |
| | | // 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]); |
| | | |
| | | |
| | | case 'cc': |
| | | if (!$fname) |
| | | { |
| | |
| | | $fname = '_bcc'; |
| | | $header = $param = 'bcc'; |
| | | } |
| | | |
| | | |
| | | $allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex'); |
| | | $field_type = 'html_textarea'; |
| | | break; |
| | |
| | | $input_from = new html_inputfield($field_attrib); |
| | | $out = $input_from->show($_POST['_from']); |
| | | } |
| | | |
| | | if ($form_start) |
| | | $out = $form_start.$out; |
| | | |
| | | return $out; |
| | | } |
| | |
| | | // include GoogieSpell |
| | | if (!empty($CONFIG['enable_spellcheck'])) { |
| | | |
| | | $lang = strtolower(substr($_SESSION['language'], 0, 2)); |
| | | |
| | | $spellcheck_langs = (array)$RCMAIL->config->get('spellcheck_languages', array('da'=>'Dansk', 'de'=>'Deutsch', 'en' => 'English', 'es'=>'Español', 'fr'=>'Français', 'it'=>'Italiano', 'nl'=>'Nederlands', 'pl'=>'Polski', 'pt'=>'Português', 'fi'=>'Suomi', 'sv'=>'Svenska')); |
| | | $engine = $RCMAIL->config->get('spellcheck_engine','googie'); |
| | | $spellcheck_langs = (array) $RCMAIL->config->get('spellcheck_languages', |
| | | array('da'=>'Dansk', 'de'=>'Deutsch', 'en' => 'English', 'es'=>'Español', |
| | | 'fr'=>'Français', 'it'=>'Italiano', 'nl'=>'Nederlands', 'pl'=>'Polski', |
| | | 'pt'=>'Português', 'fi'=>'Suomi', 'sv'=>'Svenska')); |
| | | |
| | | // googie works only with two-letter codes |
| | | if ($engine == 'googie') { |
| | | $lang = strtolower(substr($_SESSION['language'], 0, 2)); |
| | | |
| | | $spellcheck_langs_googie = array(); |
| | | foreach ($spellcheck_langs as $key => $name) |
| | | $spellcheck_langs_googie[strtolower(substr($key,0,2))] = $name; |
| | | $spellcheck_langs = $spellcheck_langs_googie; |
| | | } |
| | | else { |
| | | $lang = $_SESSION['language']; |
| | | |
| | | // if not found in the list, try with two-letter code |
| | | if (!$spellcheck_langs[$lang]) |
| | | $lang = strtolower(substr($lang, 0, 2)); |
| | | } |
| | | |
| | | if (!$spellcheck_langs[$lang]) |
| | | $lang = 'en'; |
| | | |
| | | |
| | | $editor_lang_set = array(); |
| | | foreach ($spellcheck_langs as $key => $name) { |
| | | $editor_lang_set[] = ($key == $lang ? '+' : '') . JQ($name).'='.JQ($key); |
| | | } |
| | | } |
| | | |
| | | $OUTPUT->include_script('googiespell.js'); |
| | | $OUTPUT->add_script(sprintf( |
| | | "var googie = new GoogieSpell('\$__skin_path/images/googiespell/','%s&_action=spell&lang=');\n". |
| | | "var googie = new GoogieSpell('\$__skin_path/images/googiespell/','?_task=utils&_action=spell&lang=');\n". |
| | | "googie.lang_chck_spell = \"%s\";\n". |
| | | "googie.lang_rsm_edt = \"%s\";\n". |
| | | "googie.lang_close = \"%s\";\n". |
| | |
| | | "googie.setSpellContainer('spellcheck-control');\n". |
| | | "googie.decorateTextarea('%s');\n". |
| | | "%s.set_env('spellcheck', googie);", |
| | | $RCMAIL->comm_path, |
| | | JQ(Q(rcube_label('checkspelling'))), |
| | | JQ(Q(rcube_label('resumeediting'))), |
| | | JQ(Q(rcube_label('close'))), |
| | |
| | | $body = substr($body, 0, max(0, $sp-1)); |
| | | } |
| | | |
| | | // soft-wrap message first |
| | | $body = rcmail_wrap_quoted($body, $LINE_LENGTH); |
| | | |
| | | $body = rtrim($body, "\r\n"); |
| | | |
| | | if ($body) { |
| | | // split body into single lines |
| | | $a_lines = preg_split('/\r?\n/', $body); |
| | | |
| | | // add > to each line |
| | | for ($n=0; $n<sizeof($a_lines); $n++) { |
| | | if (strpos($a_lines[$n], '>')===0) |
| | | $a_lines[$n] = '>'.$a_lines[$n]; |
| | | else |
| | | $a_lines[$n] = '> '.$a_lines[$n]; |
| | | } |
| | | |
| | | $body = join("\n", $a_lines); |
| | | } |
| | | // soft-wrap and quote message text |
| | | $body = rcmail_wrap_and_quote(rtrim($body, "\r\n"), $LINE_LENGTH); |
| | | |
| | | // add title line(s) |
| | | $prefix = rc_wordwrap(sprintf("On %s, %s wrote:\n", |
| | | $prefix = sprintf("On %s, %s wrote:\n", |
| | | $MESSAGE->headers->date, |
| | | $MESSAGE->get_header('from')), $LINE_LENGTH); |
| | | $MESSAGE->get_header('from')); |
| | | |
| | | $suffix = ''; |
| | | |
| | |
| | | { |
| | | global $OUTPUT; |
| | | |
| | | $cid_map = array(); |
| | | $cid_map = $messages = array(); |
| | | foreach ((array)$message->mime_parts as $pid => $part) |
| | | { |
| | | if (($part->ctype_primary != 'message' || !$bodyIsHtml) && $part->ctype_primary != 'multipart' && |
| | | ($part->disposition == 'attachment' || ($part->disposition == 'inline' && $bodyIsHtml) || $part->filename)) |
| | | { |
| | | if ($attachment = rcmail_save_attachment($message, $pid)) { |
| | | ($part->disposition == 'attachment' || ($part->disposition == 'inline' && $bodyIsHtml) || $part->filename) |
| | | && $part->mimetype != 'application/ms-tnef' |
| | | ) { |
| | | $skip = false; |
| | | if ($part->mimetype == 'message/rfc822') { |
| | | $messages[] = $part->mime_id; |
| | | } else if ($messages) { |
| | | // skip attachments included in message/rfc822 attachment (#1486487) |
| | | foreach ($messages as $mimeid) |
| | | if (strpos($part->mime_id, $mimeid.'.') === 0) { |
| | | $skip = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (!$skip && ($attachment = rcmail_save_attachment($message, $pid))) { |
| | | $_SESSION['compose']['attachments'][$attachment['id']] = $attachment; |
| | | if ($bodyIsHtml && $part->content_id) { |
| | | $cid_map['cid:'.$part->content_id] = $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$attachment['id']; |
| | | if ($bodyIsHtml && ($part->content_id || $part->content_location)) { |
| | | $url = $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$attachment['id']; |
| | | if ($part->content_id) |
| | | $cid_map['cid:'.$part->content_id] = $url; |
| | | else |
| | | $cid_map[$part->content_location] = $url; |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | $cid_map = array(); |
| | | foreach ((array)$message->mime_parts as $pid => $part) { |
| | | if ($part->content_id && $part->filename) { |
| | | if (($part->content_id || $part->content_location) && $part->filename) { |
| | | if ($attachment = rcmail_save_attachment($message, $pid)) { |
| | | $_SESSION['compose']['attachments'][$attachment['id']] = $attachment; |
| | | $cid_map['cid:'.$part->content_id] = $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$attachment['id']; |
| | | $url = $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$attachment['id']; |
| | | if ($part->content_id) |
| | | $cid_map['cid:'.$part->content_id] = $url; |
| | | else |
| | | $cid_map[$part->content_location] = $url; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | return $cid_map; |
| | | } |
| | | |
| | |
| | | |
| | | list($form_start, $form_end) = get_form_tags($attrib); |
| | | unset($attrib['form']); |
| | | |
| | | |
| | | $attrib['name'] = '_priority'; |
| | | $selector = new html_select($attrib); |
| | | |
| | |
| | | rcube_label('high'), |
| | | rcube_label('highest')), |
| | | array(5, 4, 0, 2, 1)); |
| | | |
| | | |
| | | if (isset($_POST['_priority'])) |
| | | $sel = $_POST['_priority']; |
| | | else if (intval($MESSAGE->headers->priority) != 3) |
| | |
| | | $out = $form_start ? "$form_start\n" : ''; |
| | | $out .= $selector->show($sel); |
| | | $out .= $form_end ? "\n$form_end" : ''; |
| | | |
| | | |
| | | return $out; |
| | | } |
| | | |
| | |
| | | function rcmail_receipt_checkbox($attrib) |
| | | { |
| | | global $MESSAGE, $compose_mode; |
| | | |
| | | |
| | | list($form_start, $form_end) = get_form_tags($attrib); |
| | | unset($attrib['form']); |
| | | |
| | | |
| | | if (!isset($attrib['id'])) |
| | | $attrib['id'] = 'receipt'; |
| | | |
| | |
| | | |
| | | if (empty($attrib['name'])) |
| | | $attrib['name'] = 'editorSelect'; |
| | | |
| | | |
| | | $attrib['onchange'] = "return rcmail_toggle_editor(this, '".$attrib['editorid']."', '_is_html')"; |
| | | |
| | | $select = new html_select($attrib); |
| | |
| | | { |
| | | $attrib['name'] = '_store_target'; |
| | | $select = rcmail_mailbox_select(array_merge($attrib, array('noselection' => '- '.rcube_label('dontsave').' -'))); |
| | | return $select->show(rcmail::get_instance()->config->get('sent_mbox'), $attrib); |
| | | return $select->show($_SESSION['compose']['param']['sent_mbox'], $attrib); |
| | | } |
| | | |
| | | |
| | |
| | | global $RCMAIL, $MESSAGE_FORM; |
| | | |
| | | $form_start = ''; |
| | | if (!strlen($MESSAGE_FORM)) |
| | | if (!$MESSAGE_FORM) |
| | | { |
| | | $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $RCMAIL->task)); |
| | | $hiddenfields->add(array('name' => '_action', 'value' => 'send')); |
| | |
| | | $form_start .= $hiddenfields->show(); |
| | | } |
| | | |
| | | $form_end = (strlen($MESSAGE_FORM) && !strlen($attrib['form'])) ? '</form>' : ''; |
| | | $form_end = ($MESSAGE_FORM && !strlen($attrib['form'])) ? '</form>' : ''; |
| | | $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form'; |
| | | |
| | | if (!strlen($MESSAGE_FORM)) |
| | | if (!$MESSAGE_FORM) |
| | | $RCMAIL->output->add_gui_object('messageform', $form_name); |
| | | |
| | | $MESSAGE_FORM = $form_name; |
| | |
| | | |
| | | $OUTPUT->send('compose'); |
| | | |
| | | ?> |
| | | |