NexTool 4.2.0 [GLPI 11]
Corrigido
- Busca das grades
Search::showdas abas de módulo falhava (GLPI 11: recarregava a página inteira ao clicar "Pesquisar"; GLPI 10: aba renderizava vazia): o/ajax/search.phpgenérico não encontrava a classe do módulo (vive emfiles/_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 estouravagetItemForItemtype(null)ao renderizar, porquegetItemTypeForTable()não resolve tabelas custom (ex:..._log). Solução central, sem boilerplate por módulo: (1) autoloader eminc/modulespath.inc.phpque resolvePluginNextool<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 pelosonInit. 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
onInitdos 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 doglpi_configs(contextplugin:nextool_distribution); como oclient_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 dedicadoplugin:nextool_provisioningque sobrevive ao uninstall;getDistributionSettings()lê dele como fonte de verdade (fallback paradistribution). 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_secretANTES 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 viaplugin:nextool_provisioning). getConfig()ignorava defaults adicionados depois do 1º save (config silenciosamente OFF):PluginNextoolBaseModule::getConfig()retornava só o JSON persistido na colunaconfig, sem mesclargetDefaultConfig(). Qualquer chave nova do default ficava ausente → tratada como desligada. No glpisync isso desligava o poll inteiro (poll_enabled/sync_statusnunca tinham sido persistidos). Agora fazarray_merge(getDefaultConfig(), persistido): o default vale como base e o config salvo sobrescreve (inclusive um0explícito do usuário prevalece). Afeta TODOS os módulos cujogetDefaultConfig()cresceu após o primeiro save.- Auditoria perdia as chaves de
details(regressão):PluginNextoolBaseAuditLog::jsonEncodeIfArray()aplicavaarray_values()a qualquer array, descartando as chaves de arrays associativos (ex.:details => ['channel'=>…, 'error'=>…]), e oformatDetails()passava a exibir índices numéricos em vez dos nomes. Agoraarray_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.phpvoltou a usar__()(estava hardcoded; o GLPI 10 já usava). (Equalização 4.2.0.)
Adicionado
- Ação "Desvincular ambiente" (
unlink_environmentemconfig.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 carimbofvporfilemtime(md5(versão|mtime)) na URL do JS/CSS servido pormodule_assets.php. Ovque 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). Ofvmuda 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 helpergetAssetFv().
Etiqueta: nextool[GLPI_11]