function tmgmt_content_entity_access

Implements hook_entity_access().

File

sources/content/tmgmt_content.module, line 375
Source plugin for the Translation Management system that handles entities.

Code

function tmgmt_content_entity_access(\Drupal\Core\Entity\EntityInterface $entity, $operation, \Drupal\Core\Session\AccountInterface $account) {
  $result = AccessResult::neutral();
  $key = \Drupal::request()->query
    ->get('key');
  if ($entity instanceof ContentEntityInterface && $operation == 'view' && $key) {
    $entity = $entity
      ->getUntranslated();
    $source_langcode = $entity
      ->language()
      ->getId();
    $current_job_items = tmgmt_job_item_load_latest('content', $entity
      ->getEntityTypeId(), $entity
      ->id(), $source_langcode);

    /** @var \Drupal\tmgmt\JobItemInterface $job_item */
    if ($current_job_items) {
      foreach ($current_job_items as $job_item) {
        $valid_key = \Drupal::service('tmgmt_content.key_access')
          ->getKey($job_item);
        if ($key === $valid_key && \Drupal::config('tmgmt.settings')
          ->get('anonymous_access')) {
          $result = AccessResult::allowed();
        }
        $result
          ->addCacheableDependency($job_item);
      }
      $result
        ->addCacheableDependency(\Drupal::config('tmgmt.settings'));
    }
  }
  return $result
    ->addCacheContexts([
    'url.query_args:key',
  ]);
}