You are here

public function ActivityDigestWorker::processItem in Open Social 10.3.x

Same name and namespace in other branches
  1. 8.9 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  2. 8 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  3. 8.2 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  4. 8.3 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  5. 8.4 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  6. 8.5 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  7. 8.6 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  8. 8.7 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  9. 8.8 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  10. 10.0.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  11. 10.1.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  12. 10.2.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::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

modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php, line 106

Class

ActivityDigestWorker
An activity send email worker.

Namespace

Drupal\activity_send_email\Plugin\QueueWorker

Code

public function processItem($data) {
  if (!empty($data['uid']) && !empty($data['frequency']) && !empty($data['activities'])) {
    $user_storage = $this->entityTypeManager
      ->getStorage('user');
    $message_storage = $this->entityTypeManager
      ->getStorage('message');

    // Get target account.

    /** @var \Drupal\user\Entity\User $target */
    $target = $user_storage
      ->load($data['uid']);

    // Make sure we have an actual user account to work with.
    if (is_object($target) && $target
      ->isActive()) {
      $langcode = $target
        ->getPreferredLangcode();
      $digest_notifications = [
        '#theme' => 'digestmail',
      ];
      $activity_storage = $this->entityTypeManager
        ->getStorage('activity');
      foreach ($data['activities'] as $activity_id) {

        /** @var \Drupal\activity_creator\Entity\Activity $activity */
        $activity = $activity_storage
          ->load($activity_id);

        // Only for users that have access to related content.
        if ($activity instanceof Activity && $activity
          ->getRelatedEntity() !== NULL && !$activity
          ->getRelatedEntity()
          ->access('view', $target)) {
          continue;
        }

        // Continue if we have text to send.
        if (isset($activity->field_activity_output_text)) {

          // Load the message.

          /** @var \Drupal\message\Entity\Message $message */
          $message = $message_storage
            ->load($activity->field_activity_message->target_id);
          $body_text = EmailActivityDestination::getSendEmailOutputText($message, $langcode);
          if ($langcode && !empty($body_text)) {
            $digest_notifications['#notifications'][] = $body_text;
          }
        }
      }

      // If we have notification to send continue preparing the email.
      if (!empty($digest_notifications['#notifications'])) {
        $notification_count = count($digest_notifications['#notifications']);

        // Get the notification count for the email template.
        $digest_notifications['#notification_count'] = $this->translation
          ->formatPlural($notification_count, 'You have received <strong>:count</strong> notification', 'You have received <strong>:count</strong> notifications', [
          ':count' => $notification_count,
        ], [
          'langcode' => $langcode,
        ]);

        /** @var \Drupal\activity_send_email\EmailFrequencyInterface $instance */
        $instance = $this->emailFrequencyManager
          ->createInstance($data['frequency']);

        // Translating frequency instance in the language of the user.
        // @codingStandardsIgnoreStart
        $frequency_translated = t($instance
          ->getName()
          ->getUntranslatedString(), [], [
          'langcode' => $langcode,
        ]);

        // @codingStandardsIgnoreEnd
        // Get the notification settings for the email template.
        $digest_notifications['#notification_settings'] = $this->translation
          ->formatPlural($notification_count, 'Based on your @settings, the notification above is sent to you as a <strong>:frequency mail</strong>', 'Based on your @settings, the notifications above are sent to you as a <strong>:frequency mail</strong>', [
          '@settings' => Link::fromTextAndUrl(t('email notification settings'), Url::fromRoute('activity_send_email.user_edit_page')
            ->setAbsolute())
            ->toString(),
          ':frequency' => $frequency_translated,
        ], [
          'langcode' => $langcode,
        ]);

        // Render the notifications using the digestmail.html.twig template.
        $params['body'] = $this->renderer
          ->renderRoot($digest_notifications);

        // Send the email.
        $this->mailManager
          ->mail('activity_send_email', 'activity_send_email', $target
          ->getEmail(), $langcode, $params, NULL, TRUE);
      }
    }
  }
}