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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.