hn-8.x-1.x-dev/modules/hn_cleaner/src/Form/SettingsForm.php
modules/hn_cleaner/src/Form/SettingsForm.php
<?php namespace Drupal\hn_cleaner\Form; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; /** * Class ConfigForm. */ class SettingsForm extends ConfigFormBase { /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'hn_cleaner.settings', ]; } /** * {@inheritdoc} */ public function getFormId() { return 'hn_cleaner_settings'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('hn_cleaner.settings'); $entity_types = \Drupal::entityTypeManager()->getDefinitions(); $form['entities'] = [ '#type' => 'fieldset', '#title' => $this->t('Hide entities'), ]; $form['fields'] = [ '#type' => 'fieldset', '#title' => $this->t('Hide fields'), ]; foreach ($entity_types as $entity_type_id => $entity_type) { $form['entities']['disable_entity_' . $entity_type_id] = [ '#type' => 'checkbox', '#title' => $entity_type->getLabel() . ' (' . $entity_type_id . ')', '#default_value' => in_array($entity_type_id, $config->get('entities')), ]; if ($entity_type->entityClassImplements(FieldableEntityInterface::class)) { $form['fields'][$entity_type_id] = [ '#type' => 'details', '#title' => $entity_type->getLabel() . ' (' . $entity_type_id . ')', '#states' => [ 'invisible' => [ ':input[name="disable_entity_' . $entity_type_id . '"]' => ['checked' => TRUE], ], ], ]; $fields = \Drupal::entityManager()->getBaseFieldDefinitions($entity_type_id); foreach ($fields as $field_id => $field) { $field_title = $field_id; if ($field->getLabel()) { $field_title .= ' (' . $field->getLabel() . ')'; } $form['fields'][$entity_type_id]['disable_entity_' . $entity_type_id . '_field_' . $field_id] = [ '#type' => 'checkbox', '#title' => $field_title, '#default_value' => !empty($config->get('fields')[$entity_type_id]) && in_array($field_id, $config->get('fields')[$entity_type_id]), ]; } } } return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); $entities = []; $fields = []; foreach (\Drupal::entityTypeManager()->getDefinitions() as $entity_type_id => $entity_type) { if (!empty($values['disable_entity_' . $entity_type_id])) { $entities[] = $entity_type_id; } if ($entity_type->entityClassImplements(FieldableEntityInterface::class)) { foreach (\Drupal::entityManager()->getBaseFieldDefinitions($entity_type_id) as $field_id => $field) { if (!empty($values['disable_entity_' . $entity_type_id . '_field_' . $field_id])) { $fields[$entity_type_id][] = $field_id; } } } } // Save the config. $this->config('hn_cleaner.settings') ->set('entities', $entities) ->set('fields', $fields) ->save(); parent::submitForm($form, $form_state); } }