123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <?php
- namespace Drupal\Core\Field;
- use Drupal\Core\Entity\EntityInterface;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\Core\TypedData\DataDefinitionInterface;
- use Drupal\Core\TypedData\Plugin\DataType\Map;
- use Drupal\Core\TypedData\TypedDataInterface;
- /**
- * An entity field item.
- *
- * Entity field items making use of this base class have to implement
- * the static method propertyDefinitions().
- *
- * @see \Drupal\Core\Field\FieldItemInterface
- * @ingroup field_types
- */
- abstract class FieldItemBase extends Map implements FieldItemInterface {
- /**
- * {@inheritdoc}
- */
- public static function defaultStorageSettings() {
- return [];
- }
- /**
- * {@inheritdoc}
- */
- public static function defaultFieldSettings() {
- return [];
- }
- /**
- * {@inheritdoc}
- */
- public static function mainPropertyName() {
- return 'value';
- }
- /**
- * {@inheritdoc}
- */
- public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
- parent::__construct($definition, $name, $parent);
- // Initialize computed properties by default, such that they get cloned
- // with the whole item.
- foreach ($this->definition->getPropertyDefinitions() as $name => $definition) {
- if ($definition->isComputed()) {
- $this->properties[$name] = \Drupal::typedDataManager()->getPropertyInstance($this, $name);
- }
- }
- }
- /**
- * {@inheritdoc}
- */
- public function getEntity() {
- return $this->getParent()->getEntity();
- }
- /**
- * {@inheritdoc}
- */
- public function getLangcode() {
- return $this->getParent()->getLangcode();
- }
- /**
- * {@inheritdoc}
- */
- public function getFieldDefinition() {
- return $this->definition->getFieldDefinition();
- }
- /**
- * Returns the array of field settings.
- *
- * @return array
- * The array of settings.
- */
- protected function getSettings() {
- return $this->getFieldDefinition()->getSettings();
- }
- /**
- * Returns the value of a field setting.
- *
- * @param string $setting_name
- * The setting name.
- *
- * @return mixed
- * The setting value.
- */
- protected function getSetting($setting_name) {
- return $this->getFieldDefinition()->getSetting($setting_name);
- }
- /**
- * {@inheritdoc}
- */
- public function setValue($values, $notify = TRUE) {
- // Treat the values as property value of the first property, if no array is
- // given.
- if (isset($values) && !is_array($values)) {
- $keys = array_keys($this->definition->getPropertyDefinitions());
- $values = [$keys[0] => $values];
- }
- parent::setValue($values, $notify);
- }
- /**
- * {@inheritdoc}
- *
- * Different to the parent Map class, we avoid creating property objects as
- * far as possible in order to optimize performance. Thus we just update
- * $this->values if no property object has been created yet.
- */
- protected function writePropertyValue($property_name, $value) {
- // For defined properties there is either a property object or a plain
- // value that needs to be updated.
- if (isset($this->properties[$property_name])) {
- $this->properties[$property_name]->setValue($value, FALSE);
- }
- // Allow setting plain values for not-defined properties also.
- else {
- $this->values[$property_name] = $value;
- }
- }
- /**
- * {@inheritdoc}
- */
- public function __get($name) {
- // There is either a property object or a plain value - possibly for a
- // not-defined property. If we have a plain value, directly return it.
- if (isset($this->properties[$name])) {
- return $this->properties[$name]->getValue();
- }
- elseif (isset($this->values[$name])) {
- return $this->values[$name];
- }
- }
- /**
- * {@inheritdoc}
- */
- public function __set($name, $value) {
- // Support setting values via property objects, but take care in as the
- // value of the 'entity' property is typed data also.
- if ($value instanceof TypedDataInterface && !($value instanceof EntityInterface)) {
- $value = $value->getValue();
- }
- $this->set($name, $value);
- }
- /**
- * {@inheritdoc}
- */
- public function __isset($name) {
- if (isset($this->properties[$name])) {
- return $this->properties[$name]->getValue() !== NULL;
- }
- return isset($this->values[$name]);
- }
- /**
- * {@inheritdoc}
- */
- public function __unset($name) {
- if ($this->definition->getPropertyDefinition($name)) {
- $this->set($name, NULL);
- }
- else {
- // Explicitly unset the property in $this->values if a non-defined
- // property is unset, such that its key is removed from $this->values.
- unset($this->values[$name]);
- }
- }
- /**
- * {@inheritdoc}
- */
- public function view($display_options = []) {
- $view_builder = \Drupal::entityManager()->getViewBuilder($this->getEntity()->getEntityTypeId());
- return $view_builder->viewFieldItem($this, $display_options);
- }
- /**
- * {@inheritdoc}
- */
- public function preSave() {}
- /**
- * {@inheritdoc}
- */
- public function postSave($update) {}
- /**
- * {@inheritdoc}
- */
- public function delete() {}
- /**
- * {@inheritdoc}
- */
- public static function generateSampleValue(FieldDefinitionInterface $field_definition) {}
- /**
- * {@inheritdoc}
- */
- public function deleteRevision() {}
- /**
- * {@inheritdoc}
- */
- public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
- return [];
- }
- /**
- * {@inheritdoc}
- */
- public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
- return [];
- }
- /**
- * {@inheritdoc}
- */
- public static function storageSettingsToConfigData(array $settings) {
- return $settings;
- }
- /**
- * {@inheritdoc}
- */
- public static function storageSettingsFromConfigData(array $settings) {
- return $settings;
- }
- /**
- * {@inheritdoc}
- */
- public static function fieldSettingsToConfigData(array $settings) {
- return $settings;
- }
- /**
- * {@inheritdoc}
- */
- public static function fieldSettingsFromConfigData(array $settings) {
- return $settings;
- }
- /**
- * {@inheritdoc}
- */
- public static function calculateDependencies(FieldDefinitionInterface $field_definition) {
- return [];
- }
- /**
- * {@inheritdoc}
- */
- public static function calculateStorageDependencies(FieldStorageDefinitionInterface $field_definition) {
- return [];
- }
- /**
- * {@inheritdoc}
- */
- public static function onDependencyRemoval(FieldDefinitionInterface $field_definition, array $dependencies) {
- return FALSE;
- }
- }
|