Field storage needs to depend on the list options plugin it uses

Created on 8 June 2023, over 1 year ago
Updated 12 June 2023, over 1 year ago

Problem/Motivation

This module allows a plugin to provide option values for a field. The module stores this in the field storage's third-party settings, like this:

third_party_settings:
  list_predefined_options:
    plugin_id: timezones

ConfigEntityBase handles config dependencies that come from third_party_settings, by looking at the keys in the third_party_settings, so we get:

dependencies:
  module:
    - list_predefined_options
    - node
    - options

That's all good.

However, because this module uses plugins, *another* module could be providing the plugin. For example, module Cake might provide a list of cake types.

The field storage should then have a config dependency on the Cake module, because uninstalling the Cake module will remove the plugin and break the field.

Steps to reproduce

Proposed resolution

There's a core issue for this: 3rd party should be allowed to add config dependencies Active . Been open for a while, not going to be fixed soon I guess :(

I can see a quick fix for this though: in list_predefined_options_form_field_storage_config_edit_form_builder() we add the third party setting to the field storage. We can at that point also add dummy data with the key of the plugin-providing module, so we'd have:

third_party_settings:
  list_predefined_options:
    plugin_id: timezones
  cake:
    dummy: dummy

That would then cause ConfigEntityBase to add the dependency.

We'd need to be careful to clean that up when the plugin is changed - would need to happen at the API level to cover cases where a field storage is saved programmatically.

Remaining tasks

User interface changes

API changes

Data model changes

🐛 Bug report
Status

Fixed

Version

2.0

Component

Code

Created by

🇬🇧United Kingdom joachim

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Production build 0.71.5 2024