You are here

public function SettingsForm::buildForm in AJAX Comments 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/SettingsForm.php, line 91

Class

SettingsForm
Configure 'ajax comments' settings for this site.

Namespace

Drupal\ajax_comments\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('ajax_comments.settings');
  $field_list = $this->entityTypeManager
    ->getStorage('field_storage_config')
    ->loadMultiple();
  $field_ui_exists = $this->moduleHandler
    ->moduleExists('field_ui');
  $description = $field_ui_exists ? $this
    ->t('These entity types and bundles have comment fields. You can enable or disable Ajax Comments on the field display settings. Click the links to visit the field display settings edit forms. Ajax Comments is enabled by default on all comment fields.') : $this
    ->t('These entity types and bundles have comment fields. You can enable or disable Ajax Comments on the field display settings. Enable the Field UI module to edit the field display settings. Ajax Comments is enabled by default on all comment fields.');
  $form['entity_bundles'] = [
    '#type' => 'fieldset',
    '#title' => t("Enable Ajax Comments on the comment fields' display settings"),
    '#description' => $description,
  ];
  $links = [];
  foreach ($field_list as $field_storage_config) {
    if ($field_storage_config
      ->getType() === 'comment') {
      $entity_type_id = $field_storage_config
        ->getTargetEntityTypeId();

      /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
      $entity_type = $this->entityTypeManager
        ->getDefinition($entity_type_id);

      // Load label info for the bundles of entity type $entity_type_id.
      $bundle_info = $this->entityTypeBundleInfo
        ->getBundleInfo($entity_type_id);

      // Load a list of bundles that use the current field configuration.
      $bundles = $field_storage_config
        ->getBundles();
      foreach ($bundles as $bundle) {

        // Create the link label.
        $bundle_label = $bundle_info[$bundle]['label'];
        $entity_type_label = $entity_type
          ->getLabel()
          ->render();
        $label = $entity_type_label . ': ' . $bundle_label;

        // Create the render array for the link to edit the display mode.
        if ($field_ui_exists) {
          $links[$entity_type_id . '.' . $bundle] = [
            '#type' => 'link',
            '#title' => $label,
            '#url' => Url::fromRoute('entity.entity_view_display.' . $entity_type_id . '.default', FieldUI::getRouteBundleParameter($entity_type, $bundle)),
          ];
        }
        else {
          $links[$entity_type_id . '.' . $bundle] = [
            '#markup' => $label,
          ];
        }
      }
    }
  }
  $form['entity_bundles']['links'] = [
    '#theme' => 'item_list',
    '#list_type' => 'ul',
    '#items' => $links,
  ];
  $form['notify'] = [
    '#title' => $this
      ->t('Add notification message when comment posted'),
    '#type' => 'checkbox',
    '#default_value' => $config
      ->get('notify'),
  ];
  $form['enable_scroll'] = [
    '#title' => $this
      ->t('Enable scrolling events'),
    '#type' => 'checkbox',
    '#default_value' => $config
      ->get('enable_scroll'),
  ];
  $form['reply_autoclose'] = [
    '#title' => t('Autoclose any opened reply forms'),
    '#type' => 'checkbox',
    '#default_value' => $config
      ->get('reply_autoclose'),
  ];
  return parent::buildForm($form, $form_state);
}