You are here

public function ActivityWorkerLogger::processItem in Open Social 8

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

Code

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)) {
    foreach ($recipients as $recipient) {

      // Create a queue item for activity creation.
      $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'],
        'recipient' => $recipient,
      ];
      $this
        ->createQueueItem('activity_creator_activities', $activity_creator_data);
      $last_uid = $recipient;
    }

    // Now create new queue item for activity_creator_logger if necessary.
    if ($limit != 0 && count($recipients) >= $limit && isset($last_uid)) {
      $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);
  }
}