diff --git a/calendar/inc/class.calendar_boupdate.inc.php b/calendar/inc/class.calendar_boupdate.inc.php index cef7a84c09..baa45912e5 100644 --- a/calendar/inc/class.calendar_boupdate.inc.php +++ b/calendar/inc/class.calendar_boupdate.inc.php @@ -980,7 +980,7 @@ class calendar_boupdate extends calendar_bo } } // same with the alarms - if (isset($event['alarm']) && is_array($event['alarm'])) + if (isset($event['alarm']) && is_array($event['alarm']) && isset($event['start'])) { foreach($event['alarm'] as $id => $alarm) { @@ -989,12 +989,15 @@ class calendar_boupdate extends calendar_bo } } // update all existing alarm times, in case alarm got moved and alarms are not include in $event - if ($old_event && is_array($old_event['alarm'])) + if ($old_event && is_array($old_event['alarm']) && isset($event['start'])) { - foreach($old_event['alarm'] as $alarm) + foreach($old_event['alarm'] as $id => $alarm) { - $alarm['time'] = $event['start'] - $alarm['offset']; - $this->so->save_alarm($event['id'],$alarm, $this->now); + if (!isset($event['alarm'][$id])) + { + $alarm['time'] = $event['start'] - $alarm['offset']; + $this->so->save_alarm($event['id'],$alarm, $this->now); + } } } diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index 6725c28b6e..143d87c4bb 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -557,6 +557,11 @@ class calendar_uiforms extends calendar_ui $event['reference'] = $event['id']; $event['recurrence'] = $content['edit_single']; unset($event['id']); + // modifiy alarms for the exception, unsetting alarm-id to create new alarms + foreach($event['alarm'] as $n => &$alarm) + { + unset($alarm['id']); + } $conflicts = $this->bo->update($event,$ignore_conflicts,true,false,true,$messages,$content['no_notifications']); if (!is_array($conflicts) && $conflicts) { @@ -564,6 +569,7 @@ class calendar_uiforms extends calendar_ui $recur_event = $this->bo->read($event['reference']); $recur_event['recur_exception'][] = $content['edit_single']; unset($recur_event['start']); unset($recur_event['end']); // no update necessary + unset($recur_event['alarm']); // unsetting alarms too, as they cant be updated without start! $this->bo->update($recur_event,true); // no conflict check here unset($recur_event); unset($event['edit_single']); // if we further edit it, it's just a single event