You are here

public function WorkbenchEmailProcessor::processItem in Workbench Email 2.x

Same name and namespace in other branches
  1. 8 src/Plugin/QueueWorker/WorkbenchEmailProcessor.php \Drupal\workbench_email\Plugin\QueueWorker\WorkbenchEmailProcessor::processItem()

Works on a single queue item.

Parameters

mixed $data: The data that was passed to \Drupal\Core\Queue\QueueInterface::createItem() when the item was queued.

Throws

\Drupal\Core\Queue\RequeueException Processing is not yet finished. This will allow another process to claim the item immediately.

\Exception A QueueWorker plugin may throw an exception to indicate there was a problem. The cron process will log the exception, and leave the item in the queue to be processed again later.

\Drupal\Core\Queue\SuspendQueueException More specifically, a SuspendQueueException should be thrown when a QueueWorker plugin is aware that the problem will affect all subsequent workers of its queue. For example, a callback that makes HTTP requests may find that the remote server is not responding. The cron process will behave as with a normal Exception, and in addition will not attempt to process further items from the current item's queue during the current cron run.

Overrides QueueWorkerInterface::processItem

See also

\Drupal\Core\Cron::processQueues()

File

src/Plugin/QueueWorker/WorkbenchEmailProcessor.php, line 119

Class

WorkbenchEmailProcessor
Sends emails notifications for workbench events.

Namespace

Drupal\workbench_email\Plugin\QueueWorker

Code

public function processItem($data) {
  if ($data instanceof QueuedEmail) {
    $template = $data
      ->getTemplate();
    $uuid = $data
      ->getUuid();
    if ($entity = $this->entityRepository
      ->loadEntityByUuid($this->targetEntityType, $uuid)) {
      $body = $template
        ->getBody();

      /* @var \Drupal\Core\Entity\RevisionableStorageInterface $entity_storage */
      $entity_storage = $this->entityTypeManager
        ->getStorage($this->targetEntityType);
      $latest_revision_id = $entity_storage
        ->getLatestRevisionId($entity
        ->id());
      $entity = $entity_storage
        ->loadRevision($latest_revision_id);
      $subject = $this->token
        ->replace($template
        ->getSubject(), [
        $entity
          ->getEntityTypeId() => $entity,
      ], [
        'clear' => TRUE,
      ]);
      $body['value'] = $this->token
        ->replace($body['value'], [
        $entity
          ->getEntityTypeId() => $entity,
      ], [
        'clear' => TRUE,
      ]);
      $body = $this
        ->checkMarkup($body['value'], $body['format']);
      $replyTo = !empty($template
        ->getReplyTo()) ? $this->token
        ->replace($template
        ->getReplyTo(), [
        $entity
          ->getEntityTypeId() => $entity,
      ]) : NULL;

      // Send the email.
      $this->mailManager
        ->mail('workbench_email', 'template::' . $template
        ->id(), $data
        ->getTo(), LanguageInterface::LANGCODE_DEFAULT, [
        'body' => $body,
        'template' => $template,
        'subject' => $subject,
        'entity' => $entity,
      ], $replyTo);
    }
  }
  else {
    throw new \InvalidArgumentException('Cannot perform queue processing on objects other than a QueuedEmail.');
  }
}