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>
This commit is contained in:
2026-02-26 08:06:10 -03:00
parent f58c8f90f4
commit bd24e6eb6b
9 changed files with 431 additions and 2 deletions

View File

@@ -8,3 +8,4 @@ user_editable_fields:
field_user_bio: true
field_user_social_links: true
field_user_photos: true
role_view_modes: { }

View File

@@ -0,0 +1,20 @@
langcode: en
status: true
dependencies:
config:
- field.storage.user.field_user_selected_view_mode
module:
- user
id: user.user.field_user_selected_view_mode
field_name: field_user_selected_view_mode
entity_type: user
bundle: user
label: 'Profile visibility'
description: 'Controls how this profile appears to other visitors.'
required: false
translatable: false
default_value:
- value: restricted
default_value_callback: ''
settings: { }
field_type: string

View File

@@ -0,0 +1,20 @@
langcode: en
status: true
dependencies:
module:
- user
id: user.field_user_selected_view_mode
field_name: field_user_selected_view_mode
entity_type: user
type: string
settings:
max_length: 64
is_ascii: true
case_sensitive: false
module: core
locked: false
cardinality: 1
translatable: false
indexes: { }
persist_with_no_fields: false
custom_storage: false

View File

@@ -0,0 +1,32 @@
site_users.settings:
type: config_object
label: 'Site Users settings'
mapping:
photos:
type: mapping
label: 'Photo settings'
mapping:
max_count:
type: integer
label: 'Maximum number of photos'
ldap_attribute:
type: string
label: 'LDAP photo attribute'
ldap_sync_enabled:
type: boolean
label: 'Enable LDAP photo synchronization'
user_editable_fields:
type: sequence
label: 'User-editable profile fields'
sequence:
type: boolean
label: 'Field editable'
role_view_modes:
type: sequence
label: 'Allowed view modes per role'
sequence:
type: sequence
label: 'View modes for role'
sequence:
type: string
label: 'View mode machine name'