From f4d6c4931264bcc49b7533b9ed67c55ed8f0dfa4 Mon Sep 17 00:00:00 2001 From: "Quintino A. G. Souza" Date: Sat, 21 Mar 2026 09:17:51 -0300 Subject: [PATCH] Estende tema do microsite para todas as rotas /user/{id}/... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O negociador de tema passa a verificar o alias do caminho atual em vez de checar nomes de rota específicos, cobrindo páginas de qualquer módulo acessadas via alias /user/{id}/.... Adiciona site_users_get_microsite_user() como helper reutilizável para obter o usuário do microsite a partir da rota ou do alias, e atualiza MicrositeHeaderBlock e site_tools_share_links para usá-lo. Co-Authored-By: Claude Sonnet 4.6 --- .../src/Plugin/Block/MicrositeHeaderBlock.php | 9 +++++++ .../src/Theme/MicrositeThemeNegotiator.php | 11 +++++--- site_users.module | 26 ++++++++++++++++++- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/modules/site_users_microsite/src/Plugin/Block/MicrositeHeaderBlock.php b/modules/site_users_microsite/src/Plugin/Block/MicrositeHeaderBlock.php index c1afd6e..e4b599c 100644 --- a/modules/site_users_microsite/src/Plugin/Block/MicrositeHeaderBlock.php +++ b/modules/site_users_microsite/src/Plugin/Block/MicrositeHeaderBlock.php @@ -81,6 +81,10 @@ class MicrositeHeaderBlock extends BlockBase implements ContainerFactoryPluginIn /** * Retorna o usuário da rota atual. + * + * Primeiro tenta o parâmetro 'user' da rota (rotas próprias do microsite). + * Caso não exista (ex: rota entity.node.canonical acessada via alias + * /user/{id}/...), extrai o ID do alias do caminho atual. */ protected function getUser(): ?UserInterface { $user = $this->routeMatch->getParameter('user'); @@ -90,6 +94,11 @@ class MicrositeHeaderBlock extends BlockBase implements ContainerFactoryPluginIn if (is_numeric($user)) { return $this->entityTypeManager->getStorage('user')->load($user); } + + if (function_exists('site_users_get_microsite_user')) { + return site_users_get_microsite_user(); + } + return NULL; } diff --git a/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php b/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php index 64ab405..fa7e25a 100644 --- a/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php +++ b/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php @@ -16,9 +16,14 @@ class MicrositeThemeNegotiator implements ThemeNegotiatorInterface { public function applies(RouteMatchInterface $route_match): bool { $route_name = $route_match->getRouteName(); $excluded = ['site_users_microsite.settings']; - return ($route_name === 'entity.user.canonical' - || str_starts_with($route_name, 'site_users_microsite.')) - && !in_array($route_name, $excluded); + + if (in_array($route_name, $excluded)) { + return FALSE; + } + + $current_path = \Drupal::service('path.current')->getPath(); + $alias = \Drupal::service('path_alias.manager')->getAliasByPath($current_path); + return (bool) preg_match('#^/user/\d+(/|$)#', $alias); } /** diff --git a/site_users.module b/site_users.module index 57940ea..4626e63 100644 --- a/site_users.module +++ b/site_users.module @@ -530,11 +530,35 @@ function site_users_user_format_name_alter(&$name, $account) { } } +/** + * Retorna o usuário dono do microsite para a requisição atual. + * + * Tenta o parâmetro 'user' da rota (rotas próprias do microsite) e, se não + * encontrar, extrai o ID do alias do caminho atual (ex: /user/229/projetos). + */ +function site_users_get_microsite_user(): ?UserInterface { + $user = \Drupal::routeMatch()->getParameter('user'); + if ($user instanceof UserInterface) { + return $user; + } + if (is_numeric($user)) { + return \Drupal::entityTypeManager()->getStorage('user')->load($user); + } + + $alias = \Drupal::service('path_alias.manager') + ->getAliasByPath(\Drupal::service('path.current')->getPath()); + if (preg_match('#^/user/(\d+)(/|$)#', $alias, $matches)) { + return \Drupal::entityTypeManager()->getStorage('user')->load($matches[1]); + } + + return NULL; +} + /** * Implements hook_site_tools_share_links(). */ function site_users_site_tools_share_links(): array { - $user = \Drupal::routeMatch()->getParameter('user'); + $user = site_users_get_microsite_user(); if (!($user instanceof UserInterface)) { return [];