You are here

public function ContextUpload::processItem in TMGMT Translator Smartling 8.4

Same name and namespace in other branches
  1. 8 src/Plugin/QueueWorker/ContextUpload.php \Drupal\tmgmt_smartling\Plugin\QueueWorker\ContextUpload::processItem()
  2. 8.2 src/Plugin/QueueWorker/ContextUpload.php \Drupal\tmgmt_smartling\Plugin\QueueWorker\ContextUpload::processItem()
  3. 8.3 src/Plugin/QueueWorker/ContextUpload.php \Drupal\tmgmt_smartling\Plugin\QueueWorker\ContextUpload::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

src/Plugin/QueueWorker/ContextUpload.php, line 98

Class

ContextUpload
Executes interface translation queue tasks.

Namespace

Drupal\tmgmt_smartling\Plugin\QueueWorker

Code

public function processItem($data) {
  if (!$data['job_id']) {
    return;
  }
  $job_id = $data['job_id'];
  $url = $data['url'];
  $filename = $data['filename'];
  $job = \Drupal::entityTypeManager()
    ->getStorage('tmgmt_job')
    ->load($job_id);

  //$date = $data['upload_date'];
  if ($job && $job
    ->hasTranslator()) {
    $settings = $job
      ->getTranslator()
      ->getSettings();
  }
  else {
    $this->logger
      ->warning("Job with ID=@id has no translator plugin.", [
      '@id' => $job_id,
    ]);
    return;
  }

  // Method 'isReadyAcceptContext' will return FALSE in case there is no
  // some/all required credentials. In this case we will re-add item into the
  // queue. We have to prevent this because we need to re-add item only in
  // case when Smartling is still processing uploaded file and isn't ready to
  // accept the context. This is the corner case which is rarely reproducable.
  if (empty($settings['user_id']) || empty($settings['project_id']) || empty($settings['token_secret'])) {
    $this->logger
      ->warning('Skipping uploading context for the job with id = @id because credentials are not correct.', [
      '@id' => $job_id,
    ]);
    return;
  }
  if (!$this->contextUploader
    ->isReadyAcceptContext($filename, $settings)) {
    $data['counter'] = isset($data['counter']) ? $data['counter'] + 1 : 1;
    $this->queue
      ->createItem($data);
    return;
  }
  try {
    $this->contextUploader
      ->upload($url, $filename, $settings);
  } catch (\Exception $e) {
    $this->logger
      ->error($e
      ->getMessage());
    return [];
  }
}