Skip to content

NexTool 4.2.0 [GLPI 11]

Choose a tag to compare

@RPGMais RPGMais released this 07 Jun 04:11
· 19 commits to main since this release

Corrigido

  • Busca das grades Search::show das abas de módulo falhava (GLPI 11: recarregava a página inteira ao clicar "Pesquisar"; GLPI 10: aba renderizava vazia): o /ajax/search.php genérico não encontrava a classe do módulo (vive em files/_plugins/.../modules/<x>/inc/, fora do autoload do core) → ClassNotFoundError/HTTP 500 → o JS recarrega a página e a busca nunca filtra. Em casos com dados, mesmo com a classe carregada o Search estourava getItemForItemtype(null) ao renderizar, porque getItemTypeForTable() não resolve tabelas custom (ex: ..._log). Solução central, sem boilerplate por módulo: (1) autoloader em inc/modulespath.inc.php que resolve PluginNextool<Modulo><Classe>modules/<modulo>/inc/<classe>.class.php; (2) mapeamento reverso tabela→itemtype em $CFG_GLPI['glpiitemtypetables'] populado ao carregar a classe; (3) scan no boot (setup.php) para as classes searchable pré-carregadas pelos onInit. Resolve todos os módulos (ativos e inativos) e previne recorrência. Auditoria E2E: GLPI 11 37/37 itemtypes OK, GLPI 10 9/9.

Modificado

  • Removido o boilerplate redundante de registro de classe searchable nos onInit dos módulos (require_once <classe>.class.php + getTableForItemType(...)): desnecessário com o autoloader central acima. Registro de Config (Plugin::registerClass) e hooks mantidos.

Corrigido

  • Validação de licença travava após reinstalação (409 identifier_already_provisioned): o uninstall apagava o segredo HMAC do glpi_configs (context plugin:nextool_distribution); como o client_identifier é determinístico por domínio, reinstalar no mesmo domínio gerava o mesmo identifier mas sem o segredo, e o bootstrap retornava 409 (hardening CR-01 do ContainerAPI). Afetava clientes FREE e PAID. Solução: o vínculo de provisionamento (client_identifier + client_secret) agora é persistido num context dedicado plugin:nextool_provisioning que sobrevive ao uninstall; getDistributionSettings() lê dele como fonte de verdade (fallback para distribution). Reinstalar no mesmo domínio reusa o segredo automaticamente -- sem 409. Migração idempotente no install/upgrade copia o segredo existente para o novo context.
  • Botão "Regenerar HMAC" podia deixar o cliente sem segredo: ele zerava o client_secret ANTES de chamar o bootstrap; com o CR-01, o bootstrap falhava com 409 e o cliente ficava travado sem segredo. Agora não zera antes de obter o novo, e o 409 exibe mensagem clara orientando o reset do provisionamento pelo administrador (o segredo atual permanece válido via plugin:nextool_provisioning).
  • getConfig() ignorava defaults adicionados depois do 1º save (config silenciosamente OFF): PluginNextoolBaseModule::getConfig() retornava só o JSON persistido na coluna config, sem mesclar getDefaultConfig(). Qualquer chave nova do default ficava ausente → tratada como desligada. No glpisync isso desligava o poll inteiro (poll_enabled/sync_status nunca tinham sido persistidos). Agora faz array_merge(getDefaultConfig(), persistido): o default vale como base e o config salvo sobrescreve (inclusive um 0 explícito do usuário prevalece). Afeta TODOS os módulos cujo getDefaultConfig() cresceu após o primeiro save.
  • Auditoria perdia as chaves de details (regressão): PluginNextoolBaseAuditLog::jsonEncodeIfArray() aplicava array_values() a qualquer array, descartando as chaves de arrays associativos (ex.: details => ['channel'=>…, 'error'=>…]), e o formatDetails() passava a exibir índices numéricos em vez dos nomes. Agora array_values() só roda para listas (array_is_list()); mapas associativos preservam as chaves. (Equalização 4.2.0 — o GLPI 10 já gravava correto.)
  • i18n: a string "Apenas arquivos PHP são permitidos." em front/modules.php voltou a usar __() (estava hardcoded; o GLPI 10 já usava). (Equalização 4.2.0.)

Adicionado

  • Ação "Desvincular ambiente" (unlink_environment em config.save.php): limpa o vínculo de provisionamento local (segredo HMAC persistido + tabela legacy), para descomissionar o ambiente ou re-provisionar do zero. Handler pronto (sem botão na UI por ora).
  • Cache-busting dos assets de módulo (fv): PluginNextoolBaseModule::getCssPath()/getJsPath() passam a anexar um carimbo fv por filemtime (md5(versão|mtime)) na URL do JS/CSS servido por module_assets.php. O v que o GLPI já anexa é a versão do plugin – não muda em edição de runtime nem hotfix, então browser/proxy/CDN serviam o asset velho (exigindo hard reload do usuário). O fv muda a cada edição do arquivo → o deploy chega ao usuário no próximo carregamento normal de página, sem hard reload. Vale para todos os módulos que usam os helpers. Novo helper getAssetFv().

Etiqueta: nextool[GLPI_11]