You are here

public function HttpConfigRequestForm::form in HTTP Client Manager 8.2

Same name and namespace in other branches
  1. 8 src/Form/HttpConfigRequestForm.php \Drupal\http_client_manager\Form\HttpConfigRequestForm::form()

Gets the actual form array to be built.

Overrides EntityForm::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

src/Form/HttpConfigRequestForm.php, line 75

Class

HttpConfigRequestForm
Class HttpConfigRequestForm.

Namespace

Drupal\http_client_manager\Form

Code

public function form(array $form, FormStateInterface $form_state) {
  $form = parent::form($form, $form_state);
  $serviceApi = $this->request
    ->get('serviceApi');
  $commandName = $this->request
    ->get('commandName');
  $http_config_request = $this->entity;
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Label'),
    '#maxlength' => 255,
    '#default_value' => $http_config_request
      ->label(),
    '#description' => $this
      ->t("Label for the Http Config Request."),
    '#required' => TRUE,
  ];
  $form['id'] = [
    '#type' => 'machine_name',
    '#default_value' => $http_config_request
      ->id(),
    '#machine_name' => [
      'exists' => '\\Drupal\\http_client_manager\\Entity\\HttpConfigRequest::load',
    ],
    '#disabled' => !$http_config_request
      ->isNew(),
  ];
  $form['service_api'] = [
    '#type' => 'value',
    '#value' => $serviceApi,
  ];
  $form['command_name'] = [
    '#type' => 'value',
    '#value' => $commandName,
  ];
  $form['parameters'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('parameters'),
    '#tree' => TRUE,
  ];
  $client = $this->httpClientFactory
    ->get($serviceApi);
  $parameters = $http_config_request
    ->get('parameters');

  /** @var \GuzzleHttp\Command\Guzzle\Parameter $param */
  foreach ($client
    ->getCommand($commandName)
    ->getParams() as $param) {
    $name = $param
      ->getName();
    $form['parameters'][$name] = [
      '#command_param' => $param,
      '#title' => $this
        ->t($name),
      '#type' => 'textarea',
      '#rows' => 1,
      '#required' => $param
        ->isRequired(),
      '#default_value' => isset($parameters[$name]) ? $parameters[$name] : $param
        ->getDefault(),
      '#description' => $param
        ->getDescription() ? $this
        ->t($param
        ->getDescription()) : '',
    ];

    // Create a select list for parameters with enums.
    if ($param
      ->has('enum')) {
      $enum = $param
        ->getEnum();
      $options = [
        '' => $this
          ->t('- Select -'),
      ] + array_combine($enum, $enum);
      $form['parameters'][$name]['#type'] = 'select';
      $form['parameters'][$name]['#options'] = $options;
      continue;
    }
    $type = $param
      ->getType();
    switch ($type) {
      case 'bool':
      case 'boolean':
        $form['parameters'][$name]['#type'] = 'checkbox';
        $form['parameters'][$name]['#value_callback'] = [
          $this,
          'booleanValue',
        ];
        break;
      case 'integer':
      case 'number':
        $form['parameters'][$name]['#type'] = 'number';
        $form['parameters'][$name]['#value_callback'] = [
          $this,
          'integerValue',
        ];
        break;
      case 'float':
      case 'decimal':
        $form['parameters'][$name]['#type'] = 'number';
        $form['parameters'][$name]['#step'] = 'any';
        $form['parameters'][$name]['#value_callback'] = [
          $this,
          'floatValue',
        ];
        break;
      case 'array':
      case 'object':
        $form['parameters'][$name]['#type'] = 'textarea';
        $form['parameters'][$name]['#rows'] = 12;
        $form['parameters'][$name]['#description'] .= '<div class="json-help">' . $this
          ->t('Example') . ': <small><pre>' . $this
          ->getJsonHelp($param) . '</pre></small></div>';
        $form['parameters'][$name]['#attributes']['placeholder'] = $this
          ->t('Enter data in JSON format.');
        $form['parameters'][$name]['#value_callback'] = [
          $this,
          'jsonString',
        ];
        $form['parameters'][$name]['#element_validate'][] = [
          $this,
          'validateJson',
        ];
        break;
    }
  }

  // Show the token help.
  $form['token_help'] = [
    '#theme' => 'token_tree_link',
  ];
  return $form;
}