You are here

public static function WebformElementOptions::processWebformElementOptions in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Element/WebformElementOptions.php \Drupal\webform\Element\WebformElementOptions::processWebformElementOptions()

Processes a webform element options element.

File

src/Element/WebformElementOptions.php, line 78

Class

WebformElementOptions
Provides a form element for managing webform element options.

Namespace

Drupal\webform\Element

Code

public static function processWebformElementOptions(&$element, FormStateInterface $form_state, &$complete_form) {
  $element['#tree'] = TRUE;

  /** @var \Drupal\webform\WebformOptionsStorageInterface $webform_options_storage */
  $webform_options_storage = \Drupal::entityTypeManager()
    ->getStorage('webform_options');
  $options = $element['#likert'] ? $webform_options_storage
    ->getLikerts() : $webform_options_storage
    ->getOptions();
  $t_args = [
    '@type' => $element['#likert'] ? t('answers') : t('options'),
    ':href' => Url::fromRoute('entity.webform_options.collection')
      ->toString(),
  ];
  $has_options = count($options) ? TRUE : FALSE;

  // Select options.
  $element['options'] = [
    '#type' => 'select',
    '#description' => t('Please select <a href=":href">predefined @type</a> or enter custom @type.', $t_args),
    '#options' => [
      static::CUSTOM_OPTION => t('Custom @type…', $t_args),
    ] + $options,
    '#attributes' => [
      'class' => [
        'js-' . $element['#id'] . '-options',
      ],
    ],
    '#error_no_message' => TRUE,
    '#access' => $has_options,
    '#default_value' => isset($element['#default_value']) && !is_array($element['#default_value']) && WebformOptionsHelper::hasOption($element['#default_value'], $options) ? $element['#default_value'] : '',
  ];

  // Custom options.
  if ($element['#custom__type'] === 'webform_multiple') {
    $element['custom'] = [
      '#type' => 'webform_multiple',
      '#title' => $element['#title'],
      '#title_display' => 'invisible',
      '#error_no_message' => TRUE,
      '#default_value' => isset($element['#default_value']) && !is_string($element['#default_value']) ? $element['#default_value'] : [],
    ];
  }
  else {
    $element['custom'] = [
      '#type' => 'webform_options',
      '#yaml' => $element['#yaml'],
      '#title' => $element['#title'],
      '#title_display' => 'invisible',
      '#label' => $element['#likert'] ? t('answer') : t('option'),
      '#labels' => $element['#likert'] ? t('answers') : t('options'),
      '#error_no_message' => TRUE,
      '#options_description' => $element['#options_description'],
      '#default_value' => isset($element['#default_value']) && !is_string($element['#default_value']) ? $element['#default_value'] : [],
    ];
  }

  // If there are options set #states.
  if ($has_options) {
    $element['custom']['#states'] = [
      'visible' => [
        'select.js-' . $element['#id'] . '-options' => [
          'value' => static::CUSTOM_OPTION,
        ],
      ],
    ];
  }

  // Add validate callback.
  $element += [
    '#element_validate' => [],
  ];
  array_unshift($element['#element_validate'], [
    get_called_class(),
    'validateWebformElementOptions',
  ]);
  if (!empty($element['#states'])) {
    WebformFormHelper::processStates($element, '#wrapper_attributes');
  }
  return $element;
}