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\TrackCode
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);
}
}
}
}
}