Skip to content

NexTool 3.7.1 [GLPI 11]

Choose a tag to compare

@RPGMais RPGMais released this 09 Mar 00:15
· 116 commits to main since this release

[3.7.1] — 2026-03-08

Adicionado

  • Confirmação experimental no auto-update: antes de aplicar a atualização, o usuário deve digitar "confirmo" (com suporte i18n) para prosseguir, prevenindo execuções acidentais.
  • Artefato ContainerAPI no fluxo de release pública: o script public-release.sh agora gera automaticamente o ZIP + SHA256 + JSON de metadados e copia para o storage do ContainerAPI, eliminando etapa manual.

Alterado

  • UX do modal de atualização: melhorias no feedback visual dos logs, modais de confirmação e mensagens de status de licença.
  • Staging do CoreUpdater: diretórios de staging são criados automaticamente, com verificação de state pós-apply para confirmar integridade.

Corrigido

  • Internacionalização: +168 strings traduzidas para en_US, en_GB, es_ES, es_MX, fr_FR e it_IT; demais 15 locales com .po sincronizados.

[3.7.0] — 2026-03-07

Adicionado

  • Bloqueio de módulos pagos em licença SUSPENDED: quando a licença está suspensa, módulos pagos são bloqueados automaticamente com feedback visual no catálogo.
  • Processamento de core_update hint: o plugin detecta e exibe atualizações disponíveis do core a partir da resposta do ContainerAPI.

Alterado

  • Modelo de licença simplificado: removido campo contract_active da tabela de licença; plano "PRO" renomeado para "LICENCIADO" para maior clareza comercial; novo método hasLicenseForModule() centraliza verificação de permissão por módulo.
  • Normalização de planos centralizada: função normalizePlan() extraída para tratar planos legados de forma consistente em todo o código.
  • Menu lateral reorganizado: itens do menu Nextools reestruturados com melhor hierarquia; botão Sincronizar recebeu cooldown de 30s para evitar cliques repetidos.
  • Subtab Atualização substituída por modal: fluxo de atualização do plugin movido de subtab dedicada para modal Bootstrap no HERO, simplificando a navegação.
  • CoreUpdater — postUpdatePluginActivation simplificado: removidas chamadas a Plugin::checkPluginState(), Plugin::install() e Plugin::activate(); substituídas por single $DB->update() (version + state=ACTIVATED). Motivo: include_once mantém setup.php antigo em memória, causando transições de estado imprevisíveis com métodos nativos.
  • CoreUpdater — resetOpcache reordenado: opcache_reset() agora é chamado ANTES de postUpdatePluginActivation() para garantir conteúdo fresco.
  • CoreUpdater — redirect pós-apply: JS redireciona para /front/plugin.php (página core) em vez de location.reload(), evitando erro "Plugin not loaded" em estado transicional do Symfony LegacyRouterListener.
  • CoreUpdater — artefato whitelist-only: ContainerAPI gera ZIP via .public-include; sem .github/ ou arquivos de repositório no pacote.

Corrigido

  • Fatal Error em plano FREE: adicionado método getBillingTier() ao ModuleManager, corrigindo erro fatal ao acessar catálogo de módulos sem licença ativa.
  • Resultado de auditoria: log de auditoria da sincronização agora reflete o sucesso da operação de sync, não a validade da licença.
  • CoreUpdater — pkill removido do resetOpcache: exec('pkill -USR2 php-fpm') matava o worker PHP-FPM executando o request de apply, causando 503.
  • CoreUpdater — protected paths em verify: verifyIntegrity() agora pula .git/, .github/, .gitignore na checagem de manifest (além de overwrite, cleanup e rollback que já tinham proteção).
  • CoreUpdater — cleanupRemovedFiles escopo: opera apenas em plugins/nextool/; módulos em files/_plugins/nextool/modules/ nunca são afetados.

[3.6.0] - 2026-03-07

Adicionado

  • Chips de estado de instalação: aba de módulos exibe chip visual indicando estado (Instalado, Ativo, Desativado) com persistência de filtros entre navegações.
  • Correlação de eventos (request_group_id): requisições ao ContainerAPI enviam X-Request-Group-Id (UUID v4) para rastreamento end-to-end, gerado em config.save.php e module_action.php.
  • Cache negativo de licenciamento (10min): resultados no_license cacheados por 10 minutos, evitando requisições repetidas ao ContainerAPI.
  • Debounce no botão Sincronizar: botão desabilitado durante requisição com spinner visual, prevenindo cliques múltiplos.
  • Internacionalização ampliada: suporte base expandido para 21 locales com padronização do domínio de tradução nextool.
  • Filtros de módulos na configuração: busca client-side com chips de filtro para facilitar descoberta no catálogo.

Alterado

  • Code review completo (60 arquivos, -951 linhas): sanitização de input, validação CSRF, prepared statements, remoção de código morto e órfão, deduplicação de lógica, correção de code smells, adição de declare(strict_types=1) em todos os arquivos PHP.
  • Sistema de atualização reescrito (Option D): novo algoritmo in-place safe replace substitui diretório do plugin atomicamente sem staging intermediário. Preflight lock corrigido com staging isolado e logs debug aprimorados.
  • Cron assistido removido: fluxo de atualização agora é 100% manual (via botão na configuração), eliminando complexidade do cron.

Removido

  • Validação de licença em ações locais: installModule() e enableModule() não chamam mais a API de licenciamento — ações locais são independentes do ContainerAPI.

Corrigido

  • Persistência de aba ativa: ao trocar aba pelo seletor interno da configuração e recarregar a página, o plugin permanece na aba atual.
  • Validação server-side da URL da ContainerAPI: bloqueia URLs inválidas no salvamento da configuração.
  • Sincronização e bootstrap: melhor tratamento de erros de comunicação, mensagens mais específicas em falhas de bootstrap HMAC e gravação de falhas na auditoria de configuração.
  • Headers i18n: correção de cabeçalhos de tradução e seed idempotente do config_display.

Etiqueta: nextool[GLPI_11]