diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php index a8fc193..7d53cb9 100644 --- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php @@ -10,6 +10,7 @@ use Drupal\Core\Entity\Plugin\DataType\EntityReference; use Drupal\Core\Language\Language; use Drupal\Core\Session\AccountInterface; +use Drupal\Core\TypedData\DataDefinition; use Drupal\Core\TypedData\TypedDataInterface; /** @@ -226,7 +227,7 @@ public function getDefinition() { else { $type = 'entity:' . $this->entityType(); } - return array('type' => $type); + return DataDefinition::create($type); } /** diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php index 570ca21..ed359f6 100644 --- a/core/lib/Drupal/Core/Entity/EntityManager.php +++ b/core/lib/Drupal/Core/Entity/EntityManager.php @@ -353,13 +353,9 @@ public function getFieldDefinitions($entity_type, $bundle = NULL) { $result = $this->moduleHandler->invokeAll('entity_field_info', array($entity_type)); $this->entityFieldInfo[$entity_type] = NestedArray::mergeDeep($this->entityFieldInfo[$entity_type], $result); - // Enforce field definitions to be objects. + // Automatically set the field name for non-configurable fields. foreach (array('definitions', 'optional') as $key) { foreach ($this->entityFieldInfo[$entity_type][$key] as $field_name => &$definition) { - if (is_array($definition)) { - $definition = FieldDefinition::createFromOldStyleDefinition($definition); - } - // Automatically set the field name for non-configurable fields. if ($definition instanceof FieldDefinition) { $definition->setFieldName($field_name); } diff --git a/core/lib/Drupal/Core/Field/FieldItemBase.php b/core/lib/Drupal/Core/Field/FieldItemBase.php index b1ea599..c329ed6 100644 --- a/core/lib/Drupal/Core/Field/FieldItemBase.php +++ b/core/lib/Drupal/Core/Field/FieldItemBase.php @@ -197,9 +197,9 @@ public function getConstraints() { $constraints = parent::getConstraints(); // If property constraints are present add in a ComplexData constraint for // applying them. - if (!empty($this->definition['property_constraints'])) { + if ($property_constraints = $this->definition->getConstraints()) { $constraints[] = \Drupal::typedData()->getValidationConstraintManager() - ->create('ComplexData', $this->definition['property_constraints']); + ->create('ComplexData', $property_constraints); } return $constraints; } diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php index 23f9701..c1be221 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php @@ -8,6 +8,7 @@ namespace Drupal\Core\Field\Plugin\Field\FieldType; use Drupal\Core\Field\FieldItemBase; +use Drupal\Core\TypedData\DataDefinition; /** * Defines the 'uri' entity field type. @@ -34,13 +35,11 @@ class UriItem extends FieldItemBase { * Implements ComplexDataInterface::getPropertyDefinitions(). */ public function getPropertyDefinitions() { - if (!isset(self::$propertyDefinitions)) { - self::$propertyDefinitions['value'] = array( - 'type' => 'uri', - 'label' => t('URI value'), - ); + self::$propertyDefinitions['value'] = DataDefinition::create('uri') + ->setLabel(t('URI value')); } return self::$propertyDefinitions; } + } diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php index 3f90b5a..f3acbd3 100644 --- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php +++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php @@ -9,6 +9,7 @@ use Drupal\Core\TypedData\Annotation\DataType; use Drupal\Core\Annotation\Translation; +use Drupal\Core\TypedData\DataDefinition; use Drupal\Core\TypedData\TypedData; use Drupal\Core\TypedData\ComplexDataInterface; @@ -49,9 +50,7 @@ class Map extends TypedData implements \IteratorAggregate, ComplexDataInterface public function getPropertyDefinitions() { $definitions = array(); foreach ($this->values as $name => $value) { - $definitions[$name] = array( - 'type' => 'any', - ); + $definitions[$name] = DataDefinition::create('any'); } return $definitions; } @@ -150,7 +149,7 @@ public function set($property_name, $value, $notify = TRUE) { public function getProperties($include_computed = FALSE) { $properties = array(); foreach ($this->getPropertyDefinitions() as $name => $definition) { - if ($include_computed || empty($definition['computed'])) { + if ($include_computed || !$definition->isComputed()) { $properties[$name] = $this->get($name); } } diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php index 27617fd..8205ea1 100644 --- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php +++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php @@ -188,9 +188,9 @@ public function getInstance(array $options) { */ public function getPropertyInstance(TypedDataInterface $object, $property_name, $value = NULL) { $definition = $object->getRoot()->getDefinition(); - $key = $definition['type']; - if (isset($definition['settings'])) { - $key .= ':' . implode(',', $definition['settings']); + $key = $definition->getDataType(); + if ($settings = $definition->getSettings()) { + $key .= ':' . implode(',', $settings); } $key .= ':' . $object->getPropertyPath() . '.'; // If we are creating list items, we always use 0 in the key as all list diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module index 89ab1d0..12800b1 100644 --- a/core/modules/node/tests/modules/node_access_test/node_access_test.module +++ b/core/modules/node/tests/modules/node_access_test/node_access_test.module @@ -85,8 +85,7 @@ function node_access_test_entity_field_info($entity_type) { if ($entity_type === 'node') { $info['definitions']['private'] = FieldDefinition::create('boolean') ->setLabel(t('Private')) - ->setComputed(TRUE) - ->isList(TRUE); + ->setComputed(TRUE); return $info; } diff --git a/core/modules/path/path.module b/core/modules/path/path.module index 9cefaea..e638eb9 100644 --- a/core/modules/path/path.module +++ b/core/modules/path/path.module @@ -214,8 +214,7 @@ function path_entity_field_info($entity_type) { if ($entity_type === 'taxonomy_term' || $entity_type === 'node') { $info['definitions']['path'] = FieldDefinition::create('path') ->setLabel(t('The path alias')) - ->setComputed(TRUE) - ->isList(TRUE); + ->setComputed(TRUE); return $info; } diff --git a/core/modules/system/lib/Drupal/system/Tests/TypedData/TypedDataTest.php b/core/modules/system/lib/Drupal/system/Tests/TypedData/TypedDataTest.php index 23f8b76..1408b47 100644 --- a/core/modules/system/lib/Drupal/system/Tests/TypedData/TypedDataTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/TypedData/TypedDataTest.php @@ -53,7 +53,9 @@ public function setUp() { * @see \Drupal\Core\TypedData\TypedDataManager::create(). */ protected function createTypedData($definition, $value = NULL, $name = NULL) { - $definition = DataDefinition::create($definition['type']); + if (is_array($definition)) { + $definition = DataDefinition::create($definition['type']); + } $data = $this->typedData->create($definition, $value, $name); $this->assertTrue($data instanceof \Drupal\Core\TypedData\TypedDataInterface, 'Typed data object is an instance of the typed data interface.'); return $data; @@ -423,7 +425,7 @@ public function testTypedDataMaps() { // Test retrieving metadata. $this->assertEqual(array_keys($typed_data->getPropertyDefinitions()), array_keys($value)); $definition = $typed_data->getPropertyDefinition('one'); - $this->assertEqual($definition['type'], 'any'); + $this->assertEqual($definition->getDataType(), 'any'); $this->assertFalse($typed_data->getPropertyDefinition('invalid')); // Test getting and setting properties. @@ -494,19 +496,17 @@ public function testTypedDataMaps() { $typed_data->set('zero', 'null'); $this->assertEqual($typed_data->get('zero')->getValue(), 'null'); $definition = $typed_data->getPropertyDefinition('zero'); - $this->assertEqual($definition['type'], 'any', 'Definition for a new map entry returned.'); + $this->assertEqual($definition->getDataType(), 'any', 'Definition for a new map entry returned.'); } /** * Tests typed data validation. */ public function testTypedDataValidation() { - $definition = array( - 'type' => 'integer', - 'constraints' => array( + $definition = DataDefinition::create('integer') + ->setConstraints(array( 'Range' => array('min' => 5), - ), - ); + )); $violations = $this->typedData->create($definition, 10)->validate(); $this->assertEqual($violations->count(), 0); @@ -521,25 +521,21 @@ public function testTypedDataValidation() { $this->assertIdentical($violations[0]->getRoot(), $integer, 'Root object returned.'); // Test translating violation messages when pluralization is used. - $definition = array( - 'type' => 'string', - 'constraints' => array( + $definition = DataDefinition::create('string') + ->setConstraints(array( 'Length' => array('min' => 10), - ), - ); + )); $violations = $this->typedData->create($definition, "short")->validate(); $this->assertEqual($violations->count(), 1); $message = t('This value is too short. It should have %limit characters or more.', array('%limit' => 10)); $this->assertEqual($violations[0]->getMessage(), $message, 'Translated violation message retrieved.'); // Test having multiple violations. - $definition = array( - 'type' => 'integer', - 'constraints' => array( + $definition = DataDefinition::create('integer') + ->setConstraints(array( 'Range' => array('min' => 5), 'Null' => array(), - ), - ); + )); $violations = $this->typedData->create($definition, 10)->validate(); $this->assertEqual($violations->count(), 1); $violations = $this->typedData->create($definition, 1)->validate(); @@ -585,10 +581,8 @@ public function testTypedDataValidation() { $this->assertTrue(isset($definitions['NotNull']), 'Constraint plugin found for type string.'); // Test automatic 'required' validation. - $definition = array( - 'type' => 'integer', - 'required' => TRUE, - ); + $definition = DataDefinition::create('integer') + ->setRequired(TRUE); $violations = $this->typedData->create($definition)->validate(); $this->assertEqual($violations->count(), 1); $violations = $this->typedData->create($definition, 0)->validate(); @@ -596,8 +590,7 @@ public function testTypedDataValidation() { // Test validating a list of a values and make sure property paths starting // with "0" are created. - $definition = FieldDefinition::create('integer') - ->isList(TRUE); + $definition = FieldDefinition::create('integer'); $violations = $this->typedData->create($definition, array(array('value' => 10)))->validate(); $this->assertEqual($violations->count(), 0); $violations = $this->typedData->create($definition, array(array('value' => 'string')))->validate(); diff --git a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldType/TextWithSummaryItem.php b/core/modules/text/lib/Drupal/text/Plugin/Field/FieldType/TextWithSummaryItem.php index 0d3c138..08525d1 100644 --- a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldType/TextWithSummaryItem.php +++ b/core/modules/text/lib/Drupal/text/Plugin/Field/FieldType/TextWithSummaryItem.php @@ -7,6 +7,7 @@ namespace Drupal\text\Plugin\Field\FieldType; +use Drupal\Core\TypedData\DataDefinition; use Drupal\field\FieldInterface; /** @@ -40,20 +41,17 @@ public function getPropertyDefinitions() { if (!isset(static::$propertyDefinitions)) { static::$propertyDefinitions = parent::getPropertyDefinitions(); - static::$propertyDefinitions['summary'] = array( - 'type' => 'string', - 'label' => t('Summary text value'), - ); - static::$propertyDefinitions['summary_processed'] = array( - 'type' => 'string', - 'label' => t('Processed summary text'), - 'description' => t('The summary text value with the text format applied.'), - 'computed' => TRUE, - 'class' => '\Drupal\text\TextProcessed', - 'settings' => array( + static::$propertyDefinitions['summary'] = DataDefinition::create('string') + ->setLabel(t('Summary text value')); + + static::$propertyDefinitions['summary_processed'] = DataDefinition::create('string') + ->setLabel(t('Processed summary text')) + ->setDescription(t('The summary text value with the text format applied.')) + ->setComputed(TRUE) + ->setClass('\Drupal\text\TextProcessed') + ->setSettings(array( 'text source' => 'summary', - ), - ); + )); } return static::$propertyDefinitions; }