You are here

public function LocaleTranslation::processItem in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php \Drupal\locale\Plugin\QueueWorker\LocaleTranslation::processItem()
  2. 10 core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php \Drupal\locale\Plugin\QueueWorker\LocaleTranslation::processItem()

The translation update functions executed here are batch operations which are also used in translation update batches. The batch functions may need to be executed multiple times to complete their task, typically this is the translation import function. When a batch function is not finished, a new queue task is created and added to the end of the queue. The batch context data is needed to continue the batch task is stored in the queue with the queue data.

Overrides QueueWorkerInterface::processItem

File

core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php, line 81

Class

LocaleTranslation
Executes interface translation queue tasks.

Namespace

Drupal\locale\Plugin\QueueWorker

Code

public function processItem($data) {
  $this->moduleHandler
    ->loadInclude('locale', 'batch.inc');
  list($function, $args) = $data;

  // We execute batch operation functions here to check, download and import
  // the translation files. Batch functions use a context variable as last
  // argument which is passed by reference. When a batch operation is called
  // for the first time a default batch context is created. When called
  // iterative (usually the batch import function) the batch context is passed
  // through via the queue and is part of the $data.
  $last = count($args) - 1;
  if (!is_array($args[$last]) || !isset($args[$last]['finished'])) {
    $batch_context = [
      'sandbox' => [],
      'results' => [],
      'finished' => 1,
      'message' => '',
    ];
  }
  else {
    $batch_context = $args[$last];
    unset($args[$last]);
  }
  $args = array_merge($args, [
    &$batch_context,
  ]);

  // Call the batch operation function.
  call_user_func_array($function, $args);

  // If the batch operation is not finished we create a new queue task to
  // continue the task. This is typically the translation import task.
  if ($batch_context['finished'] < 1) {
    unset($batch_context['strings']);
    $this->queue
      ->createItem([
      $function,
      $args,
    ]);
  }
}