You are here

class ActivityDigestWorker in Open Social 10.2.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
  2. 8 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  3. 8.2 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  4. 8.3 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  5. 8.4 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  6. 8.5 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  7. 8.6 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  8. 8.7 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  9. 8.8 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  10. 10.3.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  11. 10.0.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker
  12. 10.1.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker

An activity send email worker.

@QueueWorker( id = "activity_digest_worker", title = @Translation("Process activity_digest_worker queue."), cron = {"time" = 60} )

This QueueWorker is responsible for sending emails from the queue

Hierarchy

Expanded class hierarchy of ActivityDigestWorker

File

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

Namespace

Drupal\activity_send_email\Plugin\QueueWorker
View source
class ActivityDigestWorker extends ActivitySendWorkerBase implements ContainerFactoryPluginInterface {

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * The email frequency manager.
   *
   * @var \Drupal\activity_send_email\EmailFrequencyManager
   */
  protected $emailFrequencyManager;

  /**
   * The mail manager.
   *
   * @var \Drupal\Core\Mail\MailManagerInterface
   */
  protected $mailManager;

  /**
   * The renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * The translation service.
   *
   * @var \Drupal\Core\StringTranslation\TranslationInterface
   */
  protected $translation;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EmailFrequencyManager $email_frequency_manager, MailManagerInterface $mail_manager, RendererInterface $renderer, TranslationInterface $translation) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->entityTypeManager = $entity_type_manager;
    $this->emailFrequencyManager = $email_frequency_manager;
    $this->mailManager = $mail_manager;
    $this->renderer = $renderer;
    $this->translation = $translation;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('entity_type.manager'), $container
      ->get('plugin.manager.emailfrequency'), $container
      ->get('plugin.manager.mail'), $container
      ->get('renderer'), $container
      ->get('string_translation'));
  }

  /**
   * {@inheritdoc}
   */
  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);
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ActivityDigestWorker::$emailFrequencyManager protected property The email frequency manager.
ActivityDigestWorker::$entityTypeManager protected property The entity type manager.
ActivityDigestWorker::$mailManager protected property The mail manager.
ActivityDigestWorker::$renderer protected property The renderer.
ActivityDigestWorker::$translation protected property The translation service.
ActivityDigestWorker::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
ActivityDigestWorker::processItem public function Works on a single queue item. Overrides QueueWorkerInterface::processItem
ActivityDigestWorker::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct
ActivitySendWorkerBase::createQueueItem protected function Create queue item.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.