entity_hierarchy-8.x-2.24/src/Storage/ParentEntityRevisionUpdater.php

src/Storage/ParentEntityRevisionUpdater.php
<?php

namespace Drupal\entity_hierarchy\Storage;

use Drupal\Core\Entity\ContentEntityInterface;

/**
 * Defines a class for handling a parent entity is updated to a new revision.
 */
class ParentEntityRevisionUpdater extends ParentEntityReactionBase {

  /**
   * Move children from old revision to new revision.
   *
   * @param \Drupal\Core\Entity\ContentEntityInterface $oldRevision
   *   Old revision.
   * @param \Drupal\Core\Entity\ContentEntityInterface $newRevision
   *   New revision.
   */
  public function moveChildren(ContentEntityInterface $oldRevision, ContentEntityInterface $newRevision) {
    if (!$newRevision->isDefaultRevision()) {
      // We don't move children to a non-default revision.
      return;
    }
    if ($newRevision->getRevisionId() == $oldRevision->getRevisionId()) {
      // We don't move anything if the revision isn't changing.
      return;
    }
    if (!$fields = $this->parentCandidate->getCandidateFields($newRevision)) {
      // There are no fields that could point to this entity.
      return;
    }
    $oldNodeKey = $this->nodeKeyFactory->fromEntity($oldRevision);
    $newNodeKey = $this->nodeKeyFactory->fromEntity($newRevision);
    foreach ($fields as $field_name) {
      $this->lockTree($field_name, $newRevision->getEntityTypeId());
      /** @var \Pnx\NestedSet\NestedSetInterface $storage */
      $storage = $this->nestedSetStorageFactory->get($field_name, $newRevision->getEntityTypeId());
      if (!$newParent = $storage->getNode($newNodeKey)) {
        $newParent = $storage->addRootNode($newNodeKey);
      }
      if ($storage->findChildren($oldNodeKey)) {
        $storage->adoptChildren($storage->getNode($oldNodeKey), $newParent);
      }
      $this->releaseLock($field_name, $newRevision->getEntityTypeId());
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc