Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / vendor / chi-teck / drupal-code-generator / templates / d8 / _field / widget.twig
1 <?php
2
3 namespace Drupal\{{ machine_name }}\Plugin\Field\FieldWidget;
4
5 {% sort %}
6   {% if datetime %}
7 use Drupal\Core\Datetime\DrupalDateTime;
8   {% endif %}
9 use Drupal\Core\Field\FieldItemListInterface;
10 use Drupal\Core\Field\WidgetBase;
11 use Drupal\Core\Form\FormStateInterface;
12 use Symfony\Component\Validator\ConstraintViolationInterface;
13   {% if list %}
14 use Drupal\{{ machine_name }}\Plugin\Field\FieldType\{{ type_class }};
15   {% endif %}
16 {% endsort %}
17
18 /**
19  * Defines the '{{ field_id }}' field widget.
20  *
21  * @FieldWidget(
22  *   id = "{{ field_id }}",
23  *   label = @Translation("{{ field_label }}"),
24  *   field_types = {"{{ field_id }}"},
25  * )
26  */
27 class {{ widget_class }} extends WidgetBase {
28
29 {% if widget_settings %}
30   /**
31    * {@inheritdoc}
32    */
33   public static function defaultSettings() {
34     return ['foo' => 'bar'] + parent::defaultSettings();
35   }
36
37   /**
38    * {@inheritdoc}
39    */
40   public function settingsForm(array $form, FormStateInterface $form_state) {
41     $settings = $this->getSettings();
42     $element['foo'] = [
43       '#type' => 'textfield',
44       '#title' => $this->t('Foo'),
45       '#default_value' => $settings['foo'],
46     ];
47     return $element;
48   }
49
50   /**
51    * {@inheritdoc}
52    */
53   public function settingsSummary() {
54     $settings = $this->getSettings();
55     $summary[] = $this->t('Foo: @foo', ['@foo' => $settings['foo']]);
56     return $summary;
57   }
58
59 {% endif %}
60   /**
61    * {@inheritdoc}
62    */
63   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
64
65 {% for subfield in subfields %}
66   {% set title %}'#title' => $this->t('{{ subfield.name }}'),{% endset %}
67   {% set default_value %}'#default_value' => isset($items[$delta]->{{ subfield.machine_name }}) ? $items[$delta]->{{ subfield.machine_name }} : NULL,{% endset %}
68   {% set size %}'#size' => 20,{% endset %}
69   {% if subfield.list %}
70     $element['{{ subfield.machine_name }}'] = [
71       '#type' => 'select',
72       {{ title }}
73       '#options' => ['' => $this->t('- {{ subfield.required ? 'Select a value' : 'None' }} -')] + {{ type_class }}::{{ subfield.allowed_values_method }}(),
74       {{ default_value }}
75     ];
76   {% else %}
77     {% if subfield.type == 'boolean' %}
78     $element['{{ subfield.machine_name }}'] = [
79       '#type' => 'checkbox',
80       {{ title }}
81       {{ default_value }}
82     ];
83     {% elseif subfield.type == 'string' %}
84     $element['{{ subfield.machine_name }}'] = [
85       '#type' => 'textfield',
86       {{ title }}
87       {{ default_value }}
88       {% if inline %}
89       {{ size }}
90       {% endif %}
91     ];
92     {% elseif subfield.type == 'text' %}
93     $element['{{ subfield.machine_name }}'] = [
94       '#type' => 'textarea',
95       {{ title }}
96       {{ default_value }}
97     ];
98     {% elseif subfield.type == 'integer' %}
99     $element['{{ subfield.machine_name }}'] = [
100       '#type' => 'number',
101       {{ title }}
102       {{ default_value }}
103     ];
104     {% elseif subfield.type == 'float' %}
105     $element['{{ subfield.machine_name }}'] = [
106       '#type' => 'number',
107       {{ title }}
108       {{ default_value }}
109       '#step' => 0.001,
110     ];
111     {% elseif subfield.type == 'numeric' %}
112     $element['{{ subfield.machine_name }}'] = [
113       '#type' => 'number',
114       {{ title }}
115       {{ default_value }}
116       '#step' => 0.01,
117     ];
118     {% elseif subfield.type == 'email' %}
119     $element['{{ subfield.machine_name }}'] = [
120       '#type' => 'email',
121       {{ title }}
122       {{ default_value }}
123       {% if inline %}
124       {{ size }}
125       {% endif %}
126     ];
127     {% elseif subfield.type == 'telephone' %}
128     $element['{{ subfield.machine_name }}'] = [
129       '#type' => 'tel',
130       {{ title }}
131       {{ default_value }}
132       {% if inline %}
133       {{ size }}
134       {% endif %}
135     ];
136     {% elseif subfield.type == 'uri' %}
137     $element['{{ subfield.machine_name }}'] = [
138       '#type' => 'url',
139       {{ title }}
140       {{ default_value }}
141       {% if inline %}
142       {{ size }}
143       {% endif %}
144     ];
145     {% elseif subfield.type == 'datetime' %}
146     $element['{{ subfield.machine_name }}'] = [
147       '#type' => 'datetime',
148       {{ title }}
149       '#default_value' => NULL,
150       {% if subfield.date_type == 'date' %}
151       '#date_time_element' => 'none',
152       '#date_time_format' => '',
153       {% endif %}
154     ];
155     if (isset($items[$delta]->{{ subfield.machine_name }})) {
156       $element['{{ subfield.machine_name }}']['#default_value'] = DrupalDateTime::createFromFormat(
157         '{{ subfield.date_storage_format }}',
158         $items[$delta]->{{ subfield.machine_name }},
159         'UTC'
160       );
161     }
162     {% endif %}
163   {% endif %}
164
165 {% endfor %}
166     $element['#theme_wrappers'] = ['container', 'form_element'];
167 {% if inline %}
168     $element['#attributes']['class'][] = 'container-inline';
169 {% endif %}
170     $element['#attributes']['class'][] = '{{ field_id|u2h }}-elements';
171     $element['#attached']['library'][] = '{{ machine_name }}/{{ field_id }}';
172
173     return $element;
174   }
175
176   /**
177    * {@inheritdoc}
178    */
179   public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) {
180     return isset($violation->arrayPropertyPath[0]) ? $element[$violation->arrayPropertyPath[0]] : $element;
181   }
182
183   /**
184    * {@inheritdoc}
185    */
186   public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
187     foreach ($values as $delta => $value) {
188 {% for subfield in subfields %}
189       if ($value['{{ subfield.machine_name }}'] === '') {
190         $values[$delta]['{{ subfield.machine_name }}'] = NULL;
191       }
192   {% if subfield.type == 'datetime' %}
193       if ($value['{{ subfield.machine_name }}'] instanceof DrupalDateTime) {
194         $values[$delta]['{{ subfield.machine_name }}'] = $value['{{ subfield.machine_name }}']->format('{{ subfield.date_storage_format }}');
195       }
196   {% endif %}
197 {% endfor %}
198     }
199     return $values;
200   }
201
202 }