3 namespace Drupal\devel\Form;
5 use Drupal\Core\Config\ConfigFactoryInterface;
6 use Drupal\Core\Form\ConfigFormBase;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\Core\Menu\MenuLinkTreeInterface;
9 use Drupal\Core\Menu\MenuTreeParameters;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Configures devel toolbar settings.
15 class ToolbarSettingsForm extends ConfigFormBase {
18 * The menu link tree service.
20 * @var \Drupal\Core\Menu\MenuLinkTree
22 protected $menuLinkTree;
25 * ToolbarSettingsForm constructor.
27 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
29 * @param \Drupal\Core\Menu\MenuLinkTreeInterface $menu_link_tree
30 * The menu link tree service.
32 public function __construct(ConfigFactoryInterface $config_factory, MenuLinkTreeInterface $menu_link_tree) {
33 parent::__construct($config_factory);
34 $this->menuLinkTree = $menu_link_tree;
40 public static function create(ContainerInterface $container) {
42 $container->get('config.factory'),
43 $container->get('menu.link_tree')
50 public function getFormId() {
51 return 'devel_toolbar_settings_form';
57 protected function getEditableConfigNames() {
59 'devel.toolbar.settings',
66 public function buildForm(array $form, FormStateInterface $form_state) {
67 $config = $this->config('devel.toolbar.settings');
69 $form['toolbar_items'] = [
70 '#type' => 'checkboxes',
71 '#title' => $this->t('Menu items always visible'),
72 '#options' => $this->getLinkLabels(),
73 '#default_value' => $config->get('toolbar_items') ?: [],
75 '#description' => $this->t('Select the menu items always visible in devel toolbar tray. All the items not selected in this list will be visible only when the toolbar orientation is vertical.'),
78 return parent::buildForm($form, $form_state);
84 public function submitForm(array &$form, FormStateInterface $form_state) {
85 $values = $form_state->getValues();
86 $toolbar_items = array_keys(array_filter($values['toolbar_items']));
88 $this->config('devel.toolbar.settings')
89 ->set('toolbar_items', $toolbar_items)
92 parent::submitForm($form, $form_state);
96 * Provides an array of available menu items.
99 * Associative array of devel menu item labels keyed by plugin ID.
101 protected function getLinkLabels() {
104 $parameters = new MenuTreeParameters();
105 $parameters->onlyEnabledLinks()->setTopLevelOnly();
106 $tree = $this->menuLinkTree->load('devel', $parameters);
108 foreach ($tree as $element) {
109 $link = $element->link;
110 $options[$link->getPluginId()] = $link->getTitle();