Repository navigation
NexTool 3.7.1 [GLPI 11]
[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.shagora 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
.posincronizados.
[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_updatehint: 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_activeda tabela de licença; plano "PRO" renomeado para "LICENCIADO" para maior clareza comercial; novo métodohasLicenseForModule()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()ePlugin::activate(); substituídas por single$DB->update()(version + state=ACTIVATED). Motivo:include_oncemantémsetup.phpantigo em memória, causando transições de estado imprevisíveis com métodos nativos. - CoreUpdater — resetOpcache reordenado:
opcache_reset()agora é chamado ANTES depostUpdatePluginActivation()para garantir conteúdo fresco. - CoreUpdater — redirect pós-apply: JS redireciona para
/front/plugin.php(página core) em vez delocation.reload(), evitando erro "Plugin not loaded" em estado transicional do SymfonyLegacyRouterListener. - 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()aoModuleManager, 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/,.gitignorena 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 emfiles/_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 enviamX-Request-Group-Id(UUID v4) para rastreamento end-to-end, gerado emconfig.save.phpemodule_action.php. - Cache negativo de licenciamento (10min): resultados
no_licensecacheados 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()eenableModule()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]