diff --git a/modules/site_users_microsite/site_users_microsite.info.yml b/modules/site_users_microsite/site_users_microsite.info.yml index 0f026ad..e7c6e4a 100644 --- a/modules/site_users_microsite/site_users_microsite.info.yml +++ b/modules/site_users_microsite/site_users_microsite.info.yml @@ -7,3 +7,4 @@ dependencies: - drupal:user - drupal:node - site_users:site_users + - structural_pages:structural_pages diff --git a/modules/site_users_microsite/site_users_microsite.install b/modules/site_users_microsite/site_users_microsite.install new file mode 100644 index 0000000..c6b40c1 --- /dev/null +++ b/modules/site_users_microsite/site_users_microsite.install @@ -0,0 +1,6 @@ +configFactory() - ->get('site_users_microsite.settings') + $role_content_types = $this->config('site_users_microsite.settings') ->get('role_content_types') ?? []; $allowed = []; diff --git a/modules/site_users_microsite/src/Controller/MicrositeHomeController.php b/modules/site_users_microsite/src/Controller/MicrositeHomeController.php new file mode 100644 index 0000000..624ab36 --- /dev/null +++ b/modules/site_users_microsite/src/Controller/MicrositeHomeController.php @@ -0,0 +1,63 @@ + ['node_list:content_page', 'user:' . $user->id()], + 'contexts' => ['route'], + ]; + + $nids = $this->entityTypeManager()->getStorage('node') + ->getQuery() + ->condition('uid', $user->id()) + ->condition('type', 'content_page') + ->condition('status', 1) + ->accessCheck(TRUE) + ->range(0, 1) + ->execute(); + + if (empty($nids)) { + return [ + '#markup' => $this->t('No content published yet.'), + '#cache' => $cache, + ]; + } + + $node = $this->entityTypeManager()->getStorage('node')->load(reset($nids)); + $build = $this->entityTypeManager()->getViewBuilder('node')->view($node, 'full'); + $build['#cache'] = $cache; + + return $build; + } + + /** + * Página de perfil do usuário em /user/{user}/profile. + */ + public function profile(UserInterface $user): array { + return $this->entityTypeManager()->getViewBuilder('user')->view($user, 'full'); + } + + /** + * Callback de título para a página inicial. + */ + public function title(UserInterface $user): TranslatableMarkup { + return $this->t("@name", ['@name' => $user->getDisplayName()]); + } + +} diff --git a/modules/site_users_microsite/src/Routing/RouteSubscriber.php b/modules/site_users_microsite/src/Routing/RouteSubscriber.php new file mode 100644 index 0000000..0aff32f --- /dev/null +++ b/modules/site_users_microsite/src/Routing/RouteSubscriber.php @@ -0,0 +1,23 @@ +get('entity.user.canonical')) { + $route->setDefault('_controller', '\Drupal\site_users_microsite\Controller\MicrositeHomeController::home'); + $route->setDefault('_title_callback', '\Drupal\site_users_microsite\Controller\MicrositeHomeController::title'); + } + } + +} diff --git a/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php b/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php index 0af2911..64ab405 100644 --- a/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php +++ b/modules/site_users_microsite/src/Theme/MicrositeThemeNegotiator.php @@ -15,8 +15,10 @@ class MicrositeThemeNegotiator implements ThemeNegotiatorInterface { */ public function applies(RouteMatchInterface $route_match): bool { $route_name = $route_match->getRouteName(); - return $route_name === 'entity.user.canonical' - || str_starts_with($route_name, 'site_users_microsite.'); + $excluded = ['site_users_microsite.settings']; + return ($route_name === 'entity.user.canonical' + || str_starts_with($route_name, 'site_users_microsite.')) + && !in_array($route_name, $excluded); } /** diff --git a/site_users.links.task.yml b/site_users.links.task.yml new file mode 100644 index 0000000..d36bf59 --- /dev/null +++ b/site_users.links.task.yml @@ -0,0 +1,5 @@ +site_users.settings_tab: + route_name: site_users.settings + title: 'General' + base_route: site_users.settings + weight: 0