You are here

public function EntityReference::trackOnEntityDeletion in Entity Usage 8

Track usage updates on the deletion of entities.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity we are dealing with.

Overrides EntityUsageTrackBase::trackOnEntityDeletion

File

src/Plugin/EntityUsage/Track/EntityReference.php, line 159

Class

EntityReference
Tracks usage of entities related in entity_reference fields.

Namespace

Drupal\entity_usage\Plugin\EntityUsage\Track

Code

public function trackOnEntityDeletion(ContentEntityInterface $entity) {
  $translations = [];

  // When deleting the main (untranslated) entity, loop over all translations
  // as well to release referenced entities there too.
  if ($entity === $entity
    ->getUntranslated()) {
    $languages = $entity
      ->getTranslationLanguages();
    foreach ($languages as $langcode => $language) {
      if (!$entity
        ->hasTranslation($langcode)) {
        continue;
      }
      $translations[] = $entity
        ->getTranslation($langcode);
    }
  }
  else {

    // Otherwise, this is a single translation being deleted, so we just need
    // to release usage reflected here.
    $translations = [
      $entity,
    ];
  }
  foreach ($this
    ->entityReferenceFieldsAvailable($entity) as $field_name) {
    foreach ($translations as $translation) {
      if (!$translation->{$field_name}
        ->isEmpty()) {

        /** @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $field_item */
        foreach ($translation->{$field_name} as $field_item) {

          // This item got deleted. Track the usage down.
          $this
            ->decrementEntityReferenceUsage($entity, $field_name, $field_item->target_id);
        }
      }
    }
  }
}