You are here

protected function ContentEntityStorageBase::doPreSave in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::doPreSave()
  2. 10 core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::doPreSave()

Performs presave entity processing.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The saved entity.

Return value

int|string The processed entity identifier.

Throws

\Drupal\Core\Entity\EntityStorageException If the entity identifier is invalid.

Overrides EntityStorageBase::doPreSave

File

core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php, line 687

Class

ContentEntityStorageBase
Base class for content entity storage handlers.

Namespace

Drupal\Core\Entity

Code

protected function doPreSave(EntityInterface $entity) {

  /** @var \Drupal\Core\Entity\ContentEntityBase $entity */

  // Sync the changes made in the fields array to the internal values array.
  $entity
    ->updateOriginalValues();
  if ($entity
    ->getEntityType()
    ->isRevisionable() && !$entity
    ->isNew() && empty($entity
    ->getLoadedRevisionId())) {

    // Update the loaded revision id for rare special cases when no loaded
    // revision is given when updating an existing entity. This for example
    // happens when calling save() in hook_entity_insert().
    $entity
      ->updateLoadedRevisionId();
  }
  $id = parent::doPreSave($entity);
  if (!$entity
    ->isNew()) {

    // If the ID changed then original can't be loaded, throw an exception
    // in that case.
    if (empty($entity->original) || $entity
      ->id() != $entity->original
      ->id()) {
      throw new EntityStorageException("Update existing '{$this->entityTypeId}' entity while changing the ID is not supported.");
    }

    // Do not allow changing the revision ID when resaving the current
    // revision.
    if (!$entity
      ->isNewRevision() && $entity
      ->getRevisionId() != $entity
      ->getLoadedRevisionId()) {
      throw new EntityStorageException("Update existing '{$this->entityTypeId}' entity revision while changing the revision ID is not supported.");
    }
  }
  return $id;
}