You are here

public function PluginConfiguration::buildInlineForm in Commerce Core 8.2

Builds the inline form.

Parameters

array $inline_form: The inline form, containing the following basic properties:

  • #parents: Identifies the location of the field values in $form_state.

\Drupal\Core\Form\FormStateInterface $form_state: The form state of the complete form.

Return value

array The built inline form.

Overrides InlineFormBase::buildInlineForm

File

src/Plugin/Commerce/InlineForm/PluginConfiguration.php, line 88

Class

PluginConfiguration
Provides a plugin configuration inline form.

Namespace

Drupal\commerce\Plugin\Commerce\InlineForm

Code

public function buildInlineForm(array $inline_form, FormStateInterface $form_state) {
  assert(!empty($this->configuration['plugin_type']));
  assert(!empty($this->configuration['plugin_id']));
  assert(is_array($this->configuration['plugin_configuration']));
  $inline_form['form'] = [];
  $inline_form = parent::buildInlineForm($inline_form, $form_state);

  // NestedArray::setValue() crashes when switching between two plugins
  // that share a configuration element of the same name, but not the
  // same type (e.g. "amount" of type number/commerce_price).
  // Configuration must be keyed by plugin ID in $form_state to prevent
  // that, either on this level, or in a parent form element.
  if ($this->configuration['enforce_unique_parents']) {
    $inline_form['form']['#parents'] = array_merge($inline_form['#parents'], [
      $this->configuration['plugin_id'],
    ]);
  }
  $plugin = $this->pluginManager
    ->createInstance($this->configuration['plugin_id'], $this->configuration['plugin_configuration']);
  $inline_form['form'] = $plugin
    ->buildConfigurationForm($inline_form['form'], $form_state);
  return $inline_form;
}