function ContentTranslationDeleteAccess::checkAccess

Same name in other branches
  1. 9 core/modules/content_translation/src/Access/ContentTranslationDeleteAccess.php \Drupal\content_translation\Access\ContentTranslationDeleteAccess::checkAccess()
  2. 10 core/modules/content_translation/src/Access/ContentTranslationDeleteAccess.php \Drupal\content_translation\Access\ContentTranslationDeleteAccess::checkAccess()
  3. 11.x core/modules/content_translation/src/Access/ContentTranslationDeleteAccess.php \Drupal\content_translation\Access\ContentTranslationDeleteAccess::checkAccess()

Checks access to translation deletion for the specified entity.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity translation to be deleted.

Return value

\Drupal\Core\Access\AccessResultInterface The access result.

1 call to ContentTranslationDeleteAccess::checkAccess()
ContentTranslationDeleteAccess::access in core/modules/content_translation/src/Access/ContentTranslationDeleteAccess.php
Checks access to translation deletion for the specified route match.

File

core/modules/content_translation/src/Access/ContentTranslationDeleteAccess.php, line 81

Class

ContentTranslationDeleteAccess
Access check for entity translation deletion.

Namespace

Drupal\content_translation\Access

Code

public function checkAccess(ContentEntityInterface $entity) {
    $result = AccessResult::allowed();
    $entity_type_id = $entity->getEntityTypeId();
    $result->addCacheableDependency($entity);
    // Add the cache dependencies used by
    // ContentTranslationManager::isPendingRevisionSupportEnabled().
    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
        foreach (Workflow::loadMultipleByType('content_moderation') as $workflow) {
            $result->addCacheableDependency($workflow);
        }
    }
    if (!ContentTranslationManager::isPendingRevisionSupportEnabled($entity_type_id, $entity->bundle())) {
        return $result;
    }
    if ($entity->isDefaultTranslation()) {
        return $result;
    }
    $config = ContentLanguageSettings::load($entity_type_id . '.' . $entity->bundle());
    $result->addCacheableDependency($config);
    if (!$this->contentTranslationManager
        ->isEnabled($entity_type_id, $entity->bundle())) {
        return $result;
    }
    
    /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
    $storage = $this->entityTypeManager
        ->getStorage($entity_type_id);
    $revision_id = $storage->getLatestTranslationAffectedRevisionId($entity->id(), $entity->language()
        ->getId());
    if (!$revision_id) {
        return $result;
    }
    
    /** @var \Drupal\Core\Entity\ContentEntityInterface $revision */
    $revision = $storage->loadRevision($revision_id);
    if ($revision->wasDefaultRevision()) {
        return $result;
    }
    $result = $result->andIf(AccessResult::forbidden());
    return $result;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.