You are here

public function ActivityDigestWorker::processItem in Open Social 8.7

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.8 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
  9. 10.3.x 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 29

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'])) {

    // Get target account.
    $target = User::load($data['uid']);

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

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

          // Load the message.
          $message = Message::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'] = \Drupal::translation()
          ->formatPlural($notification_count, 'You have received <strong>:count</strong> notification', 'You have received <strong>:count</strong> notifications', [
          ':count' => $notification_count,
        ], [
          'langcode' => $langcode,
        ]);
        $emailfrequencymanager = \Drupal::service('plugin.manager.emailfrequency');

        /* @var \Drupal\activity_send_email\EmailFrequencyInterface $instance */
        $instance = $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'] = \Drupal::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('entity.user.edit_form', [
            'user' => $target
              ->id(),
          ])
            ->setAbsolute())
            ->toString(),
          ':frequency' => $frequency_translated,
        ], [
          'langcode' => $langcode,
        ]);

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

        // Send the email.
        $mail_manager = \Drupal::service('plugin.manager.mail');
        $mail_manager
          ->mail('activity_send_email', 'activity_send_email', $target
          ->getEmail(), $langcode, $params, NULL, TRUE);
      }
    }
  }
}