You are here

public function FileLinkMetadataUpdate::processItem in File Link 2.0.x

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/FileLinkMetadataUpdate.php, line 69

Class

FileLinkMetadataUpdate
Defines 'file_link_metadata_update' queue worker.

Namespace

Drupal\file_link\Plugin\QueueWorker

Code

public function processItem($data) {
  if ($data instanceof FileLinkQueueItem) {
    $storage = $this->entityTypeManager
      ->getStorage($data
      ->getType());

    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    if ($data
      ->getRevisionId() !== NULL) {
      $entity = $storage
        ->loadRevision($data
        ->getRevisionId());
    }
    else {
      $entity = $storage
        ->load($data
        ->getId());
    }
    if ($entity === NULL) {

      // The entity must have been removed.
      return;
    }
    if ($entity
      ->hasTranslation($data
      ->getLang())) {
      $entity = $entity
        ->getTranslation($data
        ->getLang());
    }

    // Do not create a revision but re-save the revision.
    if ($entity
      ->getEntityType()
      ->isRevisionable()) {
      $entity
        ->setNewRevision(FALSE);
    }
    if ($entity instanceof EntityChangedInterface) {
      if ($entity
        ->getChangedTime() > $data
        ->getTime()) {

        // The entity has been changed since.
        return;
      }

      // Do not update the changed time here.
      $entity
        ->setChangedTime($entity
        ->getChangedTime());
    }

    // Set the static property to be processing.
    static::$processing++;
    try {
      $entity
        ->save();
    } catch (\Exception $exception) {

      // Decrease the counter and re-throw the exception.
      static::$processing--;
      throw $exception;
    }
    static::$processing--;
  }
}