function SelectionPluginBase::resolveBackwardCompatibilityConfiguration

Moves the backward compatibility level configurations in the right place.

In order to keep backward compatibility, we copy all settings, except 'target_type', 'handler' and 'entity' under 'handler_settings', following the structure from the field config. If the plugin was instantiated using the 'handler_settings' level, those values will be used. In case of conflict, the root level settings will take precedence. The backward compatibility aware configuration will have the next structure:

  • target_type
  • handler (will be removed in Drupal 9.0.x, it's the plugin id)
  • entity
  • setting_1
  • setting_2 ...
  • setting_N
  • handler_settings: (will be removed in Drupal 9.0.x)
    • setting_1
    • setting_2 ...
    • setting_N

@internal

@todo Remove this method call and its method in Drupal 9.

Parameters

array $configuration: The configuration array to be altered.

See also

https://www.drupal.org/project/drupal/issues/3069757

https://www.drupal.org/node/2870971

1 call to SelectionPluginBase::resolveBackwardCompatibilityConfiguration()
SelectionPluginBase::setConfiguration in core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php
Sets the configuration for this plugin instance.

File

core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php, line 130

Class

SelectionPluginBase
Provides a base class for configurable selection handlers.

Namespace

Drupal\Core\Entity\EntityReferenceSelection

Code

protected function resolveBackwardCompatibilityConfiguration(array &$configuration) {
    if (isset($this->defaultConfiguration()['handler_settings'])) {
        throw new \InvalidArgumentException("{$this->getPluginDefinition()['class']}::defaultConfiguration() should not contain a 'handler_settings' key. All settings should be placed in the root level.");
    }
    // Extract the BC level from the passed configuration, if any.
    if (array_key_exists('handler_settings', $configuration)) {
        if (!is_array($configuration['handler_settings'])) {
            throw new \InvalidArgumentException("The setting 'handler_settings' is reserved and cannot be used.");
        }
        @trigger_error("Providing settings under 'handler_settings' is deprecated in drupal:8.4.0 support for 'handler_settings' is removed from drupal:9.0.0. Move the settings in the root of the configuration array. See https://www.drupal.org/node/2870971", E_USER_DEPRECATED);
        // Settings passed in the root level take precedence over BC settings.
        $configuration += $configuration['handler_settings'];
        unset($configuration['handler_settings']);
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.