public function ActivityWorkerLogger::processItem in Open Social 8.8
Same name and namespace in other branches
- 8.9 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8.2 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8.3 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8.4 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8.5 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8.6 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 8.7 modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 10.3.x modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 10.0.x modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 10.1.x modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::processItem()
- 10.2.x modules/custom/activity_creator/src/Plugin/QueueWorker/ActivityWorkerLogger.php \Drupal\activity_creator\Plugin\QueueWorker\ActivityWorkerLogger::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_creator/ src/ Plugin/ QueueWorker/ ActivityWorkerLogger.php, line 37
Class
- ActivityWorkerLogger
- A report worker.
Namespace
Drupal\activity_creator\Plugin\QueueWorkerCode
public function processItem($data) {
// Get 100 Recipients at a time.
$limit = 0;
// TODO: Move all this logic to a service.
// TODO: Change this to use dependency injection.
$context_plugin_manager = \Drupal::service('plugin.manager.activity_context.processor');
/* @var $plugin \Drupal\activity_creator\Plugin\ActivityContextBase */
// @TODO Do we need multiple context plugins? If so should we call Manager?
$plugin = $context_plugin_manager
->createInstance($data['context']);
$recipients = $plugin
->getRecipients($data, $data['last_uid'], $limit);
if (!empty($recipients)) {
// Default activity creator template.
$activity_creator_data = [
'mid' => $data['mid'],
'message_template' => $data['message_template'],
'actor' => $data['actor'],
'context' => $data['context'],
'destination' => $data['destination'],
'related_object' => $data['related_object'],
];
// Get all the activity recipient types. Maintain target IDs as key.
$activity_by_type = array_column($recipients, 'target_type');
foreach ($activity_by_type as $recipients_key => $target_type) {
// For all one to one target entity types we create an activity.
if ($target_type !== 'user') {
$activity_creator_data['recipient'] = $recipients[$recipients_key];
$this
->createQueueItem('activity_creator_activities', $activity_creator_data);
}
if ($target_type === 'user') {
$user_recipients[] = $recipients[$recipients_key];
}
$last_uid = $recipients[$recipients_key];
}
// When the activity should be created for a one to many user entity
// we like to group these.
if (!empty($user_recipients)) {
$activity_creator_data['recipient'] = $user_recipients;
$this
->createQueueItem('activity_creator_activities', $activity_creator_data);
}
// Now create new queue item for activity_creator_logger if necessary.
if ($limit !== 0 && isset($last_uid) && count($recipients) >= $limit) {
$data['last_uid'] = $last_uid;
$data['status'] = 'processing';
$this
->createQueueItem('activity_creator_logger', $data);
}
}
else {
$activity_creator_data = [
'mid' => $data['mid'],
'message_template' => $data['message_template'],
'actor' => $data['actor'],
// Not necessary?
'context' => $data['context'],
'destination' => $data['destination'],
'related_object' => $data['related_object'],
];
$this
->createQueueItem('activity_creator_activities', $activity_creator_data);
}
}