diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php index f26b151..8222113 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php @@ -150,21 +150,21 @@ public function instanceSettingsForm(array $form, array &$form_state) { /** * {@inheritdoc} */ - public function defaultValuesForm(array $element, array $form, array &$form_state) { + public function defaultValuesForm(array $element, array &$form, array &$form_state) { return array(); } /** * {@inheritdoc} */ - public function defaultValuesFormValidate(array $form, array &$form_state) { + public function defaultValuesFormValidate(array &$form, array &$form_state) { return array(); } /** * {@inheritdoc} */ - public function defaultValuesFormSubmit(array $form, array &$form_state) { + public function defaultValuesFormSubmit(array &$form, array &$form_state) { return array(); } diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php index d957968..92362a0 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php @@ -49,36 +49,48 @@ public function instanceSettingsForm(array $form, array &$form_state) { /** * {@inheritdoc} */ - public function defaultValuesForm(array $element, array $form, array &$form_state) { + public function defaultValuesForm(array $element, array &$form, array &$form_state) { $entity = $form['#entity']; $entity_form_display = $form['#entity_form_display']; - $instance = $this->getInstance(); - $field = $this->getInstance()->getField(); + $default_value = $this->getFieldDefinition()->default_value; + $field_name = $this->getFieldDefinition()->getFieldName(); + + $this->getFieldDefinition()->required = 0; // Insert the widget. Since we do not use the "official" instance definition, // the whole flow cannot use field_invoke_method(). - $items = $entity->getNGEntity()->{$field->id}; - if (!empty($instance['default_value'])) { - $items->setValue((array) $instance['default_value']); + $items = $entity->getNGEntity()->{$field_name}; + if (!empty($default_value)) { + $items->setValue($default_value); } - return $entity_form_display->getRenderer($field->id)->form($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); + // When field is hidden, use the default widget and store it in the form + if (!$renderer = $entity_form_display->getRenderer($field_name)) { + $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->getFieldDefinition()->getFieldType()); + $default_widget = \Drupal::service('plugin.manager.field.widget')->getDefinition($field_type['default_widget']); + $configuration = array( + 'field_definition' => $this->getFieldDefinition(), + 'settings' => $default_widget['settings'] + ); + $renderer = \Drupal::service('plugin.manager.field.widget')->createInstance($field_type['default_widget'], $configuration); + } + $form['#renderer'] = $renderer; + return $renderer->form($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); } /** * {@inheritdoc} */ - public function defaultValuesFormValidate(array $form, array &$form_state) { - $instance = $this->getInstance(); - $field_name = $instance['field_name']; + public function defaultValuesFormValidate(array &$form, array &$form_state) { $entity = $form['#entity']; - $entity_form_display = $form['#entity_form_display']; + $renderer = $form['#renderer']; + $field_name = $this->getFieldDefinition()->getFieldName(); $element = $form['instance']['default_value_widget']; // Extract the 'default value'. $items = $entity->getNGEntity()->{$field_name}; - $entity_form_display->getRenderer($this->instance->getField()->id)->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); + $renderer->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); $violations = $items->validate(); // Report errors. @@ -89,23 +101,22 @@ public function defaultValuesFormValidate(array $form, array &$form_state) { field_form_set_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state, $field_state); // Assign reported errors to the correct form element. - $entity_form_display->getRenderer($this->instance->getField()->id)->flagErrors($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); + $renderer->flagErrors($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); } } /** * {@inheritdoc} */ - public function defaultValuesFormSubmit(array $form, array &$form_state) { + public function defaultValuesFormSubmit(array &$form, array &$form_state) { $entity = $form['#entity']; - $entity_form_display = $form['#entity_form_display']; - $instance = $this->getInstance(); - $field_name = $this->instance['field_name']; + $renderer = $form['#renderer']; + $field_name = $this->getFieldDefinition()->getFieldName(); $element = $form['instance']['default_value_widget']; // Extract field values. $items = $entity->getNGEntity()->{$field_name}; - $entity_form_display->getRenderer($instance->getField()->id)->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); + $renderer->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state); return $items->getValue() ?: NULL; } diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php index 6dc011f..23bc5e5 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php @@ -105,7 +105,7 @@ public function instanceSettingsForm(array $form, array &$form_state); * @return array * The form definition for the field instance default value. */ - public function defaultValuesForm(array $element, array $form, array &$form_state); + public function defaultValuesForm(array $element, array &$form, array &$form_state); /** * Validates the default value widget for a given field instance. @@ -121,7 +121,7 @@ public function defaultValuesForm(array $element, array $form, array &$form_stat * @return array * The field instance default value. */ - public function defaultValuesFormValidate(array $form, array &$form_state); + public function defaultValuesFormValidate(array &$form, array &$form_state); /** * Submits the default value widget for a given field instance. @@ -137,6 +137,6 @@ public function defaultValuesFormValidate(array $form, array &$form_state); * @return array * The field instance default value. */ - public function defaultValuesFormSubmit(array $form, array &$form_state); + public function defaultValuesFormSubmit(array &$form, array &$form_state); } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php index 956dc1b..1ada1ab 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php @@ -32,13 +32,6 @@ class FieldInstanceEditForm implements FormInterface, ControllerInterface { protected $instance; /** - * The field widget plugin manager. - * - * @var \Drupal\field\Plugin\Type\Widget\WidgetPluginManager - */ - protected $widgetManager; - - /** * The entity manager. * * @var \Drupal\Core\Entity\EntityManager @@ -46,26 +39,13 @@ class FieldInstanceEditForm implements FormInterface, ControllerInterface { protected $entityManager; /** - * The field type manager. - * - * @var \Drupal\Core\Entity\Field\FieldTypePluginManager - */ - protected $fieldTypeManager; - - /** * Constructs a new field instance form. * * @param \Drupal\Core\Entity\EntityManager $entity_manager * The entity manager. - * @param \Drupal\field\Plugin\Type\Widget\WidgetPluginManager $widget_manager - * The field widget plugin manager. - * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager - * The field type manager. */ - public function __construct(EntityManager $entity_manager, WidgetPluginManager $widget_manager, FieldTypePluginManager $field_type_manager) { + public function __construct(EntityManager $entity_manager) { $this->entityManager = $entity_manager; - $this->widgetManager = $widget_manager; - $this->fieldTypeManager = $field_type_manager; } /** @@ -73,9 +53,7 @@ public function __construct(EntityManager $entity_manager, WidgetPluginManager $ */ public static function create(ContainerInterface $container) { return new static( - $container->get('plugin.manager.entity'), - $container->get('plugin.manager.field.widget'), - $container->get('plugin.manager.entity.field.field_type') + $container->get('plugin.manager.entity') ); } @@ -246,11 +224,6 @@ protected function getDefaultValueWidget($field, array &$form, &$form_state) { '#parents' => array(), ); - // Adjust the instance definition used for the form element. We want a - // non-required input and no description. - $this->instance['required'] = FALSE; - $this->instance['description'] = ''; - $element += $this->getFieldItem($form['#entity'], $this->instance['field_name'])->defaultValuesForm($element, $form, $form_state); return $element; }