bricks-2.x-dev/modules/bricks_inline/src/Plugin/Field/FieldWidget/BricksTreeInlineWidget.php
modules/bricks_inline/src/Plugin/Field/FieldWidget/BricksTreeInlineWidget.php
<?php namespace Drupal\bricks_inline\Plugin\Field\FieldWidget; use Drupal\Core\Field\FieldItemListInterface; use Drupal\inline_entity_form\Plugin\Field\FieldWidget\InlineEntityFormComplex; use Drupal\Core\Form\FormStateInterface; /** * {@inheritdoc} * * @FieldWidget( * id = "bricks_tree_inline", * label = @Translation("Bricks tree (Inline entity form)"), * description = @Translation("A tree of inline entity forms."), * field_types = { * "bricks", * "bricks_revisioned" * }, * multiple_values = true * ) */ class BricksTreeInlineWidget extends InlineEntityFormComplex { /** * {@inheritdoc} */ public function form(FieldItemListInterface $items, array &$form, FormStateInterface $form_state, $get_delta = NULL) { $elements = parent::form($items, $form, $form_state, $get_delta); // Signal to content_translation that this field should be treated as // multilingual and not be hidden, see // \Drupal\content_translation\ContentTranslationHandler::entityFormSharedElements(). $elements['#multilingual'] = TRUE; return $elements; } /** * {@inheritdoc} */ public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { $element = parent::formElement($items, $delta, $element, $form, $form_state); $element['entities']['#widget'] = 'bricks_tree_inline'; $entities = $form_state->get(['inline_entity_form', $this->getIefId(), 'entities']); foreach ($entities as $delta => $value) { _bricks_form_element_alter($element['entities'][$delta], $items[$delta], $value['entity']); } return $element; } /** * {@inheritdoc} */ public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { $field_name = $this->fieldDefinition->getName(); $field_value = $form_state->getValue($form['#parents']); foreach ($values as $delta => $value) { if (isset($field_value[$field_name]['entities'][$delta])) { $values[$delta]['depth'] = $field_value[$field_name]['entities'][$delta]['depth']; $values[$delta]['options'] = $field_value[$field_name]['entities'][$delta]['options']; } } return $values; } }