Skip to content
Snippets Groups Projects

Fix field form for D11 #3519507

1 file
+ 29
8
Compare changes
  • Side-by-side
  • Inline
@@ -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.
Loading