function EntityField::formatterSettingsProcessCallback

Same name and namespace in other branches
  1. 4.0.x modules/ctools_block/src/Plugin/Block/EntityField.php \Drupal\ctools_block\Plugin\Block\EntityField::formatterSettingsProcessCallback()

Render API callback: builds the formatter settings elements.

File

modules/ctools_block/src/Plugin/Block/EntityField.php, line 252

Class

EntityField
Provides a block to a field on an entity.

Namespace

Drupal\ctools_block\Plugin\Block

Code

public function formatterSettingsProcessCallback(array &$element, FormStateInterface $form_state, array &$complete_form) {
  $config = $this->getConfiguration();
  $parents_base = $element['#parents'];
  $formatter_parent = array_merge($parents_base, [
    'formatter_type',
  ]);
  $formatter_settings_parent = array_merge($parents_base, [
    'formatter_settings',
  ]);
  $settings_element =& $element['formatter_settings_wrapper']['formatter_settings'];
  // Set the #parents on the formatter_settings so they end up as a peer to
  // formatter_type.
  $settings_element['#parents'] = $formatter_settings_parent;
  // Get the formatter name in a way that works regardless of whether we're
  // getting the value via AJAX or not.
  $formatter_name = NestedArray::getValue($form_state->getUserInput(), $formatter_parent) ?: $element['formatter_type']['#default_value'];
  // Place the formatter settings on the form if a formatter is selected.
  $formatter = $this->getFormatter($formatter_name, $form_state->getValue('formatter_label'), $form_state->getValue($formatter_settings_parent, $config['formatter']['settings']), $config['formatter']['third_party_settings']);
  $settings_element = array_merge($formatter->settingsForm($settings_element, $form_state), $settings_element);
  // Store the array parents for our element so that we can use it to pull out
  // the formatter settings in our AJAX callback.
  $complete_form['#formatter_array_parents'] = $element['#array_parents'];
  return $element;
}