From 2be7cd3b2ab50047820da4a1e873785b53f41acd Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 19 Jan 2009 13:56:42 +0000 Subject: ** Fix for bug #225712 2009-01-19 Milan Crha ** Fix for bug #225712 * calendar/gui/dialogs/comp-editor.h: (CompEditorClass::send_comp), (comp_editor_send_comp): Changed function prototypes. * calendar/gui/dialogs/comp-editor.c: (real_send_comp), (save_comp_with_send), (comp_editor_send_comp): Strip alarms based on user's choice. * calendar/gui/dialogs/send-comp.h: (send_component_dialog): * calendar/gui/dialogs/send-comp.c: (have_nonprocedural_alarm), (send_component_dialog): Show option "Send my alarms with this event" when prompting to send event or not, but only if have any non-procedure alarms and if it the caller want to know user's opinion. Default is to strip all alarms. Procedure alarms are always strip out. * calendar/gui/dialogs/event-editor.c: (event_editor_send_comp): * calendar/gui/dialogs/task-editor.c: (task_editor_send_comp): Honor function prototype changes and use new parameter strip_alarms. * calendar/gui/itip-utils.h: (itip_send_comp): * calendar/gui/itip-utils.c: (comp_compliant), (itip_send_comp), (reply_to_calendar_comp): New parameter to strip all alarms or only procedure alarms. * calendar/gui/tasks-control.c: (tasks_control_forward_cmd): * calendar/gui/e-itip-control.c: (send_item), (send_freebusy), (ok_clicked_cb): * calendar/gui/e-calendar-table.c: (e_calendar_table_on_forward): * calendar/gui/e-memo-table.c: (e_memo_table_on_forward): * calendar/gui/e-calendar-view.c: (e_calendar_view_cut_clipboard), (delete_event), (e_calendar_view_delete_selected_occurrence), (on_forward): Always strip alarms when sending component. * calendar/gui/e-calendar-view.c: (e_calendar_view_add_event), (e_calendar_view_modify_and_send): * calendar/gui/e-cal-model-calendar.c: (ecmc_set_value_at): Strip alarms based on user's choice. * plugins/itip-formatter/itip-view.h: * plugins/itip-formatter/itip-view.c: (itip_view_set_show_keep_alarm_check), (itip_view_get_keep_alarm_check_state), (itip_view_set_show_inherit_alarm_check), (itip_view_get_inherit_alarm_check_state): New functions to new options to either inherit reminder from the incoming event or to preserve users reminders in already existing event in the calendar. * plugins/itip-formatter/itip-view.c: (struct _ItipViewPrivate), (alarm_check_toggled_cb), (itip_view_init): Properly initialize new option's members. * plugins/itip-formatter/itip-formatter.c: (find_cal_opened_cb), (update_item), (send_comp_to_attendee), (update_attendee_status), (send_item), (extract_itip_data), (view_response_cb), (format_itip_object): Setup new options based on the actual data. svn path=/trunk/; revision=37097 --- calendar/gui/itip-utils.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'calendar/gui/itip-utils.c') diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c index 3de75cf3d3..58df85a9d2 100644 --- a/calendar/gui/itip-utils.c +++ b/calendar/gui/itip-utils.c @@ -1024,7 +1024,7 @@ comp_minimal (ECalComponent *comp, gboolean attendee) } static ECalComponent * -comp_compliant (ECalComponentItipMethod method, ECalComponent *comp, ECal *client, icalcomponent *zones) +comp_compliant (ECalComponentItipMethod method, ECalComponent *comp, ECal *client, icalcomponent *zones, gboolean strip_alarms) { ECalComponent *clone, *temp_clone; struct icaltimetype itt; @@ -1081,8 +1081,31 @@ comp_compliant (ECalComponentItipMethod method, ECalComponent *comp, ECal *clien e_cal_component_free_recur_list (rrule_list); } - /* We delete incoming alarms anyhow, and this helps with outlook */ - e_cal_component_remove_all_alarms (clone); + /* We delete incoming alarms if requested, even this helps with outlook */ + if (strip_alarms) { + e_cal_component_remove_all_alarms (clone); + } else { + /* Always strip procedure alarms, because of security */ + GList *uids, *l; + + uids = e_cal_component_get_alarm_uids (clone); + + for (l = uids; l; l = l->next) { + ECalComponentAlarm *alarm; + ECalComponentAlarmAction action = E_CAL_COMPONENT_ALARM_UNKNOWN; + + alarm = e_cal_component_get_alarm (clone, (const char *)l->data); + if (alarm) { + e_cal_component_alarm_get_action (alarm, &action); + e_cal_component_alarm_free (alarm); + + if (action == E_CAL_COMPONENT_ALARM_PROCEDURE) + e_cal_component_remove_alarm (clone, (const char *)l->data); + } + } + + cal_obj_uid_list_free (uids); + } /* Strip X-LIC-ERROR stuff */ e_cal_component_strip_errors (clone); @@ -1165,7 +1188,7 @@ append_cal_attachments (EMsgComposer *composer, gboolean itip_send_comp (ECalComponentItipMethod method, ECalComponent *send_comp, - ECal *client, icalcomponent *zones, GSList *attachments_list, GList *users) + ECal *client, icalcomponent *zones, GSList *attachments_list, GList *users, gboolean strip_alarms) { EMsgComposer *composer; EComposerHeaderTable *table; @@ -1198,7 +1221,7 @@ itip_send_comp (ECalComponentItipMethod method, ECalComponent *send_comp, } /* Tidy up the comp */ - comp = comp_compliant (method, send_comp, client, zones); + comp = comp_compliant (method, send_comp, client, zones, strip_alarms); if (comp == NULL) goto cleanup; @@ -1314,7 +1337,7 @@ reply_to_calendar_comp (ECalComponentItipMethod method, gboolean retval = FALSE; /* Tidy up the comp */ - comp = comp_compliant (method, send_comp, client, zones); + comp = comp_compliant (method, send_comp, client, zones, TRUE); if (comp == NULL) goto cleanup; -- cgit v1.2.3