View source
<?php
namespace Drupal\commerce\Plugin\Commerce\InlineForm;
use Drupal\commerce\Element\CommerceElementTrait;
use Drupal\Component\Plugin\PluginManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PluginConfiguration extends InlineFormBase {
use CommerceElementTrait;
protected $pluginManager;
public function __construct(array $configuration, $plugin_id, $plugin_definition, PluginManagerInterface $plugin_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this
->setConfiguration($configuration);
$this
->validateConfiguration();
$this->pluginManager = $plugin_manager;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('plugin.manager.' . $configuration['plugin_type']));
}
public function defaultConfiguration() {
return [
'plugin_type' => '',
'plugin_id' => '',
'plugin_configuration' => [],
'enforce_unique_parents' => TRUE,
];
}
protected function requiredConfiguration() {
return [
'plugin_type',
'plugin_id',
];
}
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);
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;
}
public function validateInlineForm(array &$inline_form, FormStateInterface $form_state) {
parent::validateInlineForm($inline_form, $form_state);
$plugin = $this->pluginManager
->createInstance($this->configuration['plugin_id'], $this->configuration['plugin_configuration']);
$plugin
->validateConfigurationForm($inline_form['form'], $form_state);
}
public function submitInlineForm(array &$inline_form, FormStateInterface $form_state) {
parent::submitInlineForm($inline_form, $form_state);
$plugin = $this->pluginManager
->createInstance($this->configuration['plugin_id'], $this->configuration['plugin_configuration']);
$plugin
->submitConfigurationForm($inline_form['form'], $form_state);
$form_state
->setValueForElement($inline_form, $plugin
->getConfiguration());
}
}