From eeb85f425760028fd87515f6c7a186ab100283ec Mon Sep 17 00:00:00 2001 From: alecpl Date: Tue, 2 Nov 2010 14:53:54 +0000 Subject: - Add option to place replies in the folder of the message being replied to (#1485945) --- CHANGELOG | 1 + config/main.inc.php.dist | 3 +++ program/localization/en_US/labels.inc | 1 + program/localization/pl_PL/labels.inc | 2 ++ program/steps/mail/compose.inc | 50 ++++++++++++++++++++++++++++------- program/steps/settings/func.inc | 10 +++++++ program/steps/settings/save_prefs.inc | 1 + 7 files changed, 58 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f5bbc4dd6..0d844e7b7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -59,6 +59,7 @@ CHANGELOG Roundcube Webmail - Improve performance of setting IMAP flags using .SILENT suffix - Improve performance of message cache status checking with skip_disabled=true - Support contact's email addresses up to 255 characters long (#1487095) +- Add option to place replies in the folder of the message being replied to (#1485945) RELEASE 0.4.2 ------------- diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 974e8b3b1..d85b507ef 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -589,4 +589,7 @@ $rcmail_config['mdn_default'] = 0; // Delivery Status Notification checkbox default state $rcmail_config['dsn_default'] = 0; +// Place replies in the folder of the message being replied to +$rcmail_config['reply_same_folder'] = false; + // end of config file diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index d209501d4..26f9dca31 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -378,6 +378,7 @@ $labels['previewpanemarkread'] = 'Mark previewed messages as read'; $labels['afternseconds'] = 'after $n seconds'; $labels['reqmdn'] = 'Always request a return receipt'; $labels['reqdsn'] = 'Always request a delivery status notification'; +$labels['replysamefolder'] = 'Place replies in the folder of the message being replied to'; $labels['folder'] = 'Folder'; $labels['folders'] = 'Folders'; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index 534681c65..361ab6d4f 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -363,5 +363,7 @@ $labels['addmailreplyto'] = 'Dodaj Mail-Reply-To'; $labels['addmailfollowupto'] = 'Dodaj Mail-Followup-To'; $labels['dsn'] = 'Status dostarczenia (DSN)'; $labels['reqdsn'] = 'Zawsze żądaj statusu dostarczenia (DSN)'; +$labels['replysamefolder'] = 'Umieszczaj odpowiedzi w folderze wiadomości, na którą odpowiadam'; +$labels['contactproperties'] = 'Właściwości'; ?> diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 3661f437e..421ff32c6 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -100,12 +100,8 @@ if (!is_array($_SESSION['compose']) || $_SESSION['compose']['id'] != $MESSAGE_ID } // check if folder for saving sent messages exists and is subscribed (#1486802) - if (($sent_folder = $_SESSION['compose']['param']['sent_mbox']) && !$IMAP->mailbox_exists($sent_folder, true)) { - // folder may exist but isn't subscribed (#1485241) - if (!$IMAP->mailbox_exists($sent_folder)) - $IMAP->create_mailbox($sent_folder, true); - else - $IMAP->subscribe($sent_folder); + if ($sent_folder = $_SESSION['compose']['param']['sent_mbox']) { + rcmail_check_sent_folder($sent_folder, true); } // redirect to a unique URL with all parameters stored in session @@ -177,6 +173,13 @@ if (!empty($msg_uid)) $MESSAGE->reply_all = $_SESSION['compose']['param']['all']; $OUTPUT->set_env('compose_mode', 'reply'); + + // Save the sent message in the same folder of the message being replied to + if ($RCMAIL->config->get('reply_same_folder') && ($sent_folder = $_SESSION['compose']['mailbox']) + && rcmail_check_sent_folder($sent_folder, false) + ) { + $_SESSION['compose']['param']['sent_mbox'] = $sent_folder; + } } else if ($compose_mode == RCUBE_COMPOSE_DRAFT) { @@ -191,8 +194,15 @@ if (!empty($msg_uid)) $_SESSION['compose']['forward_uid'] = $info['uid']; $_SESSION['compose']['mailbox'] = $info['folder']; + + // Save the sent message in the same folder of the message being replied to + if ($RCMAIL->config->get('reply_same_folder') && ($sent_folder = $info['folder']) + && rcmail_check_sent_folder($sent_folder, false) + ) { + $_SESSION['compose']['param']['sent_mbox'] = $sent_folder; + } } - + if ($MESSAGE->headers->in_reply_to) $_SESSION['compose']['reply_msgid'] = '<'.$MESSAGE->headers->in_reply_to.'>'; @@ -1261,6 +1271,26 @@ function rcmail_store_target_selection($attrib) } +function rcmail_check_sent_folder($folder, $create=false) +{ + global $IMAP; + + if ($IMAP->mailbox_exists($folder, true)) { + return true; + } + + // folder may exist but isn't subscribed (#1485241) + if ($create) { + if (!$IMAP->mailbox_exists($folder)) + return $IMAP->create_mailbox($folder, true); + else + return $IMAP->subscribe($folder); + } + + return false; +} + + function get_form_tags($attrib) { global $RCMAIL, $MESSAGE_FORM; @@ -1274,13 +1304,13 @@ function get_form_tags($attrib) $form_start = empty($attrib['form']) ? $RCMAIL->output->form_tag(array('name' => "form", 'method' => "post")) : ''; $form_start .= $hiddenfields->show(); } - + $form_end = ($MESSAGE_FORM && !strlen($attrib['form'])) ? '' : ''; $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form'; - + if (!$MESSAGE_FORM) $RCMAIL->output->add_gui_object('messageform', $form_name); - + $MESSAGE_FORM = $form_name; return array($form_start, $form_end); diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index e0aa5629b..daa9fafa6 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -534,6 +534,16 @@ function rcmail_user_prefs($current=null) ); } + if (!isset($no_override['reply_same_folder'])) { + $field_id = 'rcmfd_reply_same_folder'; + $input_reply_same_folder = new html_checkbox(array('name' => '_reply_same_folder', 'id' => $field_id, 'value' => 1)); + + $blocks['main']['options']['reply_same_folder'] = array( + 'title' => html::label($field_id, Q(rcube_label('replysamefolder'))), + 'content' => $input_reply_same_folder->show($config['reply_same_folder']?1:0), + ); + } + if (!isset($no_override['top_posting'])) { $field_id = 'rcmfd_top_posting'; $select_replymode = new html_select(array('name' => '_top_posting', 'id' => $field_id, 'onchange' => "\$('#rcmfd_sig_above').attr('disabled',this.selectedIndex==0)")); diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc index 63654eefc..265c37e90 100644 --- a/program/steps/settings/save_prefs.inc +++ b/program/steps/settings/save_prefs.inc @@ -67,6 +67,7 @@ switch ($CURR_SECTION) 'force_7bit' => isset($_POST['_force_7bit']) ? TRUE : FALSE, 'mdn_default' => isset($_POST['_mdn_default']) ? TRUE : FALSE, 'dsn_default' => isset($_POST['_dsn_default']) ? TRUE : FALSE, + 'reply_same_folder' => isset($_POST['_reply_same_folder']) ? TRUE : FALSE, 'show_sig' => isset($_POST['_show_sig']) ? intval($_POST['_show_sig']) : 1, 'top_posting' => !empty($_POST['_top_posting']), 'strip_existing_sig' => isset($_POST['_strip_existing_sig']), -- cgit v1.2.3