mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/site_users.git
synced 2026-03-09 18:07:40 -03:00
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>
This commit is contained in:
266
site_users.install
Normal file
266
site_users.install
Normal file
@@ -0,0 +1,266 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Install, update and uninstall functions for the Site Users module.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Entity\Entity\EntityFormDisplay;
|
||||
use Drupal\Core\Entity\Entity\EntityViewDisplay;
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
|
||||
/**
|
||||
* Implements hook_install().
|
||||
*/
|
||||
function site_users_install() {
|
||||
// Configurar form display para os campos de usuário.
|
||||
$form_display = EntityFormDisplay::load('user.user.default');
|
||||
if ($form_display) {
|
||||
// Campo Nome.
|
||||
if (!$form_display->getComponent('field_user_name')) {
|
||||
$form_display->setComponent('field_user_name', [
|
||||
'type' => 'string_textfield',
|
||||
'weight' => 10,
|
||||
'settings' => [
|
||||
'size' => 60,
|
||||
'placeholder' => '',
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Telefone.
|
||||
if (!$form_display->getComponent('field_user_phone')) {
|
||||
$form_display->setComponent('field_user_phone', [
|
||||
'type' => 'telephone_default',
|
||||
'weight' => 11,
|
||||
'settings' => [
|
||||
'placeholder' => '',
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Categoria.
|
||||
if (!$form_display->getComponent('field_user_category')) {
|
||||
$form_display->setComponent('field_user_category', [
|
||||
'type' => 'string_textfield',
|
||||
'weight' => 12,
|
||||
'settings' => [
|
||||
'size' => 60,
|
||||
'placeholder' => '',
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Código do Departamento.
|
||||
if (!$form_display->getComponent('field_user_dept_code')) {
|
||||
$form_display->setComponent('field_user_dept_code', [
|
||||
'type' => 'string_textfield',
|
||||
'weight' => 13,
|
||||
'settings' => [
|
||||
'size' => 60,
|
||||
'placeholder' => '',
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Fotos - Media Library widget.
|
||||
if (!$form_display->getComponent('field_user_photos')) {
|
||||
$form_display->setComponent('field_user_photos', [
|
||||
'type' => 'media_library_widget',
|
||||
'weight' => 14,
|
||||
'settings' => [
|
||||
'media_types' => [],
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Biografia.
|
||||
if (!$form_display->getComponent('field_user_bio')) {
|
||||
$form_display->setComponent('field_user_bio', [
|
||||
'type' => 'text_textarea',
|
||||
'weight' => 15,
|
||||
'settings' => [
|
||||
'rows' => 5,
|
||||
'placeholder' => '',
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Foto Padrão - oculto no form (será gerenciado via hook_form_alter).
|
||||
$form_display->removeComponent('field_user_default_photo');
|
||||
|
||||
$form_display->save();
|
||||
}
|
||||
|
||||
// Configurar view display para os campos de usuário.
|
||||
$view_display = EntityViewDisplay::load('user.user.default');
|
||||
if ($view_display) {
|
||||
// Campo Nome.
|
||||
if (!$view_display->getComponent('field_user_name')) {
|
||||
$view_display->setComponent('field_user_name', [
|
||||
'type' => 'string',
|
||||
'weight' => 10,
|
||||
'label' => 'above',
|
||||
'settings' => [
|
||||
'link_to_entity' => FALSE,
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Telefone.
|
||||
if (!$view_display->getComponent('field_user_phone')) {
|
||||
$view_display->setComponent('field_user_phone', [
|
||||
'type' => 'telephone_link',
|
||||
'weight' => 11,
|
||||
'label' => 'above',
|
||||
'settings' => [
|
||||
'title' => '',
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Categoria.
|
||||
if (!$view_display->getComponent('field_user_category')) {
|
||||
$view_display->setComponent('field_user_category', [
|
||||
'type' => 'string',
|
||||
'weight' => 12,
|
||||
'label' => 'above',
|
||||
'settings' => [
|
||||
'link_to_entity' => FALSE,
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Código do Departamento.
|
||||
if (!$view_display->getComponent('field_user_dept_code')) {
|
||||
$view_display->setComponent('field_user_dept_code', [
|
||||
'type' => 'string',
|
||||
'weight' => 13,
|
||||
'label' => 'above',
|
||||
'settings' => [
|
||||
'link_to_entity' => FALSE,
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Fotos.
|
||||
if (!$view_display->getComponent('field_user_photos')) {
|
||||
$view_display->setComponent('field_user_photos', [
|
||||
'type' => 'entity_reference_entity_view',
|
||||
'weight' => 14,
|
||||
'label' => 'above',
|
||||
'settings' => [
|
||||
'view_mode' => 'default',
|
||||
'link' => FALSE,
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Biografia.
|
||||
if (!$view_display->getComponent('field_user_bio')) {
|
||||
$view_display->setComponent('field_user_bio', [
|
||||
'type' => 'text_default',
|
||||
'weight' => 15,
|
||||
'label' => 'above',
|
||||
'settings' => [],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
// Campo Foto Padrão.
|
||||
if (!$view_display->getComponent('field_user_default_photo')) {
|
||||
$view_display->setComponent('field_user_default_photo', [
|
||||
'type' => 'entity_reference_entity_view',
|
||||
'weight' => 5,
|
||||
'label' => 'hidden',
|
||||
'settings' => [
|
||||
'view_mode' => 'default',
|
||||
'link' => FALSE,
|
||||
],
|
||||
'region' => 'content',
|
||||
]);
|
||||
}
|
||||
|
||||
$view_display->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adiciona o campo field_user_default_photo para seleção de foto padrão.
|
||||
*/
|
||||
function site_users_update_10001() {
|
||||
// Criar field storage se não existir.
|
||||
if (!FieldStorageConfig::loadByName('user', 'field_user_default_photo')) {
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => 'field_user_default_photo',
|
||||
'entity_type' => 'user',
|
||||
'type' => 'entity_reference',
|
||||
'settings' => [
|
||||
'target_type' => 'media',
|
||||
],
|
||||
'cardinality' => 1,
|
||||
'translatable' => FALSE,
|
||||
])->save();
|
||||
}
|
||||
|
||||
// Criar field instance se não existir.
|
||||
if (!FieldConfig::loadByName('user', 'user', 'field_user_default_photo')) {
|
||||
FieldConfig::create([
|
||||
'field_name' => 'field_user_default_photo',
|
||||
'entity_type' => 'user',
|
||||
'bundle' => 'user',
|
||||
'label' => 'Foto Padrão',
|
||||
'description' => 'Selecione a foto principal do perfil.',
|
||||
'required' => FALSE,
|
||||
'settings' => [
|
||||
'handler' => 'default:media',
|
||||
'handler_settings' => [
|
||||
'target_bundles' => [
|
||||
'image' => 'image',
|
||||
],
|
||||
'sort' => [
|
||||
'field' => '_none',
|
||||
'direction' => 'ASC',
|
||||
],
|
||||
'auto_create' => FALSE,
|
||||
'auto_create_bundle' => '',
|
||||
],
|
||||
],
|
||||
])->save();
|
||||
}
|
||||
|
||||
// Configurar view display.
|
||||
$view_display = EntityViewDisplay::load('user.user.default');
|
||||
if ($view_display && !$view_display->getComponent('field_user_default_photo')) {
|
||||
$view_display->setComponent('field_user_default_photo', [
|
||||
'type' => 'entity_reference_entity_view',
|
||||
'weight' => 5,
|
||||
'label' => 'hidden',
|
||||
'settings' => [
|
||||
'view_mode' => 'default',
|
||||
'link' => FALSE,
|
||||
],
|
||||
'region' => 'content',
|
||||
])->save();
|
||||
}
|
||||
|
||||
// Ocultar do form display (será gerenciado via hook_form_alter).
|
||||
$form_display = EntityFormDisplay::load('user.user.default');
|
||||
if ($form_display) {
|
||||
$form_display->removeComponent('field_user_default_photo')->save();
|
||||
}
|
||||
|
||||
return t('Campo de foto padrão criado com sucesso.');
|
||||
}
|
||||
Reference in New Issue
Block a user