'onEntityPreSave', ]; } public function onEntityPreSave(BaseEntityEvent $event): void { if ($event->getEntity()->getEntityTypeId() != 'node') { return; } if ($event->getEntity()->bundle() != 'talk') { return; } /** @var \Drupal\opdavies_blog\Entity\Node\Talk $talk */ $talk = $event->getEntity(); $this->reorderEvents($talk); $this->updateCreatedDate($talk); } private function reorderEvents(Talk $talk): void { $events = $talk->getEvents(); $eventsByDate = $events ->sortBy(fn(ParagraphInterface $event) => $event->get('field_date') ->getString()) ->values(); // 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->set('field_events', $eventsByDate->toArray()); } } private function updateCreatedDate(Talk $talk): void { if (!$eventDate = $talk->findLatestEventDate()) { return; } $talkDate = Carbon::parse($eventDate)->getTimestamp(); if ($talkDate == $talk->get('created')->getString()) { return; } $talk->set('created', $talkDate); } }