Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 29 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
PrimaryReferenceAutocompleteWidget | |
0.00% |
0 / 24 |
|
0.00% |
0 / 2 |
72 | |
0.00% |
0 / 1 |
formElement | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
6 | |||
massageFormValues | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
42 |
1 | <?php |
2 | |
3 | namespace Drupal\primary_entity_reference\Plugin\Field\FieldWidget; |
4 | |
5 | use Drupal\Core\Field\Attribute\FieldWidget; |
6 | use Drupal\Core\Field\FieldItemListInterface; |
7 | use Drupal\Core\Form\FormStateInterface; |
8 | use Drupal\Core\StringTranslation\TranslatableMarkup; |
9 | use 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 | )] |
20 | class 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 | } |