diff --git a/list_predefined_options.module b/list_predefined_options.module index e6cae8e421d54e9680ed72dec56efe62fffb8b04..0fe9c2f3b8ba5d6d254e7d140d917d93ab26afcd 100644 --- a/list_predefined_options.module +++ b/list_predefined_options.module @@ -9,25 +9,46 @@ 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. + * + * 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']; + /** @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); +} /** * 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 */ - $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'), @@ -77,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; @@ -90,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); @@ -109,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.