/**
  * Form validation handler for widget elements.
  *
  * @param array $element
  *   The form element.
  * @param array $form_state
  *   The form state.
  */
 public static function validateElement(array $element, FormStateInterface $form_state)
 {
     parent::validateElement($element, $form_state);
     // Massage submitted form values.
     // Drupal\Core\Field\WidgetBase::submit() expects values as
     // an array of values keyed by delta first, then by column, while our
     // widgets return the opposite.
     if (is_array($element['#value'])) {
         $values = array_values($element['#value']);
     } else {
         $values = array($element['#value']);
     }
     // Filter out the 'none' option. Use a strict comparison, because
     // 0 == 'any string'.
     $index = array_search('_none', $values, TRUE);
     if ($index !== FALSE) {
         unset($values[$index]);
     }
     // Transpose selections from field => delta to delta => field.
     $items = array();
     foreach ($values as $value) {
         $items[] = array($element['#key_column'] => $value);
     }
     NestedArray::setValue($form_state['values'], $element['#parents'], $items);
 }
 /**
  * {@inheritdoc}
  */
 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state)
 {
     $element = parent::formElement($items, $delta, $element, $form, $form_state);
     $options = $this->getOptions($items->getEntity());
     $selected = $this->getSelectedOptions($items);
     // If required and there is one single option, preselect it.
     if ($this->required && count($options) == 1) {
         reset($options);
         $selected = array(key($options));
     }
     if ($this->multiple) {
         $element += array('#type' => 'checkboxes', '#default_value' => $selected, '#options' => $options);
     } else {
         $element += array('#type' => 'radios', '#default_value' => $selected ? reset($selected) : NULL, '#options' => $options);
     }
     return $element;
 }
Example #3
0
 /**
  * {@inheritdoc}
  */
 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state)
 {
     $element = parent::formElement($items, $delta, $element, $form, $form_state);
     $element += array('#type' => 'select', '#options' => $this->getOptions($items->getEntity()), '#default_value' => $this->getSelectedOptions($items), '#multiple' => $this->multiple && count($this->options) > 1);
     return $element;
 }