You are here

protected function FilterEditForm::buildValueElement in Entity Share 8.2

Same name and namespace in other branches
  1. 8.3 modules/entity_share_server/src/Form/FilterEditForm.php \Drupal\entity_share_server\Form\FilterEditForm::buildValueElement()
  2. 8 modules/entity_share_server/src/Form/FilterEditForm.php \Drupal\entity_share_server\Form\FilterEditForm::buildValueElement()

Helper function to generate filter form elements.

Parameters

array $form: The form array.

\Drupal\Core\Form\FormStateInterface $form_state: The form state object.

1 call to FilterEditForm::buildValueElement()
FilterEditForm::form in modules/entity_share_server/src/Form/FilterEditForm.php
Gets the actual form array to be built.

File

modules/entity_share_server/src/Form/FilterEditForm.php, line 149

Class

FilterEditForm
Class FilterEditForm.

Namespace

Drupal\entity_share_server\Form

Code

protected function buildValueElement(array &$form, FormStateInterface $form_state) {

  /** @var \Drupal\entity_share_server\Entity\ChannelInterface $channel */
  $channel = $this->entity;
  $channel_filters = $channel
    ->get('channel_filters');
  $filter_id = $this
    ->getFilterId();
  $filter_operator = $channel_filters[$filter_id]['operator'];
  $selected_operator = $form_state
    ->getValue('operator');

  // No operator selected and the filter does not have any (which should not
  // happen).
  if (empty($selected_operator) && $filter_operator == '') {
    return;
  }
  if (!empty($selected_operator)) {
    $operator = $selected_operator;
  }
  else {
    $operator = $filter_operator;
  }

  // Operators which do not require value.
  if (in_array($operator, OperatorsHelper::getStandAloneOperators())) {
    return;
  }

  // Check the number of values.
  $number_of_values = $form_state
    ->get('number_of_values');

  // We have to ensure that there is at least one value field.
  if ($number_of_values === NULL) {
    if (isset($channel_filters[$filter_id]['value'])) {
      $number_of_values = count($channel_filters[$filter_id]['value']);
    }
    else {
      $number_of_values = 1;
    }
    $form_state
      ->set('number_of_values', $number_of_values);
  }
  for ($i = 0; $i < $number_of_values; $i++) {
    $form['value_wrapper']['value'][$i] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Value'),
      '#default_value' => isset($channel_filters[$filter_id]['value'][$i]) ? $channel_filters[$filter_id]['value'][$i] : '',
    ];
  }
  $form['value_wrapper']['actions'] = [
    '#type' => 'actions',
  ];
  if (in_array($operator, OperatorsHelper::getMultipleValuesOperators())) {
    $form['value_wrapper']['actions']['add_one_value'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Add a value'),
      '#submit' => [
        '::addOneValue',
      ],
      '#ajax' => [
        'callback' => '::addRemoveCallback',
        'wrapper' => 'value-wrapper',
      ],
    ];
  }

  // If there is more than one name, add the remove button.
  if ($number_of_values > 1) {
    $form['value_wrapper']['actions']['remove_one_value'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Remove a value'),
      '#submit' => [
        '::removeOneValue',
      ],
      '#ajax' => [
        'callback' => '::addRemoveCallback',
        'wrapper' => 'value-wrapper',
      ],
    ];
  }
}