7 Commits

Author SHA1 Message Date
204445853d Define package 'Site Tools' em todos os submódulos
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 07:56:22 -03:00
727c726014 Altera type para drupal-custom-module
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 16:13:48 -03:00
9d63359854 Adiciona composer.json aos sub-módulos
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:45:43 -03:00
d113e932ba Corrige erro em composer.json 2026-03-24 16:01:53 -03:00
f937b84c50 Corrige erro em composer.json 2026-03-24 15:42:28 -03:00
7aefb543e9 Estende PageUserIsCurrentUser para rotas sem parâmetro 'user'
Cascata de resolução do UID do dono da página:
1. Parâmetro 'user' da rota (comportamento original)
2. Parâmetro 'arg_0' numérico (Views pages, ex.: /user/{uid}/blog)
3. Autor do nó (entity.node.canonical sem parâmetro 'user')
4. Fallback: UID extraído do path atual /user/{uid}/...

Injeta CurrentPathStack para suportar o fallback por path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 07:32:55 -03:00
41378004a2 Corrige condição de bloco para rotas sem parâmetro 'user'
Em rotas de nós exibidos como páginas do microsite (/user/{id}/...),
a rota não carrega o parâmetro 'user'. A condição agora usa o autor
do nó como fallback, permitindo que o bloco apareça corretamente
nessas páginas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 08:53:14 -03:00
9 changed files with 64 additions and 8 deletions

View File

@@ -1,9 +1,10 @@
{
"name": "imecc/site_tools",
"description": "Módulo Drupal com ferramentas utilitárias reutilizáveis em outros módulos do site."
"type": "drupal-module",
"description": "Módulo Drupal com ferramentas utilitárias reutilizáveis em outros módulos do site.",
"type": "drupal-custom-module",
"license": "GPL-2.0-or-later",
"require": {
"php": ">=8.4"
"php": ">=8.1",
"drupal/core": "^10.3 || ^11"
}
}

View File

@@ -0,0 +1,12 @@
{
"name": "imecc/site_tools_group_helpers",
"description": "Utilitários reutilizáveis para integração com o módulo Group.",
"type": "drupal-module",
"license": "GPL-2.0-or-later",
"require": {
"php": ">=8.1",
"drupal/core": "^10.3 || ^11",
"imecc/site_tools": "*",
"drupal/group": "*"
}
}

View File

@@ -2,7 +2,7 @@ name: 'Site Tools — Group Helpers'
type: module
description: 'Utilitários reutilizáveis para integração com o módulo Group.'
core_version_requirement: ^10.3 || ^11
package: Custom
package: 'Site Tools'
dependencies:
- site_tools:site_tools
- group:group

View File

@@ -0,0 +1,11 @@
{
"name": "imecc/site_tools_msc_2020",
"description": "Vocabulário de taxonomia MSC 2020 (Mathematics Subject Classification).",
"type": "drupal-module",
"license": "GPL-2.0-or-later",
"require": {
"php": ">=8.1",
"drupal/core": "^10 || ^11",
"imecc/site_tools": "*"
}
}

View File

@@ -2,7 +2,7 @@ name: 'Site Tools MSC 2020'
type: module
description: 'Vocabulário de taxonomia MSC 2020 (Mathematics Subject Classification).'
core_version_requirement: ^10 || ^11
package: Custom
package: 'Site Tools'
dependencies:
- site_tools:site_tools
- drupal:taxonomy

View File

@@ -0,0 +1,13 @@
{
"name": "imecc/site_tools_msc_2020_migrate",
"description": "Migrations para importação dos termos MSC 2020 (inglês e português).",
"type": "drupal-module",
"license": "GPL-2.0-or-later",
"require": {
"php": ">=8.1",
"drupal/core": "^10 || ^11",
"imecc/site_tools_msc_2020": "*",
"drupal/migrate_plus": "*",
"drupal/migrate_source_csv": "*"
}
}

View File

@@ -2,7 +2,7 @@ name: 'Site Tools MSC 2020 Migrate'
type: module
description: 'Migrations para importação dos termos MSC 2020 (inglês e português).'
core_version_requirement: ^10 || ^11
package: Custom
package: 'Site Tools'
dependencies:
- site_tools:site_tools_msc_2020
- migrate:migrate

View File

@@ -2,4 +2,4 @@ name: Site Tools
type: module
description: 'Ferramentas utilitárias reutilizáveis para outros módulos do site.'
core_version_requirement: ^10.3 || ^11
package: Custom
package: 'Site Tools'

View File

@@ -4,9 +4,11 @@ namespace Drupal\site_tools\Plugin\Condition;
use Drupal\Core\Condition\ConditionPluginBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Path\CurrentPathStack;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\node\NodeInterface;
use Drupal\user\UserInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -29,6 +31,7 @@ class PageUserIsCurrentUser extends ConditionPluginBase implements ContainerFact
$plugin_definition,
protected RouteMatchInterface $routeMatch,
protected AccountInterface $currentUser,
protected CurrentPathStack $currentPath,
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
}
@@ -40,6 +43,7 @@ class PageUserIsCurrentUser extends ConditionPluginBase implements ContainerFact
$plugin_definition,
$container->get('current_route_match'),
$container->get('current_user'),
$container->get('path.current'),
);
}
@@ -89,7 +93,22 @@ class PageUserIsCurrentUser extends ConditionPluginBase implements ContainerFact
$page_uid = (int) $param;
}
else {
return FALSE;
// Views pages com arg_0 numérico (ex.: /user/{uid}/blog).
$arg0 = $this->routeMatch->getParameter('arg_0');
if (is_numeric($arg0)) {
$page_uid = (int) $arg0;
}
// Nós do microsite: usa o autor como usuário da página.
elseif (($node = $this->routeMatch->getParameter('node')) instanceof NodeInterface) {
$page_uid = (int) $node->getOwnerId();
}
// Fallback: extrai o UID do path atual /user/{uid}/...
elseif (preg_match('#^/user/(\d+)(/|$)#', $this->currentPath->getPath(), $m)) {
$page_uid = (int) $m[1];
}
else {
return FALSE;
}
}
return $page_uid === (int) $this->currentUser->id();