diff --git a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml index 302882f0386ad5a595e168fa037d7b25be9aab23..c0286fd652c68773165d1c295656394d350ea47a 100644 --- a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml +++ b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml @@ -4,6 +4,7 @@ salesforce_mapping.add_action: route_name: entity.salesforce_mapping.add_form title: 'Add Mapping' appears_on: + - salesforce.structure_index - entity.salesforce_mapping.list salesforce_mapped_object.add_action: diff --git a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml index d78498a3c31f7da36e5230186e251d0d67e7cc06..853eca6da408d45cdb7e32a9bee3b77f6866a908 100644 --- a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml +++ b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml @@ -1,13 +1,7 @@ -salesforce.structure_index: - route_name: salesforce.structure_index - parent: system.admin_structure - title: Salesforce - description: 'Manage Salesforce mappings.' - salesforce_mapping.admin: title: Salesforce Mappings description: 'Salesforce Mappings' - parent: salesforce.structure_index + parent: system.admin_structure route_name: entity.salesforce_mapping.list salesforce_mapped_object.admin: @@ -15,3 +9,7 @@ salesforce_mapped_object.admin: description: 'Salesforce Mapped Objects' parent: system.admin_content route_name: entity.salesforce_mapped_object.list + +salesforce_mapping.extra_links: + deriver: \Drupal\salesforce_mapping_ui\Plugin\Derivative\SalesforceMappingExtraLinks + menu_name: admin diff --git a/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml b/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml index 6cee4c1a767b3609feb666e11a2f9e1af60e8f57..38a44fc744e794c623c0ad71f1ec38da75297580 100644 --- a/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml +++ b/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml @@ -1,9 +1,9 @@ +# Legacy path for structure/salesforce, which was an unnncessary extra layer. salesforce.structure_index: path: '/admin/structure/salesforce' defaults: - _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage' - _title: 'Salesforce' - _description: 'Manage Salesforce mappings.' + _entity_list: 'salesforce_mapping' + _title: 'Salesforce Mappings' requirements: _permission: 'administer salesforce' diff --git a/modules/salesforce_mapping_ui/src/Plugin/Derivative/SalesforceMappingExtraLinks.php b/modules/salesforce_mapping_ui/src/Plugin/Derivative/SalesforceMappingExtraLinks.php new file mode 100644 index 0000000000000000000000000000000000000000..516c17a75d0a629d932d5dcdbd69b114e0c135ab --- /dev/null +++ b/modules/salesforce_mapping_ui/src/Plugin/Derivative/SalesforceMappingExtraLinks.php @@ -0,0 +1,162 @@ +<?php + +namespace Drupal\salesforce_mapping_ui\Plugin\Derivative; + +use Drupal\Component\Plugin\Derivative\DeriverBase; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Core\Extension\ThemeHandlerInterface; +use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface; +use Drupal\Core\Routing\RouteProviderInterface; +use Drupal\Core\Session\AccountInterface; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\system\Entity\Menu; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides a default implementation for menu link plugins. + */ +class SalesforceMappingExtraLinks extends DeriverBase implements ContainerDeriverInterface { + + use StringTranslationTrait; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * The route provider. + * + * @var \Drupal\Core\Routing\RouteProviderInterface + */ + protected $routeProvider; + + /** + * The theme handler. + * + * @var \Drupal\Core\Extension\ThemeHandlerInterface + */ + protected $themeHandler; + + /** + * The admin toolbar tools configuration. + * + * @var \Drupal\Core\Config\Config + */ + protected $config; + + /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $currentUser; + + /** + * {@inheritdoc} + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, RouteProviderInterface $route_provider, ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, AccountInterface $current_user) { + $this->entityTypeManager = $entity_type_manager; + $this->moduleHandler = $module_handler; + $this->routeProvider = $route_provider; + $this->themeHandler = $theme_handler; + $this->config = $config_factory->get('admin_toolbar_tools.settings'); + $this->currentUser = $current_user; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, $base_plugin_id) { + return new static( + $container->get('entity_type.manager'), + $container->get('module_handler'), + $container->get('router.route_provider'), + $container->get('theme_handler'), + $container->get('config.factory'), + $container->get('current_user') + ); + } + + /** + * {@inheritdoc} + */ + public function getDerivativeDefinitions($base_plugin_definition) { + $links = []; + $entity_types = $this->entityTypeManager->getDefinitions(); + $content_entities = []; + foreach ($entity_types as $key => $entity_type) { + if ($entity_type->getBundleEntityType() && ($entity_type->get('field_ui_base_route') != '')) { + $content_entities[$key] = [ + 'content_entity' => $key, + 'content_entity_bundle' => $entity_type->getBundleEntityType(), + ]; + } + } + + $links['entity.salesforce_mapping.add_form'] = [ + 'menu_name' => 'admin', + 'route_name' => 'entity.salesforce_mapping.add_form', + 'parent' => 'salesforce_mapping.admin', + 'title' => 'Add Mapping', + 'provider' => 'salesforce_mapping_ui', + ]; + + $mappings = $this->entityTypeManager->getStorage('salesforce_mapping') + ->loadMultiple(); + foreach ($mappings as $mapping) { + $mapping_root = 'entity.salesforce_mapping.edit_form.' . $mapping->id(); + $links[$mapping_root] = [ + 'menu_name' => 'admin', + 'route_name' => 'entity.salesforce_mapping.fields', + 'parent' => 'salesforce_mapping.admin', + 'route_parameters' => ['salesforce_mapping' => $mapping->id()], + 'title' => $mapping->label(), + 'provider' => 'salesforce_mapping_ui', + ]; + $links[$mapping_root . '.fields'] = [ + 'menu_name' => 'admin', + 'route_name' => 'entity.salesforce_mapping.fields', + 'parent' => $base_plugin_definition['id'] . ':' . $mapping_root, + 'route_parameters' => ['salesforce_mapping' => $mapping->id()], + 'title' => 'Fields', + 'provider' => 'salesforce_mapping_ui', + ]; + $links[$mapping_root . '.settings'] = [ + 'menu_name' => 'admin', + 'route_name' => 'entity.salesforce_mapping.edit_form', + 'parent' => $base_plugin_definition['id'] . ':' . $mapping_root, + 'route_parameters' => ['salesforce_mapping' => $mapping->id()], + 'title' => 'Settings', + 'provider' => 'salesforce_mapping_ui', + ]; + + } + return $links; + } + + /** + * Determine if a route exists by name. + * + * @param string $route_name + * The name of the route to check. + * + * @return bool + * Whether a route with that route name exists. + */ + public function routeExists($route_name) { + return (count($this->routeProvider->getRoutesByNames([$route_name])) === 1); + } + +} diff --git a/salesforce.links.menu.yml b/salesforce.links.menu.yml index 698b1032e4d5b8c59bb554862141efb663793c58..bd35e039952653b68ebd4e3fd3fb1b2de93e8238 100644 --- a/salesforce.links.menu.yml +++ b/salesforce.links.menu.yml @@ -22,3 +22,4 @@ entity.salesforce_auth.collection: parent: salesforce.auth_config title: Salesforce Authorization Providers description: 'Salesforce Authorization Providers.' +