Chris@0: definition->getPropertyDefinitions() as $name => $definition) { Chris@0: if ($definition->isComputed()) { Chris@0: $this->properties[$name] = \Drupal::typedDataManager()->getPropertyInstance($this, $name); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getEntity() { Chris@0: return $this->getParent()->getEntity(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getLangcode() { Chris@0: return $this->getParent()->getLangcode(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getFieldDefinition() { Chris@0: return $this->definition->getFieldDefinition(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the array of field settings. Chris@0: * Chris@0: * @return array Chris@0: * The array of settings. Chris@0: */ Chris@0: protected function getSettings() { Chris@0: return $this->getFieldDefinition()->getSettings(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the value of a field setting. Chris@0: * Chris@0: * @param string $setting_name Chris@0: * The setting name. Chris@0: * Chris@0: * @return mixed Chris@0: * The setting value. Chris@0: */ Chris@0: protected function getSetting($setting_name) { Chris@0: return $this->getFieldDefinition()->getSetting($setting_name); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setValue($values, $notify = TRUE) { Chris@0: // Treat the values as property value of the first property, if no array is Chris@0: // given. Chris@0: if (isset($values) && !is_array($values)) { Chris@0: $keys = array_keys($this->definition->getPropertyDefinitions()); Chris@0: $values = [$keys[0] => $values]; Chris@0: } Chris@0: parent::setValue($values, $notify); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * Different to the parent Map class, we avoid creating property objects as Chris@0: * far as possible in order to optimize performance. Thus we just update Chris@0: * $this->values if no property object has been created yet. Chris@0: */ Chris@0: protected function writePropertyValue($property_name, $value) { Chris@0: // For defined properties there is either a property object or a plain Chris@0: // value that needs to be updated. Chris@0: if (isset($this->properties[$property_name])) { Chris@0: $this->properties[$property_name]->setValue($value, FALSE); Chris@0: } Chris@0: // Allow setting plain values for not-defined properties also. Chris@0: else { Chris@0: $this->values[$property_name] = $value; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __get($name) { Chris@0: // There is either a property object or a plain value - possibly for a Chris@0: // not-defined property. If we have a plain value, directly return it. Chris@0: if (isset($this->properties[$name])) { Chris@0: return $this->properties[$name]->getValue(); Chris@0: } Chris@0: elseif (isset($this->values[$name])) { Chris@0: return $this->values[$name]; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __set($name, $value) { Chris@0: // Support setting values via property objects, but take care in as the Chris@0: // value of the 'entity' property is typed data also. Chris@0: if ($value instanceof TypedDataInterface && !($value instanceof EntityInterface)) { Chris@0: $value = $value->getValue(); Chris@0: } Chris@0: $this->set($name, $value); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __isset($name) { Chris@0: if (isset($this->properties[$name])) { Chris@0: return $this->properties[$name]->getValue() !== NULL; Chris@0: } Chris@0: return isset($this->values[$name]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __unset($name) { Chris@0: if ($this->definition->getPropertyDefinition($name)) { Chris@0: $this->set($name, NULL); Chris@0: } Chris@0: else { Chris@0: // Explicitly unset the property in $this->values if a non-defined Chris@0: // property is unset, such that its key is removed from $this->values. Chris@0: unset($this->values[$name]); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function view($display_options = []) { Chris@0: $view_builder = \Drupal::entityManager()->getViewBuilder($this->getEntity()->getEntityTypeId()); Chris@0: return $view_builder->viewFieldItem($this, $display_options); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function preSave() {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function postSave($update) {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function delete() {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function generateSampleValue(FieldDefinitionInterface $field_definition) {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function deleteRevision() {} Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) { Chris@0: return []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function fieldSettingsForm(array $form, FormStateInterface $form_state) { Chris@0: return []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function storageSettingsToConfigData(array $settings) { Chris@0: return $settings; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function storageSettingsFromConfigData(array $settings) { Chris@0: return $settings; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function fieldSettingsToConfigData(array $settings) { Chris@0: return $settings; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function fieldSettingsFromConfigData(array $settings) { Chris@0: return $settings; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function calculateDependencies(FieldDefinitionInterface $field_definition) { Chris@0: return []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function calculateStorageDependencies(FieldStorageDefinitionInterface $field_definition) { Chris@0: return []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function onDependencyRemoval(FieldDefinitionInterface $field_definition, array $dependencies) { Chris@0: return FALSE; Chris@0: } Chris@0: Chris@0: }