You are here

public function ConfigurationForm::buildForm in URLs queuer 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 PluginConfigFormBase::buildForm

File

src/Form/ConfigurationForm.php, line 66

Class

ConfigurationForm
Configuration form for the Url and Path queuer.

Namespace

Drupal\purge_queuer_url\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('purge_queuer_url.settings');

  // Traffic collection.
  $form['collection'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Traffic collection'),
  ];
  $form['collection']['queue_paths'] = [
    '#title' => $this
      ->t('Queue paths instead of URLs.'),
    '#type' => 'checkbox',
    '#description' => $this
      ->t("If checked this queues paths without the scheme and domain name."),
    '#default_value' => $config
      ->get('queue_paths'),
  ];
  $form['collection']['host_override'] = [
    '#title' => $this
      ->t('Hostname'),
    '#type' => 'checkbox',
    '#description' => $this
      ->t("You can override the hostname of the URLs that are queued. When you do this, you will lose any gathered domain names that have been collected but do have full control over how the queued URLs look like."),
    '#default_value' => $config
      ->get('host_override'),
    '#states' => [
      'visible' => [
        ':input[name="queue_paths"]' => [
          'checked' => FALSE,
        ],
      ],
    ],
  ];
  $form['collection']['host'] = [
    '#type' => 'textfield',
    '#size' => 30,
    '#default_value' => $config
      ->get('host'),
    '#states' => [
      'visible' => [
        ':input[name="queue_paths"]' => [
          'checked' => FALSE,
        ],
        ':input[name="host_override"]' => [
          'checked' => TRUE,
        ],
      ],
    ],
  ];
  $form['collection']['scheme_override'] = [
    '#title' => $this
      ->t('Scheme'),
    '#type' => 'checkbox',
    '#description' => $this
      ->t("When checked, you can enforce a single scheme like https:// for all the queued URLs instead of logging the schemes that visitors used."),
    '#default_value' => $config
      ->get('scheme_override'),
    '#states' => [
      'visible' => [
        ':input[name="queue_paths"]' => [
          'checked' => FALSE,
        ],
      ],
    ],
  ];
  $form['collection']['scheme'] = [
    '#type' => 'select',
    '#default_value' => $config
      ->get('scheme'),
    '#options' => [
      'http' => $this
        ->t('http://'),
      'https' => $this
        ->t('https://'),
    ],
    '#states' => [
      'visible' => [
        ':input[name="queue_paths"]' => [
          'checked' => FALSE,
        ],
        ':input[name="scheme_override"]' => [
          'checked' => TRUE,
        ],
      ],
    ],
  ];

  // Blacklist form elements (and ajax 'add more' logic).
  $form['blacklist'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Blacklist'),
    '#description' => $this
      ->t('All cacheable HTTP responses with status code 200 generated by Drupal will be collected in the traffic registry. This approach has the disadvantage that crawlers generating query parameters can pollute your database. Blacklisting allows you to put in any string that will get blocked from entering the registry. It is recommended to <b>contribute back</b> blacklisted strings that are likely to affect any user of this module.'),
  ];

  // Retrieve the existing blacklist and initiatlize the counter.
  $blacklist = $config
    ->get('blacklist');
  if (is_null($form_state
    ->get('blacklist_items_count'))) {
    if (empty($blacklist)) {
      $form_state
        ->set('blacklist_items_count', 1);
    }
    else {
      $form_state
        ->set('blacklist_items_count', count($blacklist));
    }
  }

  // Define the fields based on whats stored in form state.
  $max = $form_state
    ->get('blacklist_items_count');
  $form['blacklist']['blacklist'] = [
    '#tree' => TRUE,
    '#prefix' => '<div id="blacklist-wrapper">',
    '#suffix' => '</div>',
  ];
  for ($delta = 0; $delta < $max; $delta++) {
    if (!isset($form['blacklist']['blacklist'][$delta])) {
      $element = [
        '#type' => 'textfield',
        '#default_value' => isset($blacklist[$delta]) ? $blacklist[$delta] : '',
      ];
      $form['blacklist']['blacklist'][$delta] = $element;
    }
  }

  // Define the add button.
  $form['blacklist']['add'] = [
    '#type' => 'submit',
    '#name' => 'add',
    '#value' => $this
      ->t('Add'),
    '#submit' => [
      [
        $this,
        'addMoreSubmit',
      ],
    ],
    '#ajax' => [
      'callback' => [
        $this,
        'addMoreCallback',
      ],
      'wrapper' => 'blacklist-wrapper',
      'effect' => 'fade',
    ],
  ];

  // Define a clear button to allow clearing the registry.
  $form['actions']['clear'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Clear traffic history'),
    '#weight' => 10,
    '#button_type' => 'danger',
  ];
  if ($this
    ->isDialog($form, $form_state)) {
    $form['actions']['clear']['#ajax'] = [
      'callback' => '::submitFormClear',
    ];
  }
  else {
    $form['actions']['clear']['#submit'] = [
      [
        $this,
        'submitFormClear',
      ],
    ];
  }
  return parent::buildForm($form, $form_state);
}