--- id: KB-PLUGIN-004 title: Chave do hook ADD_JAVASCRIPT deve ser o plugin key exato domain: plugin-dev tags: - glpi - glpi11 - hooks - javascript - setup.php - plugin-key status: active severity: high created_at: 2026-05-02 updated_at: 2026-05-02 applies_to: - GLPI 11.x - qualquer plugin que injete JS via PLUGIN_HOOKS related_records: - KB-PLUGIN-001 - KB-PLUGIN-002 --- # Contexto Ao registrar arquivos JS em `setup.php` via `$PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]`, a chave do array deve ser exatamente o plugin key — o mesmo nome do diretório do plugin. # Sintoma observável - O arquivo JS do plugin nunca é incluído nas páginas do GLPI. - Nenhum erro é exibido — a falha é silenciosa. - Funcionalidades que dependem do JS simplesmente não funcionam. # Causa raiz `getPluginsJsScriptsFiles()` itera sobre `$PLUGIN_HOOKS['add_javascript']` e chama `Plugin::isPluginActive($plugin)` usando a **chave** do array como nome do plugin. Se a chave for diferente do plugin key real, `isPluginActive()` retorna `false` e o arquivo JS é ignorado sem qualquer aviso. ```php // ERRADO — chave diferente do plugin key $PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]['splititil_form'] = ['js/splititil-form.js']; // CORRETO — chave = plugin key exato $PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]['splititil'] = ['js/splititil-form.js']; ``` # Para formulários públicos (anônimos) Usar `ADD_JAVASCRIPT_ANONYMOUS_PAGE` além de `ADD_JAVASCRIPT` para que o JS seja carregado em páginas de formulário acessadas sem login: ```php $PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]['splititil'] = ['js/splititil-form.js']; $PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT_ANONYMOUS_PAGE]['splititil'] = ['js/splititil-form.js']; ``` # Validação padrão 1. Verificar no HTML renderizado se o `