diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/include/main.inc | 28 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 59 |
3 files changed, 61 insertions, 27 deletions
@@ -1,6 +1,7 @@ CHANGELOG RoundCube Webmail =========================== +- Added 'message_compose' hook - Added 'imap_connect' hook (#1485956) - Fix vcard_attachments plugin (#1486035) - Updated PEAR::Auth_SASL to 1.0.3 version diff --git a/program/include/main.inc b/program/include/main.inc index 9401e289c..ce27b75de 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -545,7 +545,7 @@ function JQ($str) * @return string Field value or NULL if not available */ function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL) - { +{ global $OUTPUT; $value = NULL; @@ -582,7 +582,26 @@ function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL) return rcube_charset_convert($value, $OUTPUT->get_charset(), $charset); else return $value; +} + +/** + * Convert array of request parameters (prefixed with _) + * to a regular array with non-prefixed keys. + * + * @param int Source to get value from (GPC) + * @return array Hash array with all request parameters + */ +function request2param($mode = RCUBE_INPUT_GPC) +{ + $out = array(); + $src = $mode == RCUBE_INPUT_GET ? $_GET : ($mode == RCUBE_INPUT_POST ? $_POST : $_REQUEST); + foreach ($src as $key => $value) { + $fname = $key[0] == '_' ? substr($key, 1) : $key; + $out[$fname] = get_input_value($key, $mode); } + + return $out; +} /** * Remove all non-ascii and non-word chars @@ -958,8 +977,11 @@ function console() { $args = func_get_args(); - if (class_exists('rcmail', false)) - rcmail::get_instance()->plugins->exec_hook('console', $args); + if (class_exists('rcmail', false)) { + $rcmail = rcmail::get_instance(); + if (is_object($rcmail->plugins)) + $rcmail->plugins->exec_hook('console', $args); + } $msg = array(); foreach ($args as $arg) diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index d17840104..5d5a949e3 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -38,20 +38,24 @@ if (!is_array($_SESSION['compose']) || $_SESSION['compose']['id'] != get_input_v rcmail_compose_cleanup(); $_SESSION['compose'] = array( 'id' => uniqid(rand()), - 'param' => array_map('strip_tags', $_GET), + 'param' => request2param(RCUBE_INPUT_GET), 'mailbox' => $IMAP->get_mailbox_name(), ); // process values like "mailto:foo@bar.com?subject=new+message&cc=another" - if ($_SESSION['compose']['param']['_to']) { - $mailto = explode('?', $_SESSION['compose']['param']['_to']); + if ($_SESSION['compose']['param']['to']) { + $mailto = explode('?', $_SESSION['compose']['param']['to']); if (count($mailto) > 1) { - $_SESSION['compose']['param']['_to'] = $mailto[0]; + $_SESSION['compose']['param']['to'] = $mailto[0]; parse_str($mailto[1], $query); foreach ($query as $f => $val) - $_SESSION['compose']['param']["_$f"] = $val; + $_SESSION['compose']['param'][$f] = $val; } } + + // pipe compose parameters thru plugins + $plugin = $RCMAIL->plugins->exec_hook('message_compose', $_SESSION['compose']); + $_SESSION['compose']['param'] = $plugin['param']; // redirect to a unique URL with all parameters stored in session $OUTPUT->redirect(array('_action' => 'compose', '_id' => $_SESSION['compose']['id'])); @@ -71,13 +75,13 @@ if (!empty($CONFIG['drafts_mbox'])) { $OUTPUT->set_env('mailbox', $IMAP->get_mailbox_name()); // get reference message and set compose mode -if ($msg_uid = $_SESSION['compose']['param']['_reply_uid']) +if ($msg_uid = $_SESSION['compose']['param']['reply_uid']) $compose_mode = RCUBE_COMPOSE_REPLY; -else if ($msg_uid = $_SESSION['compose']['param']['_forward_uid']) +else if ($msg_uid = $_SESSION['compose']['param']['forward_uid']) $compose_mode = RCUBE_COMPOSE_FORWARD; -else if ($msg_uid = $_SESSION['compose']['param']['_uid']) +else if ($msg_uid = $_SESSION['compose']['param']['uid']) $compose_mode = RCUBE_COMPOSE_EDIT; -else if ($msg_uid = $_SESSION['compose']['param']['_draft_uid']) { +else if ($msg_uid = $_SESSION['compose']['param']['draft_uid']) { $RCMAIL->imap->set_mailbox($CONFIG['drafts_mbox']); $compose_mode = RCUBE_COMPOSE_DRAFT; } @@ -98,7 +102,7 @@ if (!empty($msg_uid)) $_SESSION['compose']['reply_msgid'] = $MESSAGE->headers->messageID; $_SESSION['compose']['references'] = trim($MESSAGE->headers->references . " " . $MESSAGE->headers->messageID); - if (!empty($_SESSION['compose']['param']['_all'])) + if (!empty($_SESSION['compose']['param']['all'])) $MESSAGE->reply_all = 1; } else if ($compose_mode == RCUBE_COMPOSE_DRAFT) @@ -138,23 +142,23 @@ function rcmail_compose_headers($attrib) case 'to': $fname = '_to'; - $header = 'to'; + $header = $param = 'to'; // we have a set of recipients stored is session - if (($mailto_id = $_SESSION['compose']['param']['_mailto']) && $_SESSION['mailto'][$mailto_id]) + if (($mailto_id = $_SESSION['compose']['param']['mailto']) && $_SESSION['mailto'][$mailto_id]) $fvalue = urldecode($_SESSION['mailto'][$mailto_id]); case 'cc': if (!$fname) { $fname = '_cc'; - $header = 'cc'; + $header = $param = 'cc'; } case 'bcc': if (!$fname) { $fname = '_bcc'; - $header = 'bcc'; + $header = $param = 'bcc'; } $allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex'); @@ -164,17 +168,19 @@ function rcmail_compose_headers($attrib) case 'replyto': case 'reply-to': $fname = '_replyto'; + $param = 'replyto'; $allow_attrib = array('id', 'class', 'style', 'size', 'tabindex'); $field_type = 'html_inputfield'; break; } - if ($fname && !empty($_POST[$fname])) + 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) - { + } + else if ($fname && !$fvalue && !empty($_SESSION['compose']['param'][$param])) { + $fvalue = $_SESSION['compose']['param'][$param]; + } + else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY) { // get recipent address(es) out of the message headers if ($header=='to' && !empty($MESSAGE->headers->replyto)) $fvalue = $MESSAGE->headers->replyto; @@ -298,7 +304,7 @@ function rcmail_compose_header_from($attrib) $select_from->add(format_email_recipient($sql_arr['email'], $sql_arr['name']), $identity_id); // add signature to array - if (!empty($sql_arr['signature']) && empty($_SESSION['compose']['param']['_nosig'])) + if (!empty($sql_arr['signature']) && empty($_SESSION['compose']['param']['nosig'])) { $a_signatures[$identity_id]['text'] = $sql_arr['signature']; $a_signatures[$identity_id]['is_html'] = ($sql_arr['html_signature'] == 1) ? true : false; @@ -369,6 +375,11 @@ function rcmail_compose_body($attrib) { $body = get_input_value('_message', RCUBE_INPUT_POST, true); } + else if ($_SESSION['compose']['param']['body']) + { + $body = $_SESSION['compose']['param']['body']; + $isHtml = false; + } else if ($compose_mode) { if (($isHtml || $compose_mode == RCUBE_COMPOSE_DRAFT) && $MESSAGE->has_html_part()) @@ -392,9 +403,9 @@ function rcmail_compose_body($attrib) else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT) $body = rcmail_create_draft_body($body, $isHtml); } - else if (!empty($_SESSION['compose']['param']['_body'])) + else if (!empty($_SESSION['compose']['param']['body'])) { - $body = $_SESSION['compose']['param']['_body']; + $body = $_SESSION['compose']['param']['body']; } $out = $form_start ? "$form_start\n" : ''; @@ -719,8 +730,8 @@ function rcmail_compose_subject($attrib) else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT) { $subject = $MESSAGE->subject; } - else if (!empty($_SESSION['compose']['param']['_subject'])) { - $subject = $_SESSION['compose']['param']['_subject']; + else if (!empty($_SESSION['compose']['param']['subject'])) { + $subject = $_SESSION['compose']['param']['subject']; } $out = $form_start ? "$form_start\n" : ''; |