admin_toolbar_content-1.0.0/src/Form/AdminToolbarContentSettingsForm.php
src/Form/AdminToolbarContentSettingsForm.php
<?php
namespace Drupal\admin_toolbar_content\Form;
use Drupal\admin_toolbar_content\AdminToolbarContentPluginManagerInterface;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Config\TypedConfigManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Menu\MenuLinkManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Settings form for Admin Toolbar Content.
*
* @package Drupal\admin_toolbar_content\Form
*/
class AdminToolbarContentSettingsForm extends ConfigFormBase {
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* The admin toolbar content plugin manager.
*
* @var \Drupal\admin_toolbar_content\AdminToolbarContentPluginManagerInterface
*/
protected AdminToolbarContentPluginManagerInterface $pluginManager;
/**
* The menu link manager.
*
* @var \Drupal\Core\Menu\MenuLinkManagerInterface
*/
protected $menuLinkManager;
/**
* Constructs a AdminToolbarContentSettingsForm object.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
* The factory for configuration objects.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler.
* @param \Drupal\admin_toolbar_content\AdminToolbarContentPluginManagerInterface $pluginManager
* The admin toolbar content plugin manager.
* @param \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager
* The menu link manager.
* @param \Drupal\Core\Config\TypedConfigManagerInterface $typedConfigManager
* The typed config manager.
*/
public function __construct(ConfigFactoryInterface $configFactory, ModuleHandlerInterface $module_handler, AdminToolbarContentPluginManagerInterface $pluginManager, MenuLinkManagerInterface $menu_link_manager, TypedConfigManagerInterface $typedConfigManager) {
parent::__construct($configFactory, $typedConfigManager);
$this->moduleHandler = $module_handler;
$this->pluginManager = $pluginManager;
$this->menuLinkManager = $menu_link_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('config.factory'),
$container->get('module_handler'),
$container->get('admin_toolbar_content.manager'),
$container->get('plugin.manager.menu.link'),
$container->get('config.typed')
);
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'admin_toolbar_content';
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return [
'admin_toolbar_content.settings',
];
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state): array {
$form = parent::buildForm($form, $form_state);
$config = $this->config('admin_toolbar_content.settings');
$form['#title'] = $this->t('Admin Toolbar Content');
$form['#attached']['library'][] = 'field_group/element.horizontal_tabs';
$form['tabs'] = [
'#type' => 'horizontal_tabs',
'#prefix' => '<div id="police-site-configuration-form-horizontal-tabs-wrapper">',
'#suffix' => '</div>',
];
$form['tabs']['common'] = [
'#type' => 'details',
'#title' => $this->t('Common'),
'#tree' => TRUE,
'#weight' => -99,
];
$form['tabs']['common']['hide_empty_collections'] = [
'#type' => 'checkbox',
'#title' => $this->t("Hide empty collections"),
'#description' => $this->t("Hide empty collection menu items."),
'#default_value' => $config->get('common.hide_empty_collections') ?? 0,
];
$form['tabs']['common']['group_collections'] = [
'#type' => 'radios',
'#title' => $this->t("Group collections"),
'#description' => $this->t("Group collections to a specific place."),
'#options' => [
'' => $this->t("Don't Group"),
'bottom' => $this->t("At bottom"),
'top' => $this->t("At top"),
],
'#default_value' => $config->get('common.group_collections') ?? '',
];
$plugins = $this->pluginManager->getDefinitions();
foreach ($plugins as $plugin_id => $definition) {
try {
/** @var \Drupal\admin_toolbar_content\AdminToolbarContentPluginInterface $plugin */
$plugin = $this->pluginManager->createInstance($plugin_id, $definition);
// Plugin tab.
$form['tabs'][$plugin_id] = [
'#type' => 'details',
'#title' => $definition['name'],
'#tree' => TRUE,
];
// Plugin specific settings.
$form['tabs'][$plugin_id] = $plugin->buildConfigForm($form, $form_state) + (array) $form['tabs'][$plugin_id];
}
catch (PluginException $e) {
// Silently continue if plugin is not found.
}
}
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
// Prepare values.
$form_state->addCleanValueKey('tabs__active_tab');
$form_state->cleanValues();
$values = $form_state->getValues();
// Move submitted plugin values into the 'plugins' key.
$values['plugins'] = [];
$plugins = $this->pluginManager->getDefinitions();
foreach ($plugins as $plugin_id => $definition) {
$values['plugins'][$plugin_id] = $values[$plugin_id];
unset($values[$plugin_id]);
}
// Save the config.
$config = $this->config('admin_toolbar_content.settings');
$config->setData($values);
$config->save();
// Clear cache so admin menu can rebuild.
$this->menuLinkManager->rebuild();
parent::submitForm($form, $form_state);
}
}
