'onEntityPreSave', ]; } public function onEntityPreSave(AbstractEntityEvent $event): void { if ($event->getEntity()->getEntityTypeId() != 'node') { return; } if ($event->getEntity()->bundle() != 'talk') { return; } /** @var Talk $talk */ $talk = $event->getEntity(); $this->reorderEvents($talk); $this->updateCreatedDate($talk); } private function reorderEvents(Talk $talk): void { $events = $talk->getEvents(); $eventsByDate = $this->sortEventsByDate($events); // If the original event IDs don't match the sorted event IDs, update the // event field to use the sorted ones. if ($events->map->id() != $eventsByDate->map->id()) { $talk->setEvents($eventsByDate->toArray()); } } private function sortEventsByDate(Collection $events): Collection { return $events ->sortBy(fn(ParagraphInterface $event) => $event->get('field_date') ->getString()) ->values(); } private function updateCreatedDate(Talk $talk): void { if (!$eventDate = $talk->findLatestEventDate()) { return; } $talkDate = Carbon::parse($eventDate)->getTimestamp(); if ($talkDate == $talk->getCreatedTime()) { return; } $talk->setCreatedTime($talkDate); } }