EntityOperations::updateOrCreateFromEntity

protected EntityOperations::updateOrCreateFromEntity(EntityInterface $entity)

Creates or updates the moderation state of an entity.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity to update or create a moderation state for.

File

core/modules/content_moderation/src/EntityOperations.php, line 142

Class

EntityOperations
Defines a class for reacting to entity events.

Namespace

Drupal\content_moderation

Code

protected function updateOrCreateFromEntity(EntityInterface $entity) {
  $moderation_state = $entity->moderation_state->target_id;
  /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
  if (!$moderation_state) {
    $moderation_state = $this->entityTypeManager
      ->getStorage($entity->getEntityType()->getBundleEntityType())->load($entity->bundle())
      ->getThirdPartySetting('content_moderation', 'default_moderation_state');
  }

  // @todo what if $entity->moderation_state->target_id is null at this point?
  $entity_type_id = $entity->getEntityTypeId();
  $entity_id = $entity->id();
  $entity_revision_id = $entity->getRevisionId();
  $entity_langcode = $entity->language()->getId();

  $storage = $this->entityTypeManager->getStorage('content_moderation_state');
  $entities = $storage->loadByProperties([
    'content_entity_type_id' => $entity_type_id,
    'content_entity_id' => $entity_id,
  ]);

  /** @var \Drupal\content_moderation\ContentModerationStateInterface $content_moderation_state */
  $content_moderation_state = reset($entities);
  if (!($content_moderation_state instanceof ContentModerationStateInterface)) {
    $content_moderation_state = $storage->create([
      'content_entity_type_id' => $entity_type_id,
      'content_entity_id' => $entity_id,
    ]);
  }
  else {
    // Create a new revision.
    $content_moderation_state->setNewRevision(TRUE);
  }

  // Sync translations.
  if (!$content_moderation_state->hasTranslation($entity_langcode)) {
    $content_moderation_state->addTranslation($entity_langcode);
  }
  if ($content_moderation_state->language()->getId() !== $entity_langcode) {
    $content_moderation_state = $content_moderation_state->getTranslation($entity_langcode);
  }

  // Create the ContentModerationState entity for the inserted entity.
  $content_moderation_state->set('content_entity_revision_id', $entity_revision_id);
  $content_moderation_state->set('moderation_state', $moderation_state);
  ContentModerationState::updateOrCreateFromEntity($content_moderation_state);
}
doc_Drupal
2016-10-29 09:07:17
Comments
Leave a Comment

Please login to continue.