Calendar: Fix recurring events that started outside current view were not updated properly in the current view after creating an exception

This commit is contained in:
nathan 2022-09-01 09:03:47 -06:00
parent fbb02f5bd2
commit 64e2fb7c63
2 changed files with 20 additions and 4 deletions

View File

@ -84,10 +84,21 @@ class calendar_hooks
*/
static public function prepareEventPush($event)
{
$event = array_intersect_key($event, array_flip(['id','owner','participants','start','end']));
$send_keys = ['id', 'owner', 'participants', 'start', 'end'];
if($event['recur_type'])
{
// If it's a recurring event, we're only sending the first instance, which may be outside of the current
// view and therefore would be ignored by the client. Include range for additional check.
$send_keys[] = 'range_start';
$send_keys[] = 'range_end';
}
$event = array_intersect_key($event, array_flip($send_keys));
foreach($event['participants'] as $uid => $status)
{
if ($uid[0] === 'e') unset($event['participants'][$uid]);
if($uid[0] === 'e')
{
unset($event['participants'][$uid]);
}
}
return $event;
}

View File

@ -649,9 +649,14 @@ export class CalendarApp extends EgwApp
// Check if we're interested by date?
if(cal_event.end <= new Date(this.state.first).valueOf() /1000 || cal_event.start > new Date(this.state.last).valueOf()/1000)
{
// The event is outside our current view
// The event is outside our current view, but check if it's just one of a recurring event
if(!cal_event.range_end && !cal_event.range_start ||
cal_event.range_end <= new Date(this.state.first).valueOf() / 1000 ||
cal_event.range_start > new Date(this.state.last).valueOf() / 1000)
{
return;
}
}
// Do we already have "fresh" data? Most user actions give fresh data in response
let existing = egw.dataGetUIDdata('calendar::' + pushData.id);