From 7ca30bf8fdabaf922b47b0cf76a5bea1da385421 Mon Sep 17 00:00:00 2001 From: Geek Merlin <merlin@geeks4change.net> Date: Wed, 16 Apr 2025 16:25:05 +0200 Subject: [PATCH 1/2] Fix field form for D11 #3519507 --- list_predefined_options.module | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/list_predefined_options.module b/list_predefined_options.module index e6cae8e..48c21f6 100644 --- a/list_predefined_options.module +++ b/list_predefined_options.module @@ -10,8 +10,20 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; +/** + * Implements hook_form_FORM_ID_alter(): field_config_edit_form. + * + * For core >=11.x. + */ +function list_predefined_options_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) { + $subform =& $form['field_storage']['subform']; + list_predefined_options_form_field_storage_config_edit_form_alter($subform, $form_state, $form_id); +} + /** * Implements hook_form_FORM_ID_alter(): field_storage_config_edit_form. + * + * For core <10/11.x. */ function list_predefined_options_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) { /** @var \Drupal\Core\Field\FieldConfigInterface $field */ -- GitLab From a066b178759a9811a0a9988140884370b2cc129c Mon Sep 17 00:00:00 2001 From: Geek Merlin <merlin@geeks4change.net> Date: Wed, 16 Apr 2025 18:23:58 +0200 Subject: [PATCH 2/2] Fix fieldStorageConfig handling --- list_predefined_options.module | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/list_predefined_options.module b/list_predefined_options.module index 48c21f6..0fe9c2f 100644 --- a/list_predefined_options.module +++ b/list_predefined_options.module @@ -9,6 +9,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\field\FieldStorageConfigInterface; /** * Implements hook_form_FORM_ID_alter(): field_config_edit_form. @@ -17,7 +18,11 @@ use Drupal\Core\Field\FieldStorageDefinitionInterface; */ function list_predefined_options_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) { $subform =& $form['field_storage']['subform']; - list_predefined_options_form_field_storage_config_edit_form_alter($subform, $form_state, $form_id); + /** @var \Drupal\field\FieldConfigInterface $fieldConfig */ + $fieldConfig = $form_state->getFormObject()->getEntity(); + /** @var \Drupal\field\FieldStorageConfigInterface $fieldStorageConfig */ + $fieldStorageConfig = $fieldConfig->getFieldStorageDefinition(); + _list_predefined_options_storage_form_alter($subform, $fieldStorageConfig); } /** @@ -26,20 +31,24 @@ function list_predefined_options_form_field_config_edit_form_alter(&$form, FormS * For core <10/11.x. */ function list_predefined_options_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) { - /** @var \Drupal\Core\Field\FieldConfigInterface $field */ - $field = $form_state->getFormObject()->getEntity(); + /** @var \Drupal\field\FieldStorageConfigInterface $fieldStorageConfig */ + $fieldStorageConfig = $form_state->getFormObject()->getEntity(); + _list_predefined_options_storage_form_alter($form, $fieldStorageConfig); +} +function _list_predefined_options_storage_form_alter(array &$form, FieldStorageConfigInterface $fieldStorageConfig): void { $field_types = [ 'list_float', 'list_integer', 'list_string', ]; - if (in_array($field->getType(), $field_types)) { - $options = \Drupal::service('plugin.manager.list_options')->listOptions($field->getType()); + if (in_array($fieldStorageConfig->getType(), $field_types)) { + $options = \Drupal::service('plugin.manager.list_options') + ->listOptions($fieldStorageConfig->getType()); $options = ['' => t('Custom')] + $options; - $settings = $field->getThirdPartySettings('list_predefined_options'); + $settings = $fieldStorageConfig->getThirdPartySettings('list_predefined_options'); $form['list_predefined_options_plugin_id'] = [ '#type' => 'select', '#title' => t('Allowed values'), @@ -89,7 +98,7 @@ 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 = $fieldStorageConfig->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; @@ -102,7 +111,7 @@ function list_predefined_options_form_field_storage_config_edit_form_alter(&$for /** * Entity builder callback to save our settings into the field storage config. */ -function list_predefined_options_form_field_storage_config_edit_form_builder($entity_type, $entity, &$form, FormStateInterface $form_state) { +function list_predefined_options_form_field_storage_config_edit_form_builder($entity_type, FieldStorageConfigInterface $entity, &$form, FormStateInterface $form_state) { $plugin_id = $form_state->getValue('list_predefined_options_plugin_id'); if (!empty($plugin_id)) { $entity->setThirdPartySetting('list_predefined_options', 'plugin_id', $plugin_id); @@ -121,7 +130,7 @@ function list_predefined_options_form_field_storage_config_edit_form_builder($en /** * Implements hook_ENTITY_TYPE_presave(): field_storage_config */ -function list_predefined_options_field_storage_config_presave(EntityInterface $entity) { +function list_predefined_options_field_storage_config_presave(FieldStorageConfigInterface $entity) { // Workaround for https://www.drupal.org/project/drupal/issues/3016895 - // though because of https://www.drupal.org/project/drupal/issues/3366218 // this is currently pointless. -- GitLab