View source
<?php
namespace Drupal\ajax_comments\Form;
use Drupal\field_ui\FieldUI;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityListBuilderInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class SettingsForm extends ConfigFormBase {
protected $entityTypeManager;
protected $entityTypeBundleInfo;
protected $moduleHandler;
public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, ModuleHandlerInterface $module_handler) {
parent::__construct($config_factory);
$this->entityTypeManager = $entity_type_manager;
$this->entityTypeBundleInfo = $entity_type_bundle_info;
$this->moduleHandler = $module_handler;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('entity_type.manager'), $container
->get('entity_type.bundle.info'), $container
->get('module_handler'));
}
public function getFormID() {
return 'ajax_comments_settings';
}
protected function getEditableConfigNames() {
return [
'ajax_comments.settings',
];
}
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();
$entity_type = $this->entityTypeManager
->getDefinition($entity_type_id);
$bundle_info = $this->entityTypeBundleInfo
->getBundleInfo($entity_type_id);
$bundles = $field_storage_config
->getBundles();
foreach ($bundles as $bundle) {
$bundle_label = $bundle_info[$bundle]['label'];
$entity_type_label = $entity_type
->getLabel()
->render();
$label = $entity_type_label . ': ' . $bundle_label;
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);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$this
->config('ajax_comments.settings')
->set('notify', $form_state
->getValue('notify'))
->set('enable_scroll', $form_state
->getValue('enable_scroll'))
->set('reply_autoclose', $form_state
->getValue('reply_autoclose'))
->save();
parent::submitForm($form, $form_state);
}
}