oliverdavies.uk/web/modules/custom/custom/src/EventSubscriber/UpdateTalkCreatedDateOnSave.php

54 lines
1.4 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace Drupal\custom\EventSubscriber;
2020-05-09 21:51:04 +01:00
use Carbon\Carbon;
use Drupal\Core\Entity\EntityInterface;
use Drupal\custom\Entity\Node;
use Drupal\hook_event_dispatcher\Event\Entity\BaseEntityEvent;
use Drupal\hook_event_dispatcher\HookEventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Set the created date for a talk to be the last date that the talk is given.
*/
final class UpdateTalkCreatedDateOnSave implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [
HookEventDispatcherInterface::ENTITY_INSERT => 'entityInsertOrUpdate',
HookEventDispatcherInterface::ENTITY_UPDATE => 'entityInsertOrUpdate',
];
}
public function entityInsertOrUpdate(BaseEntityEvent $event): void {
2020-05-10 13:15:07 +01:00
if ($event->getEntity()->getEntityTypeId() != 'node') {
return;
}
if ($event->getEntity()->bundle() != 'talk') {
return;
}
$this->updateCreatedDate($event->getEntity());
}
private function updateCreatedDate(EntityInterface $talk): void {
/** @var \Drupal\custom\Entity\Node $talk */
if (!$eventDate = $talk->findLatestEventDate()) {
return;
}
2020-05-09 21:51:04 +01:00
$talkDate = Carbon::parse($eventDate)->getTimestamp();
if ($talkDate == $talk->get('created')->getString()) {
return;
}
$talk->set('created', $talkDate);
}
}