From 8f9aa9d41ec0c0a4d97a7799aec146c73156de8c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 14 Apr 2016 11:42:31 +0200 Subject: [PATCH] Fix wrong/missing delegated ATTENDEE in event iTip REPLY (#5365) Summary: Fixes #5365 and unifies COMMENT handling code Reviewers: #roundcube_kolab_plugins_developers, vanmeeuwen Reviewed By: #roundcube_kolab_plugins_developers, vanmeeuwen Differential Revision: https://git.kolab.org/D111 --- plugins/calendar/calendar.php | 20 ++++++++++---------- plugins/tasklist/tasklist.php | 14 +++++++++----- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index 8a10631b..10d6d05a 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -2819,17 +2819,17 @@ class calendar extends rcube_plugin $noreply = $noreply || $status == 'needs-action' || $itip_sending === 0; $instance = rcube_utils::get_input_value('_instance', rcube_utils::INPUT_POST); $savemode = rcube_utils::get_input_value('_savemode', rcube_utils::INPUT_POST); + $comment = rcube_utils::get_input_value('_comment', rcube_utils::INPUT_POST); $error_msg = $this->gettext('errorimportingevent'); - $success = false; - $delegate = null; + $success = false; if ($status == 'delegated') { $delegates = rcube_mime::decode_address_list(rcube_utils::get_input_value('_to', rcube_utils::INPUT_POST, true), 1, false); $delegate = reset($delegates); if (empty($delegate) || empty($delegate['mailto'])) { - $this->rc->output->command('display_message', $this->gettext('libcalendaring.delegateinvalidaddress'), 'error'); + $this->rc->output->command('display_message', $this->rc->gettext('libcalendaring.delegateinvalidaddress'), 'error'); return; } } @@ -2838,19 +2838,20 @@ class calendar extends rcube_plugin if ($event = $this->lib->mail_get_itip_object($mbox, $uid, $mime_id, 'event')) { // forward iTip request to delegatee if ($delegate) { - $rsvpme = (bool) intval(rcube_utils::get_input_value('_rsvp', rcube_utils::INPUT_POST)); - $comment = rcube_utils::get_input_value('_comment', rcube_utils::INPUT_POST); + $rsvpme = rcube_utils::get_input_value('_rsvp', rcube_utils::INPUT_POST); + $itip = $this->load_itip(); - $d_event = $comment ? array_merge($event, array('comment' => $comment)) : $event; - $itip = $this->load_itip(); + $event['comment'] = $comment; - if ($itip->delegate_to($d_event, $delegate, $rsvpme)) { + if ($itip->delegate_to($event, $delegate, !empty($rsvpme))) { $this->rc->output->show_message('calendar.itipsendsuccess', 'confirmation'); } else { $this->rc->output->command('display_message', $this->gettext('itipresponseerror'), 'error'); } + unset($event['comment']); + // the delegator is set to non-participant, thus save as non-blocking $event['free_busy'] = 'free'; } @@ -3086,7 +3087,7 @@ class calendar extends rcube_plugin // send iTip reply if ($event['_method'] == 'REQUEST' && $organizer && !$noreply && !in_array(strtolower($organizer['email']), $emails) && !$error_msg) { - $event['comment'] = rcube_utils::get_input_value('_comment', rcube_utils::INPUT_POST); + $event['comment'] = $comment; $itip = $this->load_itip(); $itip->set_sender_email($reply_sender); if ($itip->send_itip_message($event, 'REPLY', $organizer, 'itipsubject' . $status, 'itipmailbody' . $status)) @@ -3098,7 +3099,6 @@ class calendar extends rcube_plugin $this->rc->output->send(); } - /** * Handler for calendar/itip-remove requests */ diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php index 53ab866d..df36287c 100644 --- a/plugins/tasklist/tasklist.php +++ b/plugins/tasklist/tasklist.php @@ -1906,12 +1906,12 @@ class tasklist extends rcube_plugin $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); $mime_id = rcube_utils::get_input_value('_part', rcube_utils::INPUT_POST); $status = rcube_utils::get_input_value('_status', rcube_utils::INPUT_POST); + $comment = rcube_utils::get_input_value('_comment', rcube_utils::INPUT_POST); $delete = intval(rcube_utils::get_input_value('_del', rcube_utils::INPUT_POST)); $noreply = intval(rcube_utils::get_input_value('_noreply', rcube_utils::INPUT_POST)) || $status == 'needs-action'; $error_msg = $this->gettext('errorimportingtask'); $success = false; - $delegate = null; if ($status == 'delegated') { $delegates = rcube_mime::decode_address_list(rcube_utils::get_input_value('_to', rcube_utils::INPUT_POST, true), 1, false); @@ -1929,15 +1929,19 @@ class tasklist extends rcube_plugin // forward iTip request to delegatee if ($delegate) { - $rsvpme = intval(rcube_utils::get_input_value('_rsvp', rcube_utils::INPUT_POST)); + $rsvpme = rcube_utils::get_input_value('_rsvp', rcube_utils::INPUT_POST); + $itip = $this->load_itip(); - $itip = $this->load_itip(); - if ($itip->delegate_to($task, $delegate, $rsvpme ? true : false)) { + $task['comment'] = $comment; + + if ($itip->delegate_to($task, $delegate, !empty($rsvpme))) { $this->rc->output->show_message('tasklist.itipsendsuccess', 'confirmation'); } else { $this->rc->output->command('display_message', $this->gettext('itipresponseerror'), 'error'); } + + unset($task['comment']); } // find writeable list to store the task @@ -2134,7 +2138,7 @@ class tasklist extends rcube_plugin // send iTip reply if ($task['_method'] == 'REQUEST' && $organizer && !$noreply && !in_array(strtolower($organizer['email']), $emails) && !$error_msg) { - $task['comment'] = rcube_utils::get_input_value('_comment', rcube_utils::INPUT_POST); + $task['comment'] = $comment; $itip = $this->load_itip(); $itip->set_sender_email($reply_sender);