bundle() !== 'blog_post') { return; } if (!$node->hasField('field_site_section') || !$node->get('field_site_section')->isEmpty()) { return; } $node->set('field_site_section', [ 'target_type' => 'user', 'target_id' => $node->getOwnerId(), ]); } /** * Implements hook_node_access(). * * Restringe a criação de blog_post às roles configuradas pelo administrador. * Se nenhuma role estiver configurada, qualquer usuário autenticado pode criar. */ function site_users_blog_node_access(NodeInterface $node, string $op, AccountInterface $account): AccessResultInterface { if ($node->bundle() !== 'blog_post' || $op !== 'create') { return AccessResult::neutral(); } $allowed = \Drupal::config('site_users_blog.settings')->get('allowed_roles') ?? []; $allowed = array_filter($allowed); $result = AccessResult::neutral() ->addCacheTags(['config:site_users_blog.settings']) ->cachePerUser(); if (empty($allowed)) { return $result; } foreach (array_keys($allowed) as $role) { if ($account->hasRole($role)) { return $result; } } return AccessResult::forbidden() ->addCacheTags(['config:site_users_blog.settings']) ->cachePerUser(); } /** * Implements hook_preprocess_structural_pages_menu(). * * Adiciona o item "Blog" ao menu do microsite quando o usuário tem pelo menos * um post publicado. */ function site_users_blog_preprocess_structural_pages_menu(array &$variables): void { $user = site_users_get_microsite_user(); if ($user === NULL) { return; } $nids = \Drupal::entityTypeManager()->getStorage('node') ->getQuery() ->condition('uid', $user->id()) ->condition('type', 'blog_post') ->condition('status', 1) ->accessCheck(FALSE) ->range(0, 1) ->execute(); if (empty($nids)) { return; } $url = \Drupal\Core\Url::fromRoute('view.user_blog.page_user_blog', [ 'arg_0' => $user->id(), ])->toString(); $variables['tree'][] = [ 'id' => 0, 'title' => t('Blog'), 'url' => $url, 'is_redirect' => FALSE, 'children' => [], ]; }