From 28507c2a88ea04db73aa0ede7cc3ac2ff72027ef Mon Sep 17 00:00:00 2001 From: TAKTAK Date: Tue, 19 May 2015 16:06:17 +0100 Subject: [PATCH] add new fonctionalities --- admin_toolbar.info | 1 - admin_toolbar.module | 2 +- .../admin_toolbar_tools.links.menu.yml | 94 ++++++- .../admin_toolbar_tools.module | 234 +++++++++++++++++- .../admin_toolbar_tools.routing.yml | 9 +- .../src/Controller/ToolbarController.php | 33 ++- css/admin.toolbar.css | 6 + 7 files changed, 365 insertions(+), 14 deletions(-) delete mode 100644 admin_toolbar.info diff --git a/admin_toolbar.info b/admin_toolbar.info deleted file mode 100644 index 46c0e07..0000000 --- a/admin_toolbar.info +++ /dev/null @@ -1 +0,0 @@ -name = Admin toolbar diff --git a/admin_toolbar.module b/admin_toolbar.module index aefd55c..b48ff57 100644 --- a/admin_toolbar.module +++ b/admin_toolbar.module @@ -80,7 +80,7 @@ function toolbar_prerender_admin_toolbar_administration_tray(array $element) { $menu_tree = \Drupal::menuTree(); // Render the top-level administration menu links. $parameters = new \Drupal\Core\Menu\MenuTreeParameters(); - $parameters->setRoot('system.admin')->excludeRoot()->setMaxDepth(3); + $parameters->setRoot('system.admin')->excludeRoot()->setMaxDepth(4); $tree = $menu_tree->load(NULL, $parameters); $manipulators = array( array('callable' => 'menu.default_tree_manipulators:checkAccess'), diff --git a/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml b/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml index ec4550d..8143d86 100644 --- a/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml +++ b/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml @@ -27,6 +27,10 @@ admin_toolbar_tools.flush_static: title: Static caches route_name: admin_toolbar_tools.flush_static parent: admin_toolbar_tools.flush +admin_toolbar_tools.flush_menu: + title: Menu + route_name: admin_toolbar_tools.flush_menu + parent: admin_toolbar_tools.flush system.run_cron: title: Run cron weight: -8 @@ -56,4 +60,92 @@ admin_development: title: Development weight: -8 route_name: admin_development - parent: admin_toolbar_tools.help \ No newline at end of file + parent: admin_toolbar_tools.help +update.module_update: + title: Update + route_name: update.module_update + parent: system.modules_list + weight: -1 +system.modules_uninstall: + title: Uninstall + route_name: system.modules_uninstall + parent: system.modules_list + weight: -2 +update.module_install: + title: Install new module + route_name: update.module_install + parent: system.modules_list + weight: -3 +#add menu to people +user.admin_create: + title: Add user + route_name: user.admin_create + parent: entity.user.collection + weight: -5 +user.admin_permissions: + title: Permissions + route_name: user.admin_permissions + parent: entity.user.collection + weight: -4 +user.admin_create: + title: Add user + route_name: user.admin_create + parent: entity.user.collection + weight: -3 +entity.user_role.collection: + title: Roles + route_name: entity.user_role.collection + parent: entity.user.collection + weight: -2 +node.add_page: + parent: system.admin_content +node.type_add: + title: Add content type + route_name: node.type_add + parent: entity.node_type.collection + weight: -5 +entity.taxonomy_vocabulary.add_form: + title: Add vocabulary + route_name: entity.taxonomy_vocabulary.add_form + parent: entity.taxonomy_vocabulary.collection + weight: -5 +entity.comment_type.add_form: + title: Add comment type + route_name: entity.comment_type.add_form + parent: entity.comment_type.collection + weight: -5 +entity.menu.add_form: + title: Add menu + route_name: entity.menu.add_form + parent: entity.menu.collection + weight: -50 +block_content.add_page: + title: Add custom block + route_name: block_content.add_page + parent: block.admin_display + weight: -5 +entity.block_content.collection: + title: Custom block library + route_name: entity.block_content.collection + parent: block.admin_display + weight: -4 +entity.block_content_type.collection: + title: Types + route_name: entity.block_content_type.collection + parent: block.admin_display + weight: -3 +block_content.type_add: + title: Add + route_name: block_content.type_add + parent: entity.block_content_type.collection + weight: -5 +contact.form_add: + title: Add contact form + route_name: contact.form_add + parent: entity.contact_form.collection + weight: -5 +#links comments +comment.admin_approval: + title: Unapproved comments + route_name: comment.admin_approval + parent: comment.admin \ No newline at end of file diff --git a/admin_toolbar_tools/admin_toolbar_tools.module b/admin_toolbar_tools/admin_toolbar_tools.module index db3bfa5..da32e89 100644 --- a/admin_toolbar_tools/admin_toolbar_tools.module +++ b/admin_toolbar_tools/admin_toolbar_tools.module @@ -2,7 +2,6 @@ use Drupal\Core\Routing\RouteMatchInterface; - // add css and icon in toolbar /** * Implements hook_toolbar(). @@ -40,6 +39,7 @@ function admin_toolbar_tools_help($route_name, RouteMatchInterface $route_match) * Implements hook_menu_links_discovered_alter(). */ function admin_toolbar_tools_menu_links_discovered_alter(&$links) { + if (\Drupal::moduleHandler()->moduleExists('devel')) { $links['devel.admin_settings'] = array( 'title' => 'Devel settings', @@ -101,10 +101,240 @@ function admin_toolbar_tools_menu_links_discovered_alter(&$links) { 'route_name' => 'devel.run_cron', 'parent' => 'admin_development' ); + + } + // Adding links to /admin/structure/menu + $menu_titles = menu_ui_get_menus(); + foreach ($menu_titles as $key => $value) { + $links['entity.menu.edit_form' . '_' . $key] = array( + 'title' => $value, + 'route_name' => 'entity.menu.edit_form', + 'parent' => 'entity.menu.collection', + 'route_parameters' => array( + 'menu' => $key + ) + ); + } + // adding /node/add/{node_type}; + $node_types = node_type_get_names(); + foreach ($node_types as $machine_name_node_type => $name_node_type) { + $links['node.add' . $machine_name_node_type] = array( + 'title' => $name_node_type, + 'route_name' => 'node.add', + 'parent' => 'node.add_page', + 'route_parameters' => array( + 'node_type' => $machine_name_node_type + ) + ); + $links['node.type' . $machine_name_node_type] = array( + 'title' => $name_node_type, + 'route_name' => 'entity.node_type.edit_form', + 'parent' => 'entity.node_type.collection', + 'route_parameters' => array( + 'node_type' => $machine_name_node_type + ) + ); + $links['node.delete.type' . $machine_name_node_type] = array( + 'title' => $name_node_type, + 'route_name' => 'entity.node_type.edit_form', + 'parent' => 'node_type.edit', + 'route_parameters' => array( + 'node_type' => $machine_name_node_type + ) + ); + } +// add taxonomy links + $taxo_vocab = taxonomy_get_vocabulary(); + foreach ($taxo_vocab as $machine_name_taxo_vocab => $value_taxo_vocab) { + $links['entity.taxonomy_vocabulary.edit_form' . $machine_name_taxo_vocab] = array( + 'title' => $value_taxo_vocab, + 'route_name' => 'entity.taxonomy_vocabulary.edit_form', + 'parent' => 'entity.taxonomy_vocabulary.collection', + 'route_parameters' => array( + 'taxonomy_vocabulary' => $machine_name_taxo_vocab + ) + ); + } + // add comments links + $comments = comments_get_names(); + foreach ($comments as $machine_name_comments => $name_comments) { + $links['entity.comment_type.edit_form' . $machine_name_comments] = array( + 'title' => $name_comments, + 'route_name' => 'entity.comment_type.edit_form', + 'parent' => 'entity.comment_type.collection', + 'route_parameters' => array( + 'comment_type' => $machine_name_comments + ) + ); + } + //adding links /admin/structure/contact +$contacts_form = contact_message_get_names(); + foreach($contacts_form as $machine_name_contact_form => $name_contact_form){ + $links['entity.comment_type.edit_form' . $machine_name_contact_form] = array( + 'title' => $name_contact_form, + 'route_name' => 'entity.contact_form.edit_form', + 'parent' => 'entity.contact_form.collection', + 'route_parameters' => array( + 'contact_form' => $machine_name_contact_form + ) + ); + } + + //addling links to /admin/structure/people + $prefix_people_child = "/admin/people"; + $parents = delete_child_like_parent($prefix_people_child); + $user_roles = extract_label_id_user_role(); + foreach ($parents as $route_name_parents => $values_parents) { + foreach ($values_parents as $keyChild => $valueChild) { + if (is_numeric($keyChild)) { + foreach ($user_roles as $id_user_role => $label_user_role) { + $links[$keyChild . $id_user_role] = array( + 'title' => $label_user_role, + 'route_name' => $valueChild, + 'parent' => $route_name_parents, + 'route_parameters' => array( + 'user_role' => $id_user_role + ) + ); + } + } + else { + $links[$keyChild . $valueChild] = array( + 'title' => "Add role", + 'route_name' => $valueChild, + 'parent' => $route_name_parents, + 'weight' => -5 + ); + } + } } - $links['node.add_page']['parent'] = 'system.admin_content'; return $links; +} +// Get machine name and label of entity (bundle: taxonomy vocabulary). +function taxonomy_get_vocabulary() { + return array_map(function ($bundle_info) { + return $bundle_info['label']; + }, \Drupal::entityManager()->getBundleInfo('taxonomy_term')); +} +// Get machine name and label of entity (bundle: contact message). +function contact_message_get_names(){ + return array_map(function ($bundle_info) { + return $bundle_info['label']; + }, \Drupal::entityManager()->getBundleInfo('contact_message')); +} +// Get machine name and label of entity (bundle: comments). +function comments_get_names() { + return array_map(function ($bundle_info) { + return $bundle_info['label']; + }, \Drupal::entityManager()->getBundleInfo('comment')); +} +// Get machine name and label of entity (bundle: block). +function block_get_names() { + return array_map(function ($bundle_info) { + return $bundle_info['label']; + }, \Drupal::entityManager()->getBundleInfo('block_content')); +} + +// Extract label and id of all users role. +function extract_label_id_user_role() { + $roles_obj = user_roles(); + $roles = array(); + foreach ($roles_obj as $role) { + $roles[$role->id()] = $role->label(); + } + return $roles; +} +// Select all path +function db_select_router_path($prefix, $display_placeholder_path = FALSE) { + $results = db_select_router($prefix); + foreach ($results as $key => $value) { + $key = $value->path; + if ($display_placeholder_path == TRUE) { + if (!(substr_count($value->path, "{") != 0)) { + $list[$key] = $value->name; + } + } + else { + $list[$key] = $value->name; + } + } + asort($list); + return $list; +} +// Select all route from router table. +function db_select_router_route($prefix, $display_placeholder_path = FALSE) { + $results = db_select_router($prefix); + foreach ($results as $key => $value) { + $key = $value->name; + if ($display_placeholder_path == TRUE) { + if (!(substr_count($value->path, "{") != 0)) { + $list[$key] = $value->path; + } + } + else { + $list[$key] = $value->path; + } + } + asort($list); + return $list; } +// Select table router from db and filter result with a prefix. +function db_select_router($prefix) { + return db_select('router', 't') + ->fields('t', array('path', 'name', 'number_parts')) + ->condition('path', db_like($prefix) . '%', 'LIKE') + ->execute(); +} + +// Retrieve the last element of the path = title of the page. +function last_element_path($keys_paths) { + $titles = array(); + foreach ($keys_paths as $keys_path) { + $titles[] = ucfirst(end(explode("/", $keys_path))); + } + return $titles; +} + +// Extract child and parent route from prefix and parents +function extract_repeated_path_in_array($prefix) { + $parents_path = array_keys(db_select_router_path($prefix . "/")); + $parents_route = array_values(db_select_router_path($prefix . "/")); + + $routes = array_values(db_select_router_path($prefix)); + $paths = array_keys(db_select_router_path($prefix)); + $child = array(); + $groupped_child = array(); + for ($j = 0; $j < count($parents_path); $j++) { + unset($child); + for ($i = 0; $i < count($paths); $i++) { + if (substr_count($paths[$i], $parents_path[$j]) != 0) { + if (!(substr_count($paths[$i], '{') != 0)) { + $child["without"] = $routes[$i]; + } + else { + $child[$i] = $routes[$i]; + } + } + } + if (count($child) > 1) { + $groupped_child[$parents_route[$j]] = $child; + } + } + return $groupped_child; +} +// Delete all child which have the same route with parent. +function delete_child_like_parent($prefix) { + $list_parents = extract_repeated_path_in_array($prefix); + $list_changed = $list_parents; + foreach ($list_changed as $list_parent => $valueParent) { + foreach ($valueParent as $childKey => $childValue) { + if ($list_parent == $childValue) { + unset($list_changed[$list_parent][$childKey]); + } + } + } + return $list_changed; +} diff --git a/admin_toolbar_tools/admin_toolbar_tools.routing.yml b/admin_toolbar_tools/admin_toolbar_tools.routing.yml index 233c9e3..3dafce4 100644 --- a/admin_toolbar_tools/admin_toolbar_tools.routing.yml +++ b/admin_toolbar_tools/admin_toolbar_tools.routing.yml @@ -30,7 +30,14 @@ admin_toolbar_tools.flush_static: path: '/admin/flush/static-caches' defaults: _controller: '\Drupal\admin_toolbar_tools\Controller\ToolbarController::flush_static' - _title: 'static caches' + _title: 'Static caches' + requirements: + _permission: 'access administration pages' +admin_toolbar_tools.flush_menu: + path: '/admin/flush/menu' + defaults: + _controller: '\Drupal\admin_toolbar_tools\Controller\ToolbarController::flush_menu' + _title: 'Menu' requirements: _permission: 'access administration pages' admin_toolbar_tools.drupalorg: diff --git a/admin_toolbar_tools/src/Controller/ToolbarController.php b/admin_toolbar_tools/src/Controller/ToolbarController.php index 1f4733d..4b97ced 100644 --- a/admin_toolbar_tools/src/Controller/ToolbarController.php +++ b/admin_toolbar_tools/src/Controller/ToolbarController.php @@ -11,28 +11,34 @@ namespace Drupal\admin_toolbar_tools\Controller; use Drupal\Core\Controller\ControllerBase; use Symfony\Component\HttpFoundation\RedirectResponse; - /** * Class ToolbarController * @package Drupal\admin_toolbar_tools\Controller */ class ToolbarController extends ControllerBase { - //This function display the tools in the menu - +//Redirect to home. public function home() { return new RedirectResponse('/'); } - public function reload_page(){ + + //Reload the previous page. + public function reload_page() { $request = \Drupal::request(); return $request->server->get('HTTP_REFERER'); } + + //Flush all caches. public function flushAll() { drupal_flush_all_caches(); drupal_set_message(t('All cache cleared.')); return new RedirectResponse($this->reload_page()); } + public function testdb() { + dpm(contact_message_get_names()); + } + //This function flush css and javascript caches. public function flush_js_css() { \Drupal::state() @@ -40,6 +46,7 @@ class ToolbarController extends ControllerBase { drupal_set_message(t('CSS and JavaScript cache cleared.')); return new RedirectResponse($this->reload_page()); } + //This function flush plugins caches. public function flush_plugins() { // Clear all plugin caches. @@ -47,6 +54,7 @@ class ToolbarController extends ControllerBase { drupal_set_message(t('Plugin cache cleared.')); return new RedirectResponse($this->reload_page()); } + // Reset all static caches. public function flush_static() { drupal_static_reset(); @@ -54,6 +62,13 @@ class ToolbarController extends ControllerBase { return new RedirectResponse($this->reload_page()); } +// Clears all cached menu data. + public function flush_menu() { + menu_cache_clear_all(); + drupal_set_message(t('All cached menu data cleared.')); + return new RedirectResponse($this->reload_page()); + } + // this function allow to access in documentation via admin_toolbar module public function drupal_org() { $response = new RedirectResponse("https://www.drupal.org"); @@ -61,6 +76,11 @@ class ToolbarController extends ControllerBase { return $response; } + //This function display the administration link Development + public function development() { + return new RedirectResponse('/admin/structure/menu/'); + } + // this function allow to access in documentation(list changes of the different versions of drupal core) via admin_toolbar module. public function list_changes() { $response = new RedirectResponse("https://www.drupal.org/list-changes"); @@ -74,9 +94,6 @@ class ToolbarController extends ControllerBase { $response->send(); return $response; } - //This function display the administration link Development - public function development(){ - return new RedirectResponse('/admin/structure/menu/'); -} + } \ No newline at end of file diff --git a/css/admin.toolbar.css b/css/admin.toolbar.css index 1f671f8..a1998de 100644 --- a/css/admin.toolbar.css +++ b/css/admin.toolbar.css @@ -40,4 +40,10 @@ top: 0; left: 160px; width: 160px; +} +.toolbar .toolbar-tray-vertical li.open > ul.menu { + display: none; +} +.toolbar .toolbar-tray-vertical li.open > ul.menu.clearfix { + display: block; } \ No newline at end of file -- GitLab