commerce_license-8.x-2.x-dev/src/EventSubscriber/LogEventSubscriber.php
src/EventSubscriber/LogEventSubscriber.php
<?php
namespace Drupal\commerce_license\EventSubscriber;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* The Log Subscriber reacts to license events and logs them.
*/
class LogEventSubscriber implements EventSubscriberInterface {
/**
* The log storage.
*
* @var \Drupal\commerce_log\LogStorageInterface
*/
protected $logStorage;
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* Constructs a new OrderEventSubscriber object.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler) {
$this->moduleHandler = $module_handler;
if ($this->moduleHandler->moduleExists('commerce_log')) {
$this->logStorage = $entity_type_manager->getStorage('commerce_log');
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
return [
'commerce_license.post_transition' => ['onLicensePostTransition'],
];
}
/**
* Creates a log on license state update.
*
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
* The transition event.
*
* @throws \Drupal\Core\Entity\EntityStorageException
*/
public function onLicensePostTransition(WorkflowTransitionEvent $event) {
if (!$this->moduleHandler->moduleExists('commerce_log')) {
return;
}
$transition = $event->getTransition();
/** @var \Drupal\commerce_license\Entity\LicenseInterface $license */
$license = $event->getEntity();
$original_state_id = $license->getState()->getOriginalId();
$original_state = $event->getWorkflow()->getState($original_state_id);
$this->logStorage->generate($license, 'license_state_updated', [
'transition_label' => $transition->getLabel(),
'from_state' => $original_state ? $original_state->getLabel() : $original_state_id,
'to_state' => $license->getState()->getLabel(),
])->save();
}
}
