$eventToFilter) { $eventToFilterData = []; foreach(self::EVENT_DIFF as $eventDiff) { $eventToFilterData[] = IMipService::readPropertyWithDefault($eventToFilter, $eventDiff, ''); } // events are identical and can be removed if ($filterEventData === $eventToFilterData) { unset($eventsToFilter[$k]); return true; } } return false; } /** * Compare two VCalendars with each other and find all changed elements * * Returns an array of old and new events * * Old events are only detected if they are also changed * If there is no corresponding old event for a VEvent, it * has been newly created * * @param VCalendar $new * @param VCalendar|null $old * @return array */ public function findModified(VCalendar $new, ?VCalendar $old): array { $newEventComponents = $new->getComponents(); foreach ($newEventComponents as $k => $event) { if(!$event instanceof VEvent) { unset($newEventComponents[$k]); } } if(empty($old)) { return ['old' => null, 'new' => $newEventComponents]; } $oldEventComponents = $old->getComponents(); if(is_array($oldEventComponents) && !empty($oldEventComponents)) { foreach ($oldEventComponents as $k => $event) { if(!$event instanceof VEvent) { unset($oldEventComponents[$k]); continue; } if($this->removeIfUnchanged($event, $newEventComponents)) { unset($oldEventComponents[$k]); } } } return ['old' => array_values($oldEventComponents), 'new' => array_values($newEventComponents)]; } }