entity_hierarchy-8.x-2.24/src/Plugin/Field/FieldType/EntityReferenceHierarchyFieldItemList.php
src/Plugin/Field/FieldType/EntityReferenceHierarchyFieldItemList.php
<?php namespace Drupal\entity_hierarchy\Plugin\Field\FieldType; use Drupal\Core\Field\EntityReferenceFieldItemList; use Drupal\entity_hierarchy\Storage\TreeLockTrait; /** * Defines a field item list for entity reference with hierarchy. */ class EntityReferenceHierarchyFieldItemList extends EntityReferenceFieldItemList { use TreeLockTrait; /** * {@inheritdoc} */ public function postSave($update) { // The values are now empty. if (empty($this->list)) { // If this node was in the tree, it needs to be moved to a root node. $stubNode = $this->getNestedSetNodeFactory()->fromEntity($this->getEntity()); $storage = $this->getTreeStorage(); if (($existingNode = $storage->getNode($stubNode)) && $existingNode->getDepth() > 0) { $fieldDefinition = $this->getFieldDefinition(); $fieldName = $fieldDefinition->getName(); $entityTypeId = $fieldDefinition->getTargetEntityTypeId(); $this->lockTree($fieldName, $entityTypeId); $storage->moveSubTreeToRoot($existingNode); $this->releaseLock($fieldName, $entityTypeId); } } return parent::postSave($update); } /** * Returns the node factory. * * @return \Drupal\entity_hierarchy\Storage\NestedSetNodeKeyFactory * The factory. */ protected function getNestedSetNodeFactory() { return \Drupal::service('entity_hierarchy.nested_set_node_factory'); } /** * Returns the tree storage. * * @return \PNX\NestedSet\NestedSetInterface * Tree storage. */ protected function getTreeStorage() { $fieldDefinition = $this->getFieldDefinition(); return \Drupal::service('entity_hierarchy.nested_set_storage_factory')->get($fieldDefinition->getName(), $fieldDefinition->getTargetEntityTypeId()); } /** * {@inheritdoc} */ public function getConstraints() { $constraints = parent::getConstraints(); $constraint_manager = $this->getTypedDataManager()->getValidationConstraintManager(); $constraints[] = $constraint_manager->create('ValidHierarchyReference', []); return $constraints; } }