class ConfigurationForm in URLs queuer 8
Configuration form for the Url and Path queuer.
Hierarchy
- class \Drupal\Core\Form\FormBase implements ContainerInjectionInterface, FormInterface uses DependencySerializationTrait, LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\Core\Form\ConfigFormBase uses ConfigFormBaseTrait
- class \Drupal\purge_ui\Form\PluginConfigFormBase uses CloseDialogTrait
- class \Drupal\purge_ui\Form\QueuerConfigFormBase
- class \Drupal\purge_queuer_url\Form\ConfigurationForm
- class \Drupal\purge_ui\Form\QueuerConfigFormBase
- class \Drupal\purge_ui\Form\PluginConfigFormBase uses CloseDialogTrait
- class \Drupal\Core\Form\ConfigFormBase uses ConfigFormBaseTrait
Expanded class hierarchy of ConfigurationForm
1 file declares its use of ConfigurationForm
- QueuerConfigFormTest.php in tests/
src/ Functional/ QueuerConfigFormTest.php
File
- src/
Form/ ConfigurationForm.php, line 17
Namespace
Drupal\purge_queuer_url\FormView source
class ConfigurationForm extends QueuerConfigFormBase {
/**
* The Messenger service.
*
* @var \Drupal\Core\Messenger\MessengerInterface
*/
protected $messenger;
/**
* Constructs a ConfigurationForm object.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The factory for configuration objects.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger service.
*/
public final function __construct(ConfigFactoryInterface $config_factory, MessengerInterface $messenger) {
$this
->setConfigFactory($config_factory);
$this->messenger = $messenger;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('messenger'));
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return [
'purge_queuer_url.settings',
];
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'purge_queuer_url.configuration_form';
}
/**
* {@inheritdoc}
*/
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);
}
/**
* Let the form rebuild the blacklist textfields.
*
* @param array $form
* An associative array containing the structure of the form.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
*/
public function addMoreSubmit(array &$form, FormStateInterface $form_state) {
$count = $form_state
->get('blacklist_items_count');
$count++;
$form_state
->set('blacklist_items_count', $count);
$form_state
->setRebuild();
}
/**
* Adds more textfields to the blacklist fieldset.
*
* @param array $form
* An associative array containing the structure of the form.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
*/
public function addMoreCallback(array &$form, FormStateInterface $form_state) {
return $form['blacklist']['blacklist'];
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
// Remove empty values from the blacklist so this doesn't cause issues.
$blacklist = [];
foreach ($form_state
->getValue('blacklist') as $string) {
if (!empty(trim($string))) {
$blacklist[] = $string;
}
}
$form_state
->setValue('blacklist', $blacklist);
}
/**
* Submit handler that clears the traffic registry.
*
* @param array $form
* An associative array containing the structure of the form.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
*/
public function submitFormClear(array &$form, FormStateInterface $form_state) {
// Clear the traffic registry IF there are no ordinary form errors.
if (!$form_state
->getErrors()) {
\Drupal::service('purge_queuer_url.registry')
->clear();
$this->messenger
->addMessage($this
->t("The traffic registry has been cleared, your site needs to get regular traffic before it starts queueing URLs or paths again! Pages currently cached in Drupal's render cache won't be collected unless you clear those, but be careful doing that on a busy site!"));
}
// Determine all the AJAX and non-AJAX logic depending on how we're called.
if ($this
->isDialog($form, $form_state)) {
$response = new AjaxResponse();
unset($form['#prefix'], $form['#suffix']);
$form['status_messages'] = [
'#type' => 'status_messages',
'#weight' => -10,
];
$response
->addCommand(new HtmlCommand('#purgedialogform', $form));
return $response;
}
return parent::submitForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitFormSuccess(array &$form, FormStateInterface $form_state) {
$this
->config('purge_queuer_url.settings')
->set('queue_paths', $form_state
->getValue('queue_paths'))
->set('host_override', $form_state
->getValue('host_override'))
->set('host', $form_state
->getValue('host'))
->set('scheme_override', $form_state
->getValue('scheme_override'))
->set('scheme', $form_state
->getValue('scheme'))
->set('blacklist', $form_state
->getValue('blacklist'))
->save();
// Changes to the blacklist inevitably affect what should be in the registry
// and what URLs should not be. Because already cached page cache responses
// aren't checked in UrlRegistrar::determine(), wipe the render cache.
foreach (Cache::getBins() as $service_id => $cache_backend) {
if ($service_id === 'render') {
$cache_backend
->deleteAll();
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
CloseDialogTrait:: |
public | function | Respond a CloseModalDialogCommand to close the modal dialog. | |
ConfigFormBaseTrait:: |
protected | function | Retrieves a configuration object. | |
ConfigurationForm:: |
protected | property |
The Messenger service. Overrides MessengerTrait:: |
|
ConfigurationForm:: |
public | function | Adds more textfields to the blacklist fieldset. | |
ConfigurationForm:: |
public | function | Let the form rebuild the blacklist textfields. | |
ConfigurationForm:: |
public | function |
Form constructor. Overrides PluginConfigFormBase:: |
|
ConfigurationForm:: |
public static | function |
Instantiates a new instance of this class. Overrides ConfigFormBase:: |
|
ConfigurationForm:: |
protected | function |
Gets the configuration names that will be editable. Overrides ConfigFormBaseTrait:: |
|
ConfigurationForm:: |
public | function |
Returns a unique string identifying the form. Overrides FormInterface:: |
|
ConfigurationForm:: |
public | function | Submit handler that clears the traffic registry. | |
ConfigurationForm:: |
public | function |
Form submission handler only called when there are no validation errors. Overrides PluginConfigFormBase:: |
|
ConfigurationForm:: |
public | function |
Form validation handler. Overrides FormBase:: |
|
ConfigurationForm:: |
final public | function |
Constructs a ConfigurationForm object. Overrides ConfigFormBase:: |
|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FormBase:: |
protected | property | The config factory. | 1 |
FormBase:: |
protected | property | The request stack. | 1 |
FormBase:: |
protected | property | The route match. | |
FormBase:: |
protected | function | Gets the config factory for this form. | 1 |
FormBase:: |
private | function | Returns the service container. | |
FormBase:: |
protected | function | Gets the current user. | |
FormBase:: |
protected | function | Gets the request object. | |
FormBase:: |
protected | function | Gets the route match. | |
FormBase:: |
protected | function | Gets the logger for a specific channel. | |
FormBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
FormBase:: |
public | function | Resets the configuration factory. | |
FormBase:: |
public | function | Sets the config factory for this form. | |
FormBase:: |
public | function | Sets the request stack object to use. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginConfigFormBase:: |
public | function | Retrieve the ID for the plugin being configured. | |
PluginConfigFormBase:: |
public | function | Determine if this is a AJAX dialog request or not. | |
PluginConfigFormBase:: |
public | function |
Form submission handler. Overrides ConfigFormBase:: |
|
QueuerConfigFormBase:: |
protected | property |
The URL anchor in which the parent's opening button was located. Overrides PluginConfigFormBase:: |
|
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |