scheduled_publish-8.x-3.9/tests/modules/scheduled_publish_test/src/EventSubscriber/ScheduledStateChange.php
tests/modules/scheduled_publish_test/src/EventSubscriber/ScheduledStateChange.php
<?php
namespace Drupal\scheduled_publish_test\EventSubscriber;
use Drupal\scheduled_publish\Event\ScheduledStateChangeEvent;
use Drupal\scheduled_publish\ScheduledPublishEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* A subscriber to listen for scheduled_publish ScheduledStateChange events.
*
* @see \Drupal\Tests\scheduled_publish\Functional\ScheduledStateChangeEventTest
*/
class ScheduledStateChange implements EventSubscriberInterface {
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array {
return [
ScheduledPublishEvents::SCHEDULED_STATE_CHANGE => 'onScheduledStateChange',
];
}
/**
* Run an action on scheduled state change.
*
* @param \Drupal\scheduled_publish\Event\ScheduledStateChangeEvent $event
* The event to process.
*/
public function onScheduledStateChange(ScheduledStateChangeEvent $event): void {
// Get the information from the event.
$entity = $event->getEntity();
$oldModerationState = $event->getOldModerationState();
$newModerationState = $event->getNewModerationState();
$scheduledPublishField = $event->getScheduledPublishField();
$scheduledValue = $event->getScheduledValue();
// If there is a field_test, then append some data from the event to it.
if ($entity->hasField('field_test')) {
$fieldBefore = $entity->get('field_test')->getString();
$testString = \implode('//', [
$fieldBefore,
$entity->getEntityTypeId(),
$entity->id(),
$oldModerationState,
$newModerationState,
$scheduledPublishField,
\implode('/', $scheduledValue),
]);
$entity->set('field_test', $testString);
}
}
}
