You are here

public function EntityReferenceRevisionsFieldItemList::hasAffectingChanges in Entity Reference Revisions 8

Determines whether the field has relevant changes.

This is for example used to determine if a revision of an entity has changes in a given translation. Unlike \Drupal\Core\Field\FieldItemListInterface::equals(), this can report that for example an untranslatable field, despite being changed and therefore technically affecting all translations, is only internal metadata or only affects a single translation.

Parameters

\Drupal\Core\Field\FieldItemListInterface $original_items: The original field items to compare against.

string $langcode: The language that should be checked.

Return value

bool TRUE if the field has relevant changes, FALSE if not.

Overrides FieldItemList::hasAffectingChanges

File

src/EntityReferenceRevisionsFieldItemList.php, line 130

Class

EntityReferenceRevisionsFieldItemList
Defines a item list class for entity reference fields.

Namespace

Drupal\entity_reference_revisions

Code

public function hasAffectingChanges(FieldItemListInterface $original_items, $langcode) {

  // If there are fewer items, then it is a change.
  if (count($this) < count($original_items)) {
    return TRUE;
  }
  foreach ($this as $delta => $item) {

    // If this is a different entity, then it is an affecting change.
    if (!$original_items
      ->offsetExists($delta) || $item->target_id != $original_items[$delta]->target_id) {
      return TRUE;
    }

    // If it is the same entity, only consider it as having affecting changes
    // if the target entity itself has changes.
    if ($item->entity && $item->entity
      ->hasTranslation($langcode) && $item->entity
      ->getTranslation($langcode)
      ->hasTranslationChanges()) {
      return TRUE;
    }
  }
  return FALSE;
}