getDataType(), 7); } /** * {@inheritdoc} */ protected function getConstraintObjects() { if (!$this->getConstraint('EntityType')) { $this->addConstraint('EntityType', [ 'type' => $this->getEntityTypeId(), ]); } return parent::getConstraintObjects(); } /** * {@inheritdoc} */ protected function getSampleValues() { // Get the constraints from the context's definition. $constraints = $this->getConstraintObjects(); $entity_type_manager = \Drupal::entityTypeManager(); $entity_type_id = $this->getEntityTypeId(); $entity_type = $entity_type_manager->getDefinition($entity_type_id); $storage = $entity_type_manager->getStorage($entity_type_id); // If the storage can generate a sample entity we might delegate to that. if ($storage instanceof ContentEntityStorageInterface) { if (!empty($constraints['Bundle']) && $constraints['Bundle'] instanceof BundleConstraint) { foreach ($constraints['Bundle']->getBundleOption() as $bundle) { // We have a bundle, we are bundleable and we can generate a sample. $values = [$entity_type->getKey('bundle') => $bundle]; yield EntityAdapter::createFromEntity($storage->create($values)); } return; } } // Either no bundle, or not bundleable, so generate an entity adapter. $definition = EntityDataDefinition::create($entity_type_id); yield new EntityAdapter($definition); } /** * Creates a context definition from a given entity type ID. * * @param string $entity_type_id * The entity type ID from which to derive a context definition. * * @return static */ public static function fromEntityTypeId($entity_type_id) { $entity_type = \Drupal::entityTypeManager()->getDefinition($entity_type_id); return static::fromEntityType($entity_type); } /** * Creates a context definition from a given entity type. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type from which to derive a context definition. * * @return static */ public static function fromEntityType(EntityTypeInterface $entity_type) { return new static('entity:' . $entity_type->id(), $entity_type->getLabel()); } /** * Creates a context definition from a given entity object. * * @param \Drupal\Core\Entity\EntityInterface $entity * The entity from which to derive a context definition. * * @return static */ public static function fromEntity(EntityInterface $entity) { return static::fromEntityType($entity->getEntityType()); } }