diff --git a/list_predefined_options.module b/list_predefined_options.module index e6cae8e421d54e9680ed72dec56efe62fffb8b04..1631924bf08d9edf1bac8a4c9dc6096a9ac1b1cf 100644 --- a/list_predefined_options.module +++ b/list_predefined_options.module @@ -11,11 +11,13 @@ use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; /** - * Implements hook_form_FORM_ID_alter(): field_storage_config_edit_form. + * Implements hook_form_FORM_ID_alter(): field_config_edit_form. */ -function list_predefined_options_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) { - /** @var \Drupal\Core\Field\FieldConfigInterface $field */ +function list_predefined_options_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) { + /** @var \Drupal\field\Entity\FieldConfig $field */ $field = $form_state->getFormObject()->getEntity(); + /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */ + $field_storage = $field->getFieldStorageDefinition(); $field_types = [ 'list_float', @@ -23,12 +25,12 @@ function list_predefined_options_form_field_storage_config_edit_form_alter(&$for 'list_string', ]; - if (in_array($field->getType(), $field_types)) { - $options = \Drupal::service('plugin.manager.list_options')->listOptions($field->getType()); + if (in_array($field_storage->getType(), $field_types)) { + $options = \Drupal::service('plugin.manager.list_options')->listOptions($field_storage->getType()); $options = ['' => t('Custom')] + $options; - $settings = $field->getThirdPartySettings('list_predefined_options'); - $form['list_predefined_options_plugin_id'] = [ + $settings = $field_storage->getThirdPartySettings('list_predefined_options'); + $form['field_storage']['subform']['list_predefined_options_plugin_id'] = [ '#type' => 'select', '#title' => t('Allowed values'), '#options' => $options, @@ -37,27 +39,27 @@ function list_predefined_options_form_field_storage_config_edit_form_alter(&$for ]; // Workaround for https://www.drupal.org/project/drupal/issues/3441061. - $form['settings']['allowed_values']['#type'] ??= 'container'; + $form['field_storage']['subform']['settings']['allowed_values']['#type'] ??= 'container'; // Hide the values textarea when a list options plugin is selected. - $form['settings']['allowed_values']['#states']['visible'] = [ + $form['field_storage']['subform']['settings']['allowed_values']['#states']['visible'] = [ ':input[name="field_storage[subform][list_predefined_options_plugin_id]"]' => ['value' => ''], ]; // Change the allowed values inputs in the table to not be required. It's // too complicated to support validation conditionally, and the form states // take care of this in the browser. - $form['settings']['allowed_values']['table'][0]['item']['key']['#required'] = FALSE; - $form['settings']['allowed_values']['table'][0]['item']['label']['#required'] = FALSE; + $form['field_storage']['subform']['settings']['allowed_values']['table'][0]['item']['key']['#required'] = FALSE; + $form['field_storage']['subform']['settings']['allowed_values']['table'][0]['item']['label']['#required'] = FALSE; // Set the allowed values inputs in the table to not required using form // states when a list options plugin is selected. Only inputs from first // table row are required, so it's safe to use [0] here. @see // \Drupal\options\Plugin\Field\FieldType\ListItemBase::storageSettingsForm(). - $form['settings']['allowed_values']['table'][0]['item']['key']['#states']['required'] = [ + $form['field_storage']['subform']['settings']['allowed_values']['table'][0]['item']['key']['#states']['required'] = [ ':input[name="field_storage[subform][list_predefined_options_plugin_id]"]' => ['value' => ''], ]; - $form['settings']['allowed_values']['table'][0]['item']['label']['#states']['required'] = [ + $form['field_storage']['subform']['settings']['allowed_values']['table'][0]['item']['label']['#states']['required'] = [ ':input[name="field_storage[subform][list_predefined_options_plugin_id]"]' => ['value' => ''], ]; @@ -65,9 +67,9 @@ function list_predefined_options_form_field_storage_config_edit_form_alter(&$for // it's not possible to change a field from a list option plugin to a custom // list of values. if (isset($settings['plugin_id'])) { - $form['settings']['allowed_values']['#access'] = TRUE; + $form['field_storage']['subform']['settings']['allowed_values']['#access'] = TRUE; // Also hide the warning about the hiding. - $form['settings']['allowed_values_function']['#access'] = FALSE; + $form['field_storage']['subform']['settings']['allowed_values_function']['#access'] = FALSE; } // If the list_predefined_options_plugin_id element is changed from a plugin @@ -77,13 +79,13 @@ function list_predefined_options_form_field_storage_config_edit_form_alter(&$for // function, but by the time we get here, both the form state and the field // config entity see it as empty, probably because of our entity builder // having acted. - $allowed_values_function_setting = $field->getSetting('allowed_values_function'); + $allowed_values_function_setting = $field_storage->getSetting('allowed_values_function'); if (empty($allowed_values_function_setting) || $allowed_values_function_setting == 'list_predefined_options_allowed_values') { - $form['settings']['allowed_values']['#access'] = TRUE; - $form['allowed_values_function']['#access'] = FALSE; + $form['field_storage']['subform']['settings']['allowed_values']['#access'] = TRUE; + $form['field_storage']['subform']['allowed_values_function']['#access'] = FALSE; } - $form['#entity_builders'][] = 'list_predefined_options_form_field_storage_config_edit_form_builder'; + $form['field_storage']['subform']['#entity_builders'][] = 'list_predefined_options_form_field_storage_config_edit_form_builder'; } }