Chris@4: 'bar'] + parent::defaultSettings(); Chris@4: } Chris@4: Chris@4: /** Chris@4: * {@inheritdoc} Chris@4: */ Chris@4: public function settingsForm(array $form, FormStateInterface $form_state) { Chris@4: $settings = $this->getSettings(); Chris@4: $element['foo'] = [ Chris@4: '#type' => 'textfield', Chris@4: '#title' => $this->t('Foo'), Chris@4: '#default_value' => $settings['foo'], Chris@4: ]; Chris@4: return $element; Chris@4: } Chris@4: Chris@4: /** Chris@4: * {@inheritdoc} Chris@4: */ Chris@4: public function settingsSummary() { Chris@4: $settings = $this->getSettings(); Chris@4: $summary[] = $this->t('Foo: @foo', ['@foo' => $settings['foo']]); Chris@4: return $summary; Chris@4: } Chris@4: Chris@4: {% endif %} Chris@4: /** Chris@4: * {@inheritdoc} Chris@4: */ Chris@4: public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { Chris@4: Chris@4: {% for subfield in subfields %} Chris@4: {% set title %}'#title' => $this->t('{{ subfield.name }}'),{% endset %} Chris@4: {% set default_value %}'#default_value' => isset($items[$delta]->{{ subfield.machine_name }}) ? $items[$delta]->{{ subfield.machine_name }} : NULL,{% endset %} Chris@4: {% set size %}'#size' => 20,{% endset %} Chris@4: {% if subfield.list %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'select', Chris@4: {{ title }} Chris@4: '#options' => ['' => $this->t('- {{ subfield.required ? 'Select a value' : 'None' }} -')] + {{ type_class }}::{{ subfield.allowed_values_method }}(), Chris@4: {{ default_value }} Chris@4: ]; Chris@4: {% else %} Chris@4: {% if subfield.type == 'boolean' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'checkbox', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: ]; Chris@4: {% elseif subfield.type == 'string' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'textfield', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: {% if inline %} Chris@4: {{ size }} Chris@4: {% endif %} Chris@4: ]; Chris@4: {% elseif subfield.type == 'text' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'textarea', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: ]; Chris@4: {% elseif subfield.type == 'integer' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'number', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: ]; Chris@4: {% elseif subfield.type == 'float' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'number', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: '#step' => 0.001, Chris@4: ]; Chris@4: {% elseif subfield.type == 'numeric' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'number', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: '#step' => 0.01, Chris@4: ]; Chris@4: {% elseif subfield.type == 'email' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'email', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: {% if inline %} Chris@4: {{ size }} Chris@4: {% endif %} Chris@4: ]; Chris@4: {% elseif subfield.type == 'telephone' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'tel', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: {% if inline %} Chris@4: {{ size }} Chris@4: {% endif %} Chris@4: ]; Chris@4: {% elseif subfield.type == 'uri' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'url', Chris@4: {{ title }} Chris@4: {{ default_value }} Chris@4: {% if inline %} Chris@4: {{ size }} Chris@4: {% endif %} Chris@4: ]; Chris@4: {% elseif subfield.type == 'datetime' %} Chris@4: $element['{{ subfield.machine_name }}'] = [ Chris@4: '#type' => 'datetime', Chris@4: {{ title }} Chris@4: '#default_value' => NULL, Chris@4: {% if subfield.date_type == 'date' %} Chris@4: '#date_time_element' => 'none', Chris@4: '#date_time_format' => '', Chris@4: {% endif %} Chris@4: ]; Chris@4: if (isset($items[$delta]->{{ subfield.machine_name }})) { Chris@4: $element['{{ subfield.machine_name }}']['#default_value'] = DrupalDateTime::createFromFormat( Chris@4: '{{ subfield.date_storage_format }}', Chris@4: $items[$delta]->{{ subfield.machine_name }}, Chris@4: 'UTC' Chris@4: ); Chris@4: } Chris@4: {% endif %} Chris@4: {% endif %} Chris@4: Chris@4: {% endfor %} Chris@4: $element['#theme_wrappers'] = ['container', 'form_element']; Chris@4: {% if inline %} Chris@4: $element['#attributes']['class'][] = 'container-inline'; Chris@4: {% endif %} Chris@4: $element['#attributes']['class'][] = '{{ field_id|u2h }}-elements'; Chris@4: $element['#attached']['library'][] = '{{ machine_name }}/{{ field_id }}'; Chris@4: Chris@4: return $element; Chris@4: } Chris@4: Chris@4: /** Chris@4: * {@inheritdoc} Chris@4: */ Chris@4: public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) { Chris@4: return isset($violation->arrayPropertyPath[0]) ? $element[$violation->arrayPropertyPath[0]] : $element; Chris@4: } Chris@4: Chris@4: /** Chris@4: * {@inheritdoc} Chris@4: */ Chris@4: public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { Chris@4: foreach ($values as $delta => $value) { Chris@4: {% for subfield in subfields %} Chris@4: if ($value['{{ subfield.machine_name }}'] === '') { Chris@4: $values[$delta]['{{ subfield.machine_name }}'] = NULL; Chris@4: } Chris@4: {% if subfield.type == 'datetime' %} Chris@4: if ($value['{{ subfield.machine_name }}'] instanceof DrupalDateTime) { Chris@4: $values[$delta]['{{ subfield.machine_name }}'] = $value['{{ subfield.machine_name }}']->format('{{ subfield.date_storage_format }}'); Chris@4: } Chris@4: {% endif %} Chris@4: {% endfor %} Chris@4: } Chris@4: return $values; Chris@4: } Chris@4: Chris@4: }