danse_moderation_notifications-1.0.x-dev/src/Plugin/DanseRecipientSelection/TransitionEntity.php
src/Plugin/DanseRecipientSelection/TransitionEntity.php
<?php namespace Drupal\danse_moderation_notifications\Plugin\DanseRecipientSelection; use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException; use Drupal\Component\Plugin\Exception\PluginNotFoundException; use Drupal\Core\Entity\EntityInterface; use Drupal\danse\PayloadInterface; use Drupal\danse\RecipientSelectionBase; /** * Plugin implementation of the DANSE entity recipient selection. * * @DanseRecipientSelection( * id = "transition_entity", * deriver = * "Drupal\danse_moderation_notifications\Plugin\DanseRecipientSelection\TransitionEntityDeriver" * ) */ class TransitionEntity extends RecipientSelectionBase { /** * The notification service. * * @var \Drupal\danse_moderation_notifications\Notification */ protected $notificationService; public function getRecipients(PayloadInterface $payload): array { $result = []; // Load the revision from the payload. $revision = $payload->getEntity(); $notification_uid = $revision->getRevisionUser()->id(); /** @var \Drupal\danse_moderation_notifications\NotificationInformation $notification */ $notifications = \Drupal::service('danse_moderation_notifications.notification_information') ->getNotifications($revision); if (!empty($notifications)) { $entity_type_id = 'danse_moderation_notifications'; // TODO: Dependency injection. $entity_storage = \Drupal::entityTypeManager() ->getStorage($entity_type_id); $entities = $entity_storage->loadMultiple(); // Extract recipient information from entities. foreach ($entities as $key => $value) { if (array_key_exists($key, $notifications)) { /** @var \Drupal\danse_moderation_notifications\Notification $recipients */ $recipients = \Drupal::service('danse_moderation_notifications.notification') ->getNotificationRecipients($revision, $notifications); $result = $recipients['to']; } } } // Remove $notification_uid from $result. // The user who initiated the event, doesn't need to be notified. if (in_array($notification_uid, $result)) { $key = array_search($notification_uid, $result); unset($result[$key]); // Re-index the array. $result = array_values($result); } return $result; } }