diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index ef989679..6b28657a 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -54,6 +54,7 @@ class calendar extends rcube_plugin 'calendar_event_coloring' => 0, 'calendar_time_indicator' => true, 'calendar_allow_invite_shared' => false, + 'calendar_itip_after_action' => 0, ); private $ical; @@ -512,6 +513,46 @@ class calendar extends rcube_plugin ); } + $p['blocks']['itip']['name'] = $this->gettext('itipoptions'); + + // Invitations handling + if (!isset($no_override['calendar_itip_after_action'])) { + if (!$p['current']) { + $p['blocks']['itip']['content'] = true; + return $p; + } + + $field_id = 'rcmfd_after_action'; + $select = new html_select(array('name' => '_after_action', 'id' => $field_id, + 'onchange' => "\$('#{$field_id}_select')[this.value == 4 ? 'show' : 'hide']()")); + + $select->add($this->gettext('afternothing'), ''); + $select->add($this->gettext('aftertrash'), 1); + $select->add($this->gettext('afterdelete'), 2); + $select->add($this->gettext('afterflagdeleted'), 3); + $select->add($this->gettext('aftermoveto'), 4); + + $val = $this->rc->config->get('calendar_itip_after_action', $this->defaults['calendar_itip_after_action']); + if ($val !== null && $val !== '' && !is_int($val)) { + $folder = $val; + $val = 4; + } + + $folders = $this->rc->folder_selector(array( + 'id' => $field_id . '_select', + 'name' => '_after_action_folder', + 'maxlength' => 30, + 'folder_filter' => 'mail', + 'folder_rights' => 'w', + 'style' => $val !== 4 ? 'display:none' : '', + )); + + $p['blocks']['itip']['options']['after_action'] = array( + 'title' => html::label($field_id, Q($this->gettext('afteraction'))), + 'content' => $select->show($val) . $folders->show($folder), + ); + } + // category definitions if (!$this->driver->nocategories && !isset($no_override['calendar_categories'])) { $p['blocks']['categories']['name'] = $this->gettext('categories'); @@ -660,8 +701,13 @@ class calendar extends rcube_plugin 'calendar_birthday_adressbooks' => (array)get_input_value('_birthday_adressbooks', RCUBE_INPUT_POST), 'calendar_birthdays_alarm_type' => get_input_value('_birthdays_alarm_type', RCUBE_INPUT_POST), 'calendar_birthdays_alarm_offset' => $birthdays_alarm_value ?: null, + 'calendar_itip_after_action' => intval(get_input_value('_after_action', RCUBE_INPUT_POST)), ); + if ($p['prefs']['calendar_itip_after_action'] == 4) { + $p['prefs']['calendar_itip_after_action'] = get_input_value('_after_action_folder', RCUBE_INPUT_POST, true); + } + // categories if (!$this->driver->nocategories) { $old_categories = $new_categories = array(); diff --git a/plugins/calendar/config.inc.php.dist b/plugins/calendar/config.inc.php.dist index 5216642d..c3cdea3f 100644 --- a/plugins/calendar/config.inc.php.dist +++ b/plugins/calendar/config.inc.php.dist @@ -143,6 +143,14 @@ $rcmail_config['kolab_invitation_calendars'] = true; // $rcmail_config['calendar_resources_driver'] = 'ldap'; // LDAP directory configuration to find avilable resources for events -// $rcmail_config['calendar_resources_directory'] = array(/* ldap_public-like address book configuration */) +// $rcmail_config['calendar_resources_directory'] = array(/* ldap_public-like address book configuration */); + +// Action taken after iTip request is handled. Possible values: +// 0 - no action +// 1 - move to Trash +// 2 - delete the message +// 3 - flag as deleted +// folder_name - move the message to the specified folder +$rcmail_config['calendar_itip_after_action'] = 0; ?> diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index 8b3f4165..3cbcab74 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -17,6 +17,13 @@ $labels['coloringmode0'] = 'According to calendar'; $labels['coloringmode1'] = 'According to category'; $labels['coloringmode2'] = 'Calendar for outline, category for content'; $labels['coloringmode3'] = 'Category for outline, calendar for content'; +$labels['afternothing'] = 'Do nothing'; +$labels['aftertrash'] = 'Move to Trash'; +$labels['afterdelete'] = 'Delete the message'; +$labels['afterflagdeleted'] = 'Flag as deleted'; +$labels['aftermoveto'] = 'Move to...'; +$labels['itipoptions'] = 'Invitations'; +$labels['afteraction'] = 'After the request is handled'; // calendar $labels['calendar'] = 'Calendar';