diff --git a/config/install/easy_breadcrumb.settings.yml b/config/install/easy_breadcrumb.settings.yml index 18bfcc3..732b115 100644 --- a/config/install/easy_breadcrumb.settings.yml +++ b/config/install/easy_breadcrumb.settings.yml @@ -1,3 +1,4 @@ +applies_admin_routes: TRUE include_home_segment: TRUE home_segment_title: 'Home' home_segment_keep: FALSE diff --git a/config/schema/easy_breadcrumb.schema.yml b/config/schema/easy_breadcrumb.schema.yml index a195620..5576313 100644 --- a/config/schema/easy_breadcrumb.schema.yml +++ b/config/schema/easy_breadcrumb.schema.yml @@ -2,6 +2,9 @@ easy_breadcrumb.settings: type: config_object label: 'Easy Breadcrumb' mapping: + applies_admin_routes: + type: boolean + label: 'Applies to administration pages' include_invalid_paths: type: boolean label: 'Include invalid paths alias as plain-text segments' diff --git a/src/EasyBreadcrumbBuilder.php b/src/EasyBreadcrumbBuilder.php index fc4b35b..9241eb9 100644 --- a/src/EasyBreadcrumbBuilder.php +++ b/src/EasyBreadcrumbBuilder.php @@ -23,6 +23,7 @@ use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\Url; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\Routing\Exception\MethodNotAllowedException; @@ -138,6 +139,16 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface { * {@inheritdoc} */ public function applies(RouteMatchInterface $route_match) { + $applies_admin_routes = $this->config->get(EasyBreadcrumbConstants::APPLIES_ADMIN_ROUTES); + // If never set before ensure Applies to administration pages is on. + if (!isset($applies_admin_routes)) { + return TRUE; + } + $request = \Drupal::request(); + $route = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT); + if ($route && $route->getOption('_admin_route') && $applies_admin_routes == FALSE) { + return FALSE; + } return TRUE; } diff --git a/src/EasyBreadcrumbConstants.php b/src/EasyBreadcrumbConstants.php index aac0637..2535b15 100644 --- a/src/EasyBreadcrumbConstants.php +++ b/src/EasyBreadcrumbConstants.php @@ -12,6 +12,11 @@ class EasyBreadcrumbConstants { */ const MODULE_NAME = 'easy_breadcrumb'; + /** + * Flag for applying easy breadcrumb to admin routes. + */ + const APPLIES_ADMIN_ROUTES = 'applies_admin_routes'; + /** * Flag for including invalid paths while generating the breadcrumb segments. */ diff --git a/src/Form/EasyBreadcrumbGeneralSettingsForm.php b/src/Form/EasyBreadcrumbGeneralSettingsForm.php index 67c61a4..74647de 100644 --- a/src/Form/EasyBreadcrumbGeneralSettingsForm.php +++ b/src/Form/EasyBreadcrumbGeneralSettingsForm.php @@ -39,6 +39,18 @@ class EasyBreadcrumbGeneralSettingsForm extends ConfigFormBase { '#collapsed' => FALSE, ]; + // If never set before ensure Applies to administration pages is on. + $applies_admin_routes = $config->get(EasyBreadcrumbConstants::APPLIES_ADMIN_ROUTES); + if (!isset($applies_admin_routes)) { + $applies_admin_routes = TRUE; + } + $fieldset_general[EasyBreadcrumbConstants::APPLIES_ADMIN_ROUTES] = [ + '#type' => 'checkbox', + '#title' => $this->t('Applies to administration pages'), + '#description' => $this->t('Uncheck to disable Easy breadcrumb for administration pages and routes like this one.'), + '#default_value' => $applies_admin_routes, + ]; + $fieldset_general[EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS] = [ '#type' => 'checkbox', '#title' => $this->t('Include invalid paths alias as plain-text segments'), @@ -167,6 +179,7 @@ class EasyBreadcrumbGeneralSettingsForm extends ConfigFormBase { $config = $this->config('easy_breadcrumb.settings'); $config + ->set(EasyBreadcrumbConstants::APPLIES_ADMIN_ROUTES, $form_state->getValue(EasyBreadcrumbConstants::APPLIES_ADMIN_ROUTES)) ->set(EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS, $form_state->getValue(EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS)) ->set(EasyBreadcrumbConstants::EXCLUDED_PATHS, $form_state->getValue(EasyBreadcrumbConstants::EXCLUDED_PATHS)) ->set(EasyBreadcrumbConstants::REPLACED_TITLES, $form_state->getValue(EasyBreadcrumbConstants::REPLACED_TITLES))