Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
PrimaryReferenceAutocompleteWidget
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 2
72
0.00% covered (danger)
0.00%
0 / 1
 formElement
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
6
 massageFormValues
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3namespace Drupal\primary_entity_reference\Plugin\Field\FieldWidget;
4
5use Drupal\Core\Field\Attribute\FieldWidget;
6use Drupal\Core\Field\FieldItemListInterface;
7use Drupal\Core\Form\FormStateInterface;
8use Drupal\Core\StringTranslation\TranslatableMarkup;
9use Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget;
10
11/**
12 * Plugin implementation of the 'primary_entity_reference_autocomplete' widget.
13 */
14#[FieldWidget(
15  id: 'primary_entity_reference_autocomplete',
16  label: new TranslatableMarkup('Autocomplete'),
17  description: new TranslatableMarkup('An autocomplete text field.'),
18  field_types: ['primary_entity_reference'],
19)]
20class PrimaryReferenceAutocompleteWidget extends EntityReferenceAutocompleteWidget {
21
22  /**
23   * {@inheritdoc}
24   */
25  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
26
27    $element = parent::formElement($items, $delta, $element, $form, $form_state);
28    /** @var \Drupal\primary_entity_reference\Plugin\Field\FieldType\PrimaryEntityReferenceItem $item */
29    $item = $items[$delta];
30    $field_name = $this->fieldDefinition->getName();
31    $element['primary'] = [
32      '#type' => 'radio',
33      '#return_value' => $delta,
34      '#title' => $this->t('Primary'),
35      '#default_value' => $item->get('primary')->getValue() ? $delta : NULL,
36      '#attributes' => [
37        'id' => $field_name . '-primary-' . $delta,
38      ],
39      '#parents' => [$field_name, 0, 'primary'],
40    ];
41
42    return $element;
43  }
44
45  /**
46   * {@inheritdoc}
47   */
48  public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
49    $values = parent::massageFormValues($values, $form, $form_state);
50
51    $primary = 0;
52    foreach ($values as $delta => $value) {
53      if (isset($value['primary']) && $value['primary']) {
54        $primary = (int) $value['primary'];
55      }
56    }
57
58    foreach ($values as $delta => $value) {
59      $values[$delta]['primary'] = 0;
60      if ($value['_original_delta'] == $primary) {
61
62        $values[$delta]['primary'] = 1;
63      }
64    }
65
66    return $values;
67  }
68
69}