commerce_conditions_plus-1.0.x-dev/src/Plugin/Field/FieldWidget/ConditionsTable.php
src/Plugin/Field/FieldWidget/ConditionsTable.php
<?php declare(strict_types=1); namespace Drupal\commerce_conditions_plus\Plugin\Field\FieldWidget; use Drupal\commerce\Plugin\Field\FieldWidget\ConditionsWidget; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Form\FormStateInterface; /** * Plugin implementation of the 'commerce_conditions' widget. * * @FieldWidget( * id = "commerce_conditions_plus_conditions_table", * label = @Translation("Conditions Table"), * field_types = { * "commerce_plugin_item:commerce_condition" * }, * multiple_values = TRUE * ) */ class ConditionsTable extends ConditionsWidget { /** * {@inheritdoc} */ public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { $element = parent::formElement($items, $delta, $element, $form, $form_state); $element['form']['#type'] = 'commerce_conditions_table'; return $element; } /** * {@inheritdoc} */ public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { // AND and OR operators have no configuration, so when they are submitted // the form has no `configuration` array. We add it in so that the parent // massageFormValues passes. // @todo Upstream should support configurationless conditions (albeit rare.) foreach ($values['form'] as $key => $value) { if (!isset($value['plugin'])) { continue; } if (empty($value['configuration'])) { $values['form'][$key]['configuration'] = []; } } return parent::massageFormValues($values, $form, $form_state); } }