public function ActivityDigestWorker::processItem in Open Social 8
Same name and namespace in other branches
- 8.9 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.2 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.3 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.4 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.5 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.6 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.7 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 8.8 modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 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.0.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 10.1.x modules/custom/activity_send/modules/activity_send_email/src/Plugin/QueueWorker/ActivityDigestWorker.php \Drupal\activity_send_email\Plugin\QueueWorker\ActivityDigestWorker::processItem()
- 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\QueueWorkerCode
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) {
$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);
}
}
}
}