You are here

public function Notification::sendNotification in Content Moderation Notifications 8.2

Same name and namespace in other branches
  1. 8.3 src/Notification.php \Drupal\content_moderation_notifications\Notification::sendNotification()

Send notifications for a given entity and set of notifications.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity we may be moderating.

\Drupal\content_moderation_notifications\ContentModerationNotificationInterface[] $notifications: List of content moderation notification entities.

Return value

bool TRUE if this entity is moderated, FALSE otherwise.

Overrides NotificationInterface::sendNotification

File

src/Notification.php, line 33

Class

Notification
General service for moderation-related questions about Entity API.

Namespace

Drupal\content_moderation_notifications

Code

public function sendNotification(EntityInterface $entity, array $notifications) {
  foreach ($notifications as $notification) {
    $data['langcode'] = \Drupal::currentUser()
      ->getPreferredLangcode();
    $data['notification'] = $notification;

    // Setup the email subject and body content.
    $data['params']['subject'] = $notification->subject;
    $data['params']['message'] = check_markup($notification->body['value'], $notification->body['format']);

    // Add the entity as context to aid in token replacement.
    $data['params']['context'] = [
      'entity' => $entity,
      'user' => \Drupal::currentUser(),
    ];

    // Figure out who the email should be going to.
    $data['to'] = [];

    // Authors.
    if ($notification->author) {
      $data['to'][] = $entity
        ->getOwner()->mail->value;
    }

    // Roles.
    $roles = array_keys(array_filter($notification->roles));
    foreach ($roles as $role) {
      $role_users = \Drupal::service('entity_type.manager')
        ->getStorage('user')
        ->loadByProperties([
        'roles' => $role,
      ]);
      foreach ($role_users as $role_user) {
        $data['to'][] = $role_user->mail->value;
      }
    }

    // Adhoc emails.
    $adhoc_emails = array_map('trim', explode(',', $notification->emails));
    foreach ($adhoc_emails as $email) {
      $data['to'][] = $email;
    }

    // Let other modules to alter the email data.
    \Drupal::moduleHandler()
      ->alter('content_moderation_notification_mail_data', $entity, $data);

    // Remove any null values that have crept in.
    $data['to'] = array_filter($data['to']);

    // Remove any duplicates.
    $data['to'] = array_unique($data['to']);
    $this->mailManager
      ->mail('content_moderation_notifications', 'content_moderation_notification', implode(',', $data['to']), $data['langcode'], $data['params'], NULL, TRUE);
  }
}