mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/site_users.git
synced 2026-05-04 01:10:41 -03:00
Sub-módulo site_users_blog:
- Tipo de conteúdo blog_post (título, corpo, imagem, assuntos)
- Vocabulário blog_tags para categorias
- Listagem em /user/{uid}/blog via Views com filtro contextual por autor
- Padrão Pathauto: user/[node:author:uid]/blog/[node:title]
- hook_node_presave: preenche field_site_section com o autor
- hook_node_access: restringe criação às roles configuradas
- hook_preprocess_structural_pages_menu: injeta item "Blog" quando
usuário tem posts publicados
- Plugin BlogUserHandler: resolve usuário ancestral para rotas de blog
(post individual e listagem Views)
- Link "Post de blog" no menu "Adicionar" da conta
- Página de configuração de roles permitidas
- Update 10001: adiciona field_site_section a posts existentes
MicrositeThemeNegotiator:
- Injeta path.current para cobrir rotas sem parâmetro 'user' (ex.: Views)
- Qualquer path /user/{uid}/... recebe o tema do microsite
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
80 lines
2.2 KiB
Plaintext
80 lines
2.2 KiB
Plaintext
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Instalação do módulo site_users_blog.
|
|
*/
|
|
|
|
/**
|
|
* Implements hook_install().
|
|
*/
|
|
function site_users_blog_install(): void {
|
|
// Adiciona o campo body ao tipo blog_post.
|
|
$type = \Drupal::entityTypeManager()
|
|
->getStorage('node_type')
|
|
->load('blog_post');
|
|
|
|
if ($type) {
|
|
node_add_body_field($type, 'Conteúdo');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Adiciona field_site_section ao blog_post e preenche posts existentes.
|
|
*/
|
|
function site_users_blog_update_10001(): string {
|
|
$entity_type_manager = \Drupal::entityTypeManager();
|
|
|
|
// Cria a instância do campo se ainda não existir.
|
|
if (!\Drupal\field\Entity\FieldConfig::loadByName('node', 'blog_post', 'field_site_section')) {
|
|
\Drupal\field\Entity\FieldConfig::create([
|
|
'field_name' => 'field_site_section',
|
|
'entity_type' => 'node',
|
|
'bundle' => 'blog_post',
|
|
'label' => 'Seção do site',
|
|
'required' => FALSE,
|
|
'translatable' => FALSE,
|
|
])->save();
|
|
|
|
// Oculta o campo no formulário padrão.
|
|
$form_display = $entity_type_manager
|
|
->getStorage('entity_form_display')
|
|
->load('node.blog_post.default');
|
|
if ($form_display) {
|
|
$form_display->removeComponent('field_site_section')->save();
|
|
}
|
|
|
|
// Oculta o campo nas exibições padrão e teaser.
|
|
foreach (['default', 'teaser'] as $mode) {
|
|
$view_display = $entity_type_manager
|
|
->getStorage('entity_view_display')
|
|
->load('node.blog_post.' . $mode);
|
|
if ($view_display) {
|
|
$view_display->removeComponent('field_site_section')->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Preenche posts existentes que ainda não têm field_site_section.
|
|
$nids = $entity_type_manager->getStorage('node')->getQuery()
|
|
->condition('type', 'blog_post')
|
|
->notExists('field_site_section')
|
|
->accessCheck(FALSE)
|
|
->execute();
|
|
|
|
$count = 0;
|
|
foreach ($nids as $nid) {
|
|
$node = $entity_type_manager->getStorage('node')->load($nid);
|
|
if ($node) {
|
|
$node->set('field_site_section', [
|
|
'target_type' => 'user',
|
|
'target_id' => $node->getOwnerId(),
|
|
]);
|
|
$node->save();
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
return "field_site_section adicionado ao blog_post; $count posts existentes atualizados.";
|
|
}
|