public function ContentEntityBase::hasTranslationChanges in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Entity/ContentEntityBase.php \Drupal\Core\Entity\ContentEntityBase::hasTranslationChanges()
Determines if the current translation of the entity has unsaved changes.
If the entity is translatable only translatable fields will be checked for changes.
Return value
bool TRUE if the current translation of the entity has changes.
Overrides ContentEntityInterface::hasTranslationChanges
File
- core/
lib/ Drupal/ Core/ Entity/ ContentEntityBase.php, line 1127 - Contains \Drupal\Core\Entity\ContentEntityBase.
Class
- ContentEntityBase
- Implements Entity Field API specific enhancements to the Entity class.
Namespace
Drupal\Core\EntityCode
public function hasTranslationChanges() {
if ($this
->isNew()) {
return TRUE;
}
// $this->original only exists during save. See
// \Drupal\Core\Entity\EntityStorageBase::save(). If it exists we re-use it
// here for performance reasons.
/** @var \Drupal\Core\Entity\ContentEntityBase $original */
$original = $this->original ? $this->original : NULL;
if (!$original) {
$id = $this
->getOriginalId() !== NULL ? $this
->getOriginalId() : $this
->id();
$original = $this
->entityManager()
->getStorage($this
->getEntityTypeId())
->loadUnchanged($id);
}
// If the current translation has just been added, we have a change.
$translated = count($this->translations) > 1;
if ($translated && !$original
->hasTranslation($this->activeLangcode)) {
return TRUE;
}
// Compare field item current values with the original ones to determine
// whether we have changes. If a field is not translatable and the entity is
// translated we skip it because, depending on the use case, it would make
// sense to mark all translations as changed or none of them. We skip also
// computed fields as comparing them with their original values might not be
// possible or be meaningless.
/** @var \Drupal\Core\Entity\ContentEntityBase $translation */
$translation = $original
->getTranslation($this->activeLangcode);
foreach ($this
->getFieldDefinitions() as $field_name => $definition) {
// @todo Avoid special-casing the following fields. See
// https://www.drupal.org/node/2329253.
if ($field_name == 'revision_translation_affected' || $field_name == 'revision_id') {
continue;
}
if (!$definition
->isComputed() && (!$translated || $definition
->isTranslatable())) {
$items = $this
->get($field_name)
->filterEmptyItems();
$original_items = $translation
->get($field_name)
->filterEmptyItems();
if (!$items
->equals($original_items)) {
return TRUE;
}
}
}
return FALSE;
}