Commit Graph

38 Commits

Author SHA1 Message Date
18a7aa81cb Estiliza formulário de configuração do microsite
Adiciona biblioteca CSS 'form' ao tema do microsite com estilos para
labels, campos, descrições e botão de submit, seguindo a paleta de cores
do tema. O formulário aplica a classe .microsite-form e anexa a biblioteca
automaticamente.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 10:21:57 -03:00
85bc63b250 Adiciona página de configuração do microsite em /user/{id}/config
Permite ao usuário selecionar qual conteúdo (content_page toplevel) é
exibido na página inicial do microsite. A configuração é armazenada via
user.data e a homepage respeita a escolha com fallback para o primeiro nó
publicado. O nó configurado como homepage é ocultado automaticamente do
menu de navegação (structural_pages). Inclui link "Configuração" no menu
da conta via rota de redirecionamento para o usuário atual.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 09:55:56 -03:00
f4d6c49312 Estende tema do microsite para todas as rotas /user/{id}/...
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 <noreply@anthropic.com>
2026-03-21 09:17:51 -03:00
c96268e09d Adiciona menu 'Adicionar' configurável no menu da conta do usuário
Item pai 'Adicionar' no menu account com subitens derivados dinamicamente
a partir de site_users.settings:add_content_links. O pai fica oculto quando
o usuário não tem acesso a nenhum dos routes configurados.

- Rota site_users.add_content com _custom_access via AddContentAccessCheck
- hook_menu_links_discovered_alter() gera os subitens com IDs estáveis
- Formulário de settings com tabela editável (label, rota, parâmetro, peso)
- CSS do microsite atualizado com dropdown ao hover/focus-within

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:28:21 -03:00
0ce327026d Adiciona atributo title nos links acadêmicos do MicrositeHeaderBlock
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 11:26:11 -03:00
03857ee1f2 Sobrescreve rota canônica do usuário com micro-site e move perfil para /user/{id}/profile
- RouteSubscriber redireciona entity.user.canonical ao MicrositeHomeController
- Nova rota site_users_microsite.profile em /user/{user}/profile com _entity_access
- Corrige configFactory() → config() no MicrositeContentController
- Exclui rota de settings do tema do micro-site no ThemeNegotiator
- Adiciona local task tabs para settings (módulo pai e submódulo)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 11:26:06 -03:00
3257c89ff7 Adiciona campo field_user_homepage e ícone de página pessoal no bloco
- Novo campo link field_user_homepage (página pessoal do usuário)
- Update hook 10009 para instalações existentes
- MicrositeHeaderBlock: variável #homepage via getFieldUri()
- Template: link com ícone 'home' como primeiro item nos links acadêmicos
- CSS: fill para ícone de casinha no fundo escuro do header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 10:53:13 -03:00
9ec7f951bf Adiciona links acadêmicos ao MicrositeHeaderBlock e formatadores de campo
- Formatadores FieldFormatter para Lattes, ORCID e MathSciNet: geram
  link para o perfil na plataforma a partir do ID armazenado no campo
- MicrositeHeaderBlock: inclui lattes_id, orcid_id e mathscinet_id
- Template: exibe ícones SVG via site_tools_academic_icon() (extensão
  Twig do módulo site_tools) com links acessíveis para cada plataforma
- CSS: estilos para .msite-header-block__academic-links com animação
  de hover nos ícones

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 08:52:28 -03:00
84f4661798 Adiciona bloco MicrositeHeaderBlock e regiões ao tema do microsite
- Novo bloco MicrositeHeaderBlock (site_users_microsite): exibe foto
  circular (220×280px), nome (h1), biografia e contatos (telefone,
  e-mail). Título oculto por padrão; biografia renderizada via
  ->processed com |raw no template.
- Remove UserInfoBlock e seu template (não estava em uso).
- Adiciona regiões Top Bar e Navigation ao tema; menu.html.twig para
  gerar classes .menu__item/.menu__link compatíveis com o CSS.
- CSS: estilos das novas regiões e do bloco de cabeçalho.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 07:12:55 -03:00
505c9fb64a Adiciona regiões Top Bar e Navigation ao tema do microsite
- Top Bar: barra estreita acima do header para menu do usuário,
  fundo escuro com links claros alinhados à direita.
- Navigation: barra horizontal abaixo do header para menu da página,
  estilo baseado no nav-secondary do Olivero (hover com underline animado).
- Inclui menu.html.twig para gerar as classes .menu, .menu__item e
  .menu__link necessárias para o CSS funcionar (stable9 não as adiciona).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 11:10:36 -03:00
0c7b346530 Adiciona widget UserPhotosWidget para gerenciar fotos do usuário
Widget unificado para field_user_photos: exibe tira de thumbnails em
linha com destaque (borda azul) na foto padrão; clicar num thumbnail
seleciona-o como padrão. O campo field_user_default_photo é atualizado
ao salvar. Edição/remoção de mídias individuais ficam a cargo do menu
contextual do Drupal. O hook _site_users_add_default_photo_selector()
é ignorado automaticamente quando o widget está ativo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 10:39:22 -03:00
0b137e8d12 Adiciona barra social lateral ao tema do microsite
Implementa o layout estilo Olivero: em desktop (≥ 1200 px) a região
Social fica fixada à esquerda com conteúdo girado −90°; em mobile exibe
barra horizontal compacta. Usa IntersectionObserver para aplicar
.is-fixed ao scroll.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 10:38:54 -03:00
d169052065 Adiciona sub-módulo site_users_microsite e tema site_users_microsite_theme
Sub-módulo com ThemeNegotiator, controller de listagem de conteúdo por usuário,
formulário de configuração de tipos de conteúdo por papel e serviços registrados.

Tema com regiões header, highlighted, tabs, messages, content, sidebar, social
e footer; template page.html.twig com header padrão gerado a partir dos dados
do usuário (foto, nome, roles) quando a região header estiver vazia.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 07:35:45 -03:00
d3c1282e47 Adiciona campo field_user_mathscinetid ao módulo
Inclui config/install com langcode en, update hook 10008 para sites
já instalados e tradução pt-br do label e descrição do campo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 08:13:32 -03:00
3597de7220 Adiciona campo field_person_id com langcode en e tradução pt-br
Inclui field.storage e field.field para o campo Institutional ID,
com tradução 'Id Institucional' em config/translations/pt-br/.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 13:27:57 -03:00
80f58bc4aa Adiciona roles graduate_student e undergraduate_student ao módulo
Roles criados com langcode: en e tradução pt-br correspondente em
config/translations/pt-br/, sem uuid, seguindo o padrão de configuração
opcional do módulo. Inclui também as ações em lote (user_add_role_action
e user_remove_role_action) para ambos os roles, permitindo atribuição e
remoção em massa via interface de administração.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 14:46:52 -03:00
44b917e78e fix: altera field_user_id_lattes de INT para BIGINT
IDs Lattes têm 16 dígitos, excedendo o limite do INT (≈2.1 bilhões).
Corrige erro SQLSTATE[22003] durante o cron ao salvar o campo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 13:38:07 -03:00
4cc48b66fd Campos field_user_id_lattes e field_user_orcid adicionados.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 09:14:50 -03:00
a0f3aef8a6 Definições de roles professor, staff, pesquisador e pós-doutorando adicionadas.
Roles movidos do módulo base_site_config para centralizar as definições
de usuários neste módulo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 09:02:13 -03:00
bd24e6eb6b feat: View mode por role/usuário com seletor de visibilidade no perfil
- Cria view mode e display 'restricted' (template mostra só username + mensagem)
- Adiciona campo field_user_selected_view_mode (string, default: restricted)
- update_10006: provisiona view mode, display e campo; inicializa role_view_modes
- Seletor de visibilidade no form de edição do perfil (owner e admin)
- hook_entity_view_mode_alter lê o campo e valida existência do display
- Formulário de admin: checkboxes de view modes por role (exceto anonymous e authenticated)
- Schema YAML completo para site_users.settings incluindo role_view_modes
- Tradução pt-BR de todas as novas strings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 08:06:10 -03:00
f58c8f90f4 feat: Perfis públicos de usuário via view mode 'public'
- Adiciona hook_entity_view_mode_alter() para redirecionar visitantes
  não-proprietários e não-admins para o view mode 'public' ao acessar
  /user/{uid}, exibindo apenas foto padrão, bio e redes sociais
- Simplifica hook_entity_field_access(): operação 'view' retorna neutral
  para não-proprietários (visibilidade controlada pelo view mode)
- Cria update_10005() que provisiona o view mode 'public', seu display
  e concede a permissão 'access user profiles' ao papel anonymous
- Replica a concessão de permissão em hook_install() para novas instalações
- Corrige TypeError em hook_entity_view_mode_alter(): $context aceita null
- Amplia hook_media_access() para permitir visualização de mídia publicada
  também para usuários anônimos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 16:29:41 -03:00
6266b42e0e feat: Sincroniza foto LDAP para field_user_photos no login
Implementa hook_ldap_user_edit_user_alter() para capturar a foto do
atributo LDAP configurado e adicioná-la como primeira entrada em
field_user_photos, sem queries adicionais ao servidor.

Inclui LdapPhotoSyncService com detecção de tipo via exif_imagetype,
deduplicação por MD5 e reutilização de media entity existente.
Adiciona checkbox para ativar/desativar o sync no formulário de settings,
com visibilidade condicional do campo de atributo via #states.

Corrige acesso a mídias publicadas para usuários autenticados via
hook_media_access(), resolvendo "Acesso restrito" no widget e na
visualização do perfil.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 15:23:20 -03:00
5cacb97f12 feat: Usa field_user_name como nome de exibição do usuário
Implementa hook_user_format_name_alter() para substituir o username pelo
valor de field_user_name em todo o site. Na view /admin/people o username
original é mantido alterando o formatter do campo name de user_name para
string, exibindo o valor bruto sem passar por getDisplayName().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 11:23:39 -03:00
af7ebfb947 feat: Expõe links sociais do usuário no bloco ShareLinks do site_tools
Implementa hook_site_tools_share_links() para fornecer os links do campo
field_user_social_links ao ShareLinksBlock quando em página de perfil de
usuário. Adiciona site_tools como dependência do módulo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 08:23:42 -03:00
5c18c4db82 fix: Corrige mapeamentos LDAP com campos nulos na config ativa
Adiciona update_10003 e update_10004 para normalizar entradas de
ldapUserSyncMappings que possuem prov_events, config_module, prov_module
ou outros campos nulos, evitando TypeError no FieldProvider do ldap_user.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 08:07:29 -03:00
866be9262b feat: Adiciona form display do usuário com field_user_social_links
Move core.entity_form_display.user.user.default de base_site_config
para site_users, que é o módulo responsável pelos campos de perfil.
Inclui field_user_social_links (social_link_widget) e remove referência
obsoleta a field_user_photo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 13:54:27 -03:00
c464ae035d fix: Grava false para campos protegidos ao salvar configurações
Campos que retornam forbidden() em fieldAccess() são gravados como
false no submitForm(), evitando que um valor true residual persista
quando um campo passa a ser protegido por outro módulo. Inclui também
o nome do campo no label no formato [módulo:field_name].

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 10:00:56 -03:00
cb2cd170fa feat: Renomeia field_user_phone para 'Personal Phone'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 08:38:05 -03:00
120d7b1858 feat: Descoberta dinâmica de campos de usuário editáveis
hook_entity_field_access() passa a cobrir todos os FieldConfigInterface
do usuário, sem lista hardcoded. Campos de referência a mídia usam
lógica de fotos; demais usam lógica de perfil.

SiteUsersSettingsForm descobre campos dinamicamente via
entity_field.manager, listando todos os campos configuráveis do usuário
independente do módulo que os define.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 08:09:27 -03:00
06e5bae039 fix: Corrige acesso edit de campos do próprio usuário
Para operação 'edit', verifica apenas a config user_editable_fields
para o próprio usuário, sem exigir permissão explícita. Evita que
AccessResult::neutral() bloqueie o widget no formulário.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:40:49 -03:00
e9f4cdcfb4 fix: Corrige controle de acesso a campos do perfil
- Retorna neutral() quando $items e NULL (contexto sem entidade),
  evitando forbidden() prematuro que escondia campos no formulario
- Retorna neutral() para o proprio usuario sem a permissao explicita,
  deferindo ao comportamento padrao do Drupal em vez de negar acesso
- Retorna forbidden() apenas quando ha entidade e o usuario esta
  editando o perfil de outro (sem permissao 'edit any')
- A permissao 'edit own user profile fields' passa a funcionar como
  controle refinado via config: se presente, aplica restricoes por
  campo; se ausente, o modulo nao interfere no acesso padrao

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 14:49:33 -03:00
5eca037739 feat: Configuração de campos editáveis pelo próprio usuário
Adiciona seção na tela de configurações do módulo que permite ao
administrador controlar quais campos do perfil cada usuário pode
editar no próprio perfil, independentemente das permissões de papel.

- site_users.settings.yml: novo grupo user_editable_fields (todos
  habilitados por padrão)
- SiteUsersSettingsForm: fieldset com checkboxes por campo
- site_users.module: site_users_check_profile_field_access() e
  site_users_check_photo_field_access() recebem field_name e
  consultam a config ao verificar 'edit own'; resultado inclui
  cache tag config:site_users.settings
- translations/site_users.pt-br.po: novas strings traduzidas

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 14:22:11 -03:00
8bab0515e1 feat: Adiciona field type social_link para redes sociais do usuário
Implementa o field type 'social_link' com seletor de rede e URL de
perfil, composto por:

- SocialLinkItem: field type com colunas 'network' (varchar 64) e
  'url' (varchar 2048), cardinalidade ilimitada
- SocialLinkWidget: widget com select de rede e input de URL
- SocialLinkFormatter: formatter que renderiza links com classe CSS
  por rede (social-link--{network}), target _blank e rel noopener
- config/optional: field.storage e field.field para user
- config/translations/pt-br: tradução do label e description
- hook_install e update_10002: configura form/view displays
- UserInfoBlock: expõe social_links via getSocialLinks()
- Template: adiciona seção de redes sociais e remove referências
  obsoletas a category e dept_code
- translations/site_users.pt-br.po: strings do novo field type

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 14:10:28 -03:00
1dafd4a865 feat: Remove field_user_category (gerenciado em outro módulo)
Remove os arquivos de config field.storage, field.field e translation
referentes ao field_user_category, e elimina todas as referências
ao campo em site_users.module, site_users.install e UserInfoBlock.php.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 13:47:34 -03:00
aac6256b27 feat: Remove field_user_dept_code (gerenciado em outro módulo)
Remove os arquivos de config field.storage, field.field e translation
referentes ao field_user_dept_code, e elimina todas as referências
ao campo em site_users.module, site_users.install e UserInfoBlock.php.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 13:46:42 -03:00
cae30b472a i18n: Converte strings do módulo para en com tradução pt-br
- Altera langcode de pt-br para en em todos os field.field YAMLs
- Traduz labels e descriptions dos campos para inglês
- Converte strings de info.yml, permissions.yml, links.menu.yml e
  routing.yml para inglês
- Converte todas as strings t() e @Translation em PHP para inglês
- Adiciona traduções de config em config/translations/pt-br/ para os
  7 campos de usuário
- Adiciona arquivo translations/site_users.pt-br.po com todas as
  strings de interface traduzidas para pt-br

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 13:40:39 -03:00
d284712b72 feat: Importa view user_admin_people com tradução pt-br
Adiciona a configuração da view de administração de usuários
(/admin/people) em config/optional com langcode en e strings
em inglês, e as traduções para pt-br em config/translations/pt-br.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 13:35:32 -03:00
6215759045 feat: Módulo Site Users para customização de perfis de usuário
Módulo Drupal para gerenciamento de campos e fotos de perfil de usuários:
- Campos customizados: nome, telefone, categoria, departamento, biografia
- Suporte a múltiplas fotos com seleção de foto padrão
- Controle de permissões granular para visualização e edição
- Bloco de informações do usuário para exibição em páginas
- Configurações administrativas para limite de fotos e integração LDAP

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 07:35:26 -03:00