[ 'variables' => [ 'photo_url' => NULL, 'photo_alt' => '', 'name' => NULL, 'bio' => NULL, 'email' => NULL, 'homepage' => NULL, 'lattes_id' => NULL, 'orcid_id' => NULL, 'mathscinet_id' => NULL, 'department' => NULL, 'department_url' => NULL, 'work_phone' => NULL, ], ], ]; } /** * Implements hook_preprocess_structural_pages_menu(). * * Remove da árvore de navegação o nó configurado como homepage do microsite, * já que esse conteúdo é exibido diretamente em /user/{id}. */ function site_users_microsite_preprocess_structural_pages_menu(array &$variables): void { $user = site_users_get_microsite_user(); if ($user === NULL) { return; } $homepage_nid = \Drupal::service('user.data') ->get('site_users_microsite', $user->id(), 'homepage_nid'); if (!$homepage_nid) { return; } _site_users_microsite_remove_homepage_from_tree($variables['tree'], (int) $homepage_nid); } /** * Remove recursivamente o nó homepage da árvore do structural_pages_menu. */ function _site_users_microsite_remove_homepage_from_tree(array &$items, int $homepage_nid): void { foreach ($items as $key => $item) { if ((int) ($item['id'] ?? 0) === $homepage_nid) { unset($items[$key]); continue; } if (!empty($item['children'])) { _site_users_microsite_remove_homepage_from_tree($items[$key]['children'], $homepage_nid); } } } /** * Implements hook_preprocess_block(). * * Substitui o título do bloco "Título da Página" pelo título do nó homepage * quando o usuário tiver ativado essa opção nas configurações do microsite. * Sem nó homepage configurado (ou no fallback), mantém o comportamento padrão. */ function site_users_microsite_preprocess_block(&$variables): void { if ($variables['plugin_id'] !== 'page_title_block') { return; } $route_match = \Drupal::routeMatch(); $route_name = $route_match->getRouteName() ?? ''; // Rotas com título próprio não devem ser sobrescritas. $excluded = [ 'site_users_microsite.profile', 'site_users_microsite.settings', 'site_users_microsite.user_config', ]; $is_microsite = $route_name === 'entity.user.canonical' || str_starts_with($route_name, 'site_users_microsite.'); if (!$is_microsite || in_array($route_name, $excluded)) { return; } $user = $route_match->getParameter('user'); if (!($user instanceof UserInterface)) { return; } $userData = \Drupal::service('user.data'); if (!$userData->get('site_users_microsite', $user->id(), 'use_homepage_title')) { return; } $homepage_nid = $userData->get('site_users_microsite', $user->id(), 'homepage_nid'); if (!$homepage_nid) { return; } $node = \Drupal::entityTypeManager()->getStorage('node')->load($homepage_nid); if ($node && $node->isPublished() && $node->access('view')) { $variables['content']['#title'] = $node->label(); } } /** * Implements hook_preprocess_page(). * * Disponibiliza variáveis do usuário do micro-site para o tema. */ function site_users_microsite_preprocess_page(array &$variables): void { $route_match = \Drupal::routeMatch(); $route_name = $route_match->getRouteName(); $is_microsite = $route_name === 'entity.user.canonical' || str_starts_with($route_name, 'site_users_microsite.'); if (!$is_microsite) { return; } $user = $route_match->getParameter('user'); if (!($user instanceof UserInterface)) { return; } $variables['microsite_user'] = $user; $variables['microsite_user_name'] = $user->getDisplayName(); $variables['microsite_user_roles'] = $user->getRoles(TRUE); $photo = site_users_get_default_photo($user); if ($photo) { $render = \Drupal::entityTypeManager() ->getViewBuilder('media') ->view($photo, 'thumbnail'); $variables['microsite_user_photo'] = \Drupal::service('renderer') ->renderInIsolation($render); } }