You are here

public function NegotiationLanguageCookieForm::buildForm in Language Cookie 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides ConfigFormBase::buildForm

File

src/Form/NegotiationLanguageCookieForm.php, line 66

Class

NegotiationLanguageCookieForm
Configure the Language cookie negotiation method for this site.

Namespace

Drupal\language_cookie\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $this->config = $this
    ->config('language_cookie.negotiation');
  $form['param'] = [
    '#title' => $this
      ->t('Cookie parameter'),
    '#type' => 'textfield',
    '#default_value' => $this->config
      ->get('param'),
    '#description' => $this
      ->t('Name of the cookie parameter used to determine the desired language.'),
  ];
  $form['time'] = [
    '#title' => $this
      ->t('Cookie duration'),
    '#type' => 'textfield',
    '#default_value' => $this->config
      ->get('time'),
    '#description' => $this
      ->t('The time the cookie expires. This is the number of seconds from the current time.'),
  ];
  $form['path'] = [
    '#title' => $this
      ->t('Cookie path'),
    '#type' => 'textfield',
    '#default_value' => $this->config
      ->get('path'),
    '#description' => $this
      ->t('The cookie available server path'),
  ];
  $form['domain'] = [
    '#title' => $this
      ->t('Cookie domain scope'),
    '#type' => 'textfield',
    '#default_value' => $this->config
      ->get('domain'),
    '#description' => $this
      ->t('The cookie domain scope'),
  ];
  $form['secure'] = [
    '#title' => $this
      ->t('Secure cookie'),
    '#type' => 'checkbox',
    '#default_value' => $this->config
      ->get('secure'),
    '#description' => $this
      ->t('Whether the cookie should only be transmitted over a secure HTTPS connection from the client.'),
  ];
  $form['http_only'] = [
    '#title' => $this
      ->t('HttpOnly cookie'),
    '#type' => 'checkbox',
    '#default_value' => $this->config
      ->get('http_only'),
    '#description' => $this
      ->t('Prevent client-side scripts from accessing the cookie.'),
  ];
  $form['set_on_every_pageload'] = [
    '#title' => $this
      ->t('Re-send cookie on every page load'),
    '#type' => 'checkbox',
    '#description' => $this
      ->t('This will re-send a cookie on every page load, even if a cookie has already been set. This may be useful if you use a page cache such as Varnish and you plan to cache the language cookie. This prevents a user who already has a cookie visiting an uncached page and the cached version not setting a cookie.'),
    '#default_value' => $this->config
      ->get('set_on_every_pageload'),
  ];
  $manager = $this->languageCookieConditionManager;
  foreach ($manager
    ->getDefinitions() as $def) {
    $condition_plugin = $manager
      ->createInstance($def['id']);
    $form_state
      ->set([
      'conditions',
      $condition_plugin
        ->getPluginId(),
    ], $condition_plugin);
    $condition_plugin
      ->setConfiguration($condition_plugin
      ->getConfiguration() + (array) $this->config
      ->get());
    $condition_form = [];
    $condition_form['#markup'] = $condition_plugin
      ->getDescription();
    $condition_form += $condition_plugin
      ->buildConfigurationForm([], $form_state);
    if (!empty($condition_form[$condition_plugin
      ->getPluginId()])) {
      $condition_form['#type'] = 'details';
      $condition_form['#open'] = TRUE;
      $condition_form['#title'] = $condition_plugin
        ->getName();
      $condition_form['#weight'] = $condition_plugin
        ->getWeight();
      $form['conditions'][$condition_plugin
        ->getPluginId()] = $condition_form;
    }
  }
  return parent::buildForm($form, $form_state);
}