View source
<?php
namespace Drupal\simplifying\Services;
use Drupal\Core\Url;
use Drupal\Core\Render\Markup;
use Drupal\Core\Menu\MenuTreeParameters;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Extension\ModuleHandler;
use Drupal\Core\Menu\MenuLinkTree;
use Drupal\Core\Routing\CurrentRouteMatch;
class Toolbar {
use StringTranslationTrait;
protected $settingsactions;
protected $modulehandler;
protected $menutree;
protected $currentroutematch;
public function __construct(SettingsActions $settingsactions, ModuleHandler $modulehandler, MenuLinkTree $menutree, CurrentRouteMatch $currentroutematch) {
$this->settingsactions = $settingsactions;
$this->modulehandler = $modulehandler;
$this->menutree = $menutree;
$this->currentroutematch = $currentroutematch;
}
public function formFields(&$form, $form_state) {
$form['toolbar_design_wrapper'] = [
'#type' => 'details',
'#title' => $this
->t('Toolbar design'),
'#group' => 'tabs',
];
$defs = $this->settingsactions
->getSettings('design');
$form['toolbar_design_wrapper']['small_button'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Small button'),
'#parents' => [
'design',
'small_button',
],
'#default_value' => !empty($defs['small_button']) ? 1 : 0,
];
$form['toolbar_design_wrapper']['top_background'] = [
'#type' => 'color',
'#title' => $this
->t('Top menu background'),
'#parents' => [
'design',
'top_background',
],
'#default_value' => !empty($defs['top_background']) ? $defs['top_background'] : '#3A9F00',
];
$form['toolbar_design_wrapper']['top_color'] = [
'#type' => 'color',
'#title' => $this
->t('Top menu color'),
'#parents' => [
'design',
'top_color',
],
'#default_value' => !empty($defs['top_color']) ? $defs['top_color'] : '#000000',
];
$form['toolbar_design_wrapper']['submenu_background'] = [
'#type' => 'color',
'#title' => $this
->t('Submenu background'),
'#parents' => [
'design',
'submenu_background',
],
'#default_value' => !empty($defs['submenu_background']) ? $defs['submenu_background'] : '#555555',
];
$form['toolbar_tabs_wrapper'] = [
'#type' => 'details',
'#title' => $this
->t('Toolbar tabs'),
'#group' => 'tabs',
];
$form['toolbar_tabs_wrapper']['toolbar_tabs'] = [
'#type' => 'checkboxes',
'#title' => $this
->t('Toolbar tabs'),
'#title_display' => 'invisible',
'#options' => $this
->getDefaultToolbarTabs(),
'#default_value' => $this
->getToolbarTabs(),
];
$menu_tree_parameters = new MenuTreeParameters();
$tree = $this->menutree
->load('admin', $menu_tree_parameters);
$manipulators = [
[
'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
],
];
$tree = $this->menutree
->transform($tree, $manipulators);
$options = [];
$tree_rout = '';
$this
->treeOptions($tree, $options, $tree_rout);
$defs = $this->settingsactions
->getSettings('menu_links');
$form['menu_links'] = [
'#type' => 'details',
'#title' => $this
->t('Menu links'),
'#group' => 'tabs',
];
$checkboxses = [];
foreach ($options as $key => $val) {
$disabled = in_array($val['path'], $checkboxses) ? TRUE : FALSE;
$checkboxses[] = $val['path'];
$form['menu_links'][$key] = [
'#prefix' => Markup::create('<div style="padding-left: ' . ($val['depth'] - 1) * 20 . 'px;">'),
'#suffix' => '</div>',
'#type' => 'checkbox',
'#parents' => [
'menu_links',
$val['path'],
],
'#title' => $val['title'],
'#disabled' => $disabled,
];
if (in_array($val['path'], $defs)) {
$form['menu_links'][$key]['#default_value'] = 1;
}
}
}
public function treeOptions($tree, &$options, $tree_rout) {
if (isset($tree['system.admin'])) {
$tree = [
'system.admin' => $tree['system.admin'],
];
}
foreach ($tree as $rout => $val) {
$new_tree_rout = $tree_rout . ' | ' . $rout;
if (!empty($val->link)) {
$link = $val->link;
if ($link
->getRouteName()) {
$path = Url::fromRoute($link
->getRouteName(), $link
->getRouteParameters(), $link
->getOptions())
->getInternalPath();
if (!empty($path)) {
$title = $link
->getTitle();
$options[$new_tree_rout] = [
'title' => $title,
'depth' => $val->depth,
'path' => $path,
'rout' => $rout,
];
}
}
}
if (!empty($val->subtree)) {
$this
->treeOptions($val->subtree, $options, $new_tree_rout);
}
}
}
public function toolbarTabs(&$items) {
$design = $this->settingsactions
->getSettings('design');
$route_name = $this->currentroutematch
->getRouteName();
if ($this->modulehandler
->moduleExists('webform') || $this->modulehandler
->moduleExists('comment')) {
$class = [
'toolbar-icon',
'toolbar-icon-simplifying_unread',
];
$tab_name = $this
->t('Submissions');
$items['simplifying_unread'] = [
'#type' => 'toolbar_item',
'#cache' => [
'max-age' => 0,
],
'#wrapper_attributes' => [
'class' => [
'toolbar_simplifying_unread',
],
],
'tray' => [
'#heading' => $tab_name,
'unread_menu' => [
'#theme' => 'item_list',
'#items' => [],
'#attributes' => [
'class' => [
'toolbar-menu',
'simplifying-unread-menu',
],
],
],
],
'#weight' => 1000,
'tab' => [
'#type' => 'html_tag',
'#tag' => 'button',
'#value' => $tab_name,
'#attributes' => [
'class' => $class,
],
],
];
$unread_count = 0;
if ($this->modulehandler
->moduleExists('webform')) {
$webforms = \Drupal::entityTypeManager()
->getStorage('webform')
->loadMultiple();
foreach ($webforms as $webform) {
$query = \Drupal::database()
->select('simplifying_entity_unread', 'u');
$query
->condition('u.entity_type', 'webform_submission');
$query
->condition('u.bundle', $webform
->id());
$count = $query
->countQuery()
->execute()
->fetchField();
$unread_count += $count;
$class = [];
if ($route_name == 'entity.webform.results_submissions') {
$route_webform = $this->currentroutematch
->getParameter('webform');
if (isset($route_webform) && $route_webform
->id() == $webform
->id()) {
$class[] = 'is-active';
}
}
$items['simplifying_unread']['tray']['unread_menu']['#items'][$webform
->id()] = [
'#type' => 'link',
'#title' => $webform
->get('title') . (!empty($count) ? ' (' . $count . ')' : ''),
'#url' => Url::fromRoute('entity.webform.results_submissions', [
'webform' => $webform
->id(),
]),
'#attributes' => [
'class' => $class,
],
'#wrapper_attributes' => [
'class' => [
'menu-item',
'menu-item--' . $webform
->id(),
],
],
];
}
ksort($items['simplifying_unread']['tray']['unread_menu']['#items']);
}
if ($this->modulehandler
->moduleExists('comment')) {
$query = \Drupal::database()
->select('simplifying_entity_unread', 'u');
$query
->condition('u.entity_type', 'comment');
$count = $query
->countQuery()
->execute()
->fetchField();
$unread_count += $count;
$class = [];
if ($route_name == 'comment.admin') {
$class[] = 'is-active';
}
$items['simplifying_unread']['tray']['unread_menu']['#items']['comment'] = [
'#type' => 'link',
'#title' => $this
->t('Comments') . (!empty($count) ? ' (' . $count . ')' : ''),
'#url' => Url::fromRoute('comment.admin'),
'#attributes' => [
'class' => $class,
],
'#wrapper_attributes' => [
'class' => [
'menu-item',
'menu-item--comment',
],
],
];
}
if (!empty($unread_count)) {
$items['simplifying_unread']['tab']['#value'] .= ' (' . $unread_count . ')';
}
}
$class = [
'toolbar-icon',
'toolbar-icon-simplifying_switch',
];
$tab_name = $this
->t('Glyanec');
$items['simplifying'] = [
'#type' => 'toolbar_item',
'#cache' => [
'max-age' => 0,
],
'#wrapper_attributes' => [
'class' => [
'toolbar_simplifying',
'toolbar_simplifying_switch',
],
],
'tray' => [
'#heading' => $tab_name,
'simplifying_menu' => [
'#theme' => 'item_list',
'#items' => [],
'#attributes' => [
'class' => [
'toolbar-menu',
'simplifying-menu',
],
],
],
],
'#attached' => [
'library' => [
'simplifying/simplifying',
],
],
'#weight' => 1001,
'tab' => [
'#type' => 'html_tag',
'#tag' => 'button',
'#value' => $tab_name,
'#attributes' => [
'class' => $class,
],
],
];
if (!empty($design['small_button'])) {
$items['simplifying']['tab']['#attributes']['class'][] = 'small_button';
$items['simplifying']['tab']['#attributes']['title'] = $tab_name;
}
$items['simplifying']['#attached']['drupalSettings']['simplifying_menu_links'] = $this->settingsactions
->getSettings('menu_links');
$toolbar_tabs = $this
->getToolbarTabs();
$this->modulehandler
->alter('simplifying_hide_toolbar_tabs', $toolbar_tabs);
$items['simplifying']['#attached']['drupalSettings']['simplifying_menu_tabs'] = $toolbar_tabs;
$styles = [];
if (!empty($design['top_background'])) {
$styles[] = '#toolbar-bar{ background-color: ' . $design['top_background'] . '; }';
}
if (!empty($design['top_color'])) {
$styles[] = '.toolbar .toolbar-bar .toolbar-item{ color: ' . $design['top_color'] . '; }';
}
if (!empty($design['submenu_background'])) {
$styles[] = '#toolbar-item-administration-tray{ background-color: ' . $design['submenu_background'] . '; }';
}
if (!empty($styles)) {
$items['simplifying']['tab']['#suffix'] = Markup::create('<style>' . implode($styles) . '</style>');
}
$class = [
'toolbar-icon',
'toolbar-icon-simplifying_minify',
];
$text = $this
->t('Full administration');
if (!empty($_COOKIE['simplifying'])) {
$class[] = 'is-active';
$text .= ' (' . $this
->t('on') . ')';
}
else {
$text .= ' (' . $this
->t('off') . ')';
}
$items['simplifying']['tray']['simplifying_menu']['#items']['minify'] = [
'#type' => 'link',
'#title' => $text,
'#url' => Url::fromUserInput('#'),
'#attributes' => [
'class' => $class,
'onclick' => 'SimplifyingSwitch(event, this)',
],
'#wrapper_attributes' => [
'class' => [
'menu-item',
'menu-item--minify',
],
],
];
$class = [
'toolbar-icon',
'toolbar-icon-simplifying_services',
];
if ($route_name == 'simplifying.services') {
$class[] = 'is-active';
}
$items['simplifying']['tray']['simplifying_menu']['#items']['services'] = [
'#type' => 'link',
'#title' => $this
->t('Order additional services'),
'#url' => Url::fromRoute('simplifying.services'),
'#attributes' => [
'class' => $class,
],
'#wrapper_attributes' => [
'class' => [
'menu-item',
'menu-item--services',
],
],
];
$class = [
'toolbar-icon',
'toolbar-icon-simplifying_training',
];
if ($route_name == 'simplifying.training') {
$class[] = 'is-active';
}
$items['simplifying']['tray']['simplifying_menu']['#items']['training'] = [
'#type' => 'link',
'#title' => $this
->t('Training'),
'#url' => Url::fromRoute('simplifying.training'),
'#attributes' => [
'class' => $class,
],
'#wrapper_attributes' => [
'class' => [
'menu-item',
'menu-item--training',
],
],
];
}
public function getToolbarTabs() {
$toolbar_tabs = $this->settingsactions
->getSettings('toolbar_tabs');
if (empty($toolbar_tabs)) {
$toolbar_tabs = [
'devel',
'user',
'administration_search',
];
}
return array_filter($toolbar_tabs);
}
public function getDefaultToolbarTabs() {
return [
'home' => $this
->t('Back to site'),
'administration' => $this
->t('Manage'),
'shortcuts' => $this
->t('Shortcuts'),
'user' => $this
->t('User'),
'devel' => $this
->t('Devel'),
'contextual' => $this
->t('Edit'),
'administration-search' => $this
->t('Administration search'),
];
}
public function entityInsert($entity) {
$entity_type_id = $entity
->getEntityTypeId();
if ($entity_type_id == 'webform_submission' || $entity_type_id == 'comment') {
$entity_bundle = $entity
->bundle();
$query = \Drupal::database()
->insert('simplifying_entity_unread');
$query
->fields([
'entity_type' => $entity_type_id,
'bundle' => $entity_bundle,
'entity_id' => $entity
->id(),
]);
$query
->execute();
}
}
public function entityDelete($entity_type, $bundle, $entity_id) {
$query = \Drupal::database()
->delete('simplifying_entity_unread');
$query
->condition('entity_type', $entity_type);
$query
->condition('bundle', $bundle);
$query
->condition('entity_id', $entity_id);
$query
->execute();
}
public function entityReadingRoute() {
switch ($this->currentroutematch
->getRouteName()) {
case 'entity.webform.results_submissions':
$webform = $this->currentroutematch
->getParameter('webform');
if (!empty($webform)) {
$query = \Drupal::database()
->delete('simplifying_entity_unread');
$query
->condition('entity_type', 'webform_submission');
$query
->condition('bundle', $webform
->id());
$query
->execute();
}
break;
case 'comment.admin':
case 'comment.admin_approval':
$query = \Drupal::database()
->delete('simplifying_entity_unread');
$query
->condition('entity_type', 'comment');
$query
->execute();
break;
}
}
}