3.7 KiB
3.7 KiB
| id | title | domain | tags | status | severity | created_at | updated_at | applies_to | related_records | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KB-PLUGIN-006 | Procedimento completo de renomeacao de plugin GLPI | plugin-dev |
|
active | medium | 2026-05-02 | 2026-05-02 |
|
|
Contexto
Renomear um plugin GLPI envolve muito mais do que trocar o nome do diretório.
O plugin key permeia namespace PHP, hooks, tabelas de banco, URLs de ajax, classes JS/CSS
e o registro na tabela glpi_plugins. Uma renomeação incompleta causa falhas silenciosas.
Mapa completo de substituições (do mais específico para o mais geral)
Execute na seguinte ordem para evitar substituições duplas:
GlpiPlugin\OldName → GlpiPlugin\NewName (namespace)
PluginOldName → PluginNewName (prefixo de classe legado)
PLUGIN_OLDNAME → PLUGIN_NEWNAME (constantes)
plugin_oldname → plugin_newname (funções e hook keys)
glpi_plugin_oldname → glpi_plugin_newname (tabelas de banco)
QuestionTypeOldName → QuestionTypeNewName (classes src/)
data-oldname- → data-newname- (atributos JS)
oldname-group → newname-group (classes CSS)
oldname_container → newname_container (classes CSS)
@oldname/ → @newname/ (namespace Twig)
"oldname" → "newname" (string literal entre aspas)
OldName → NewName (PascalCase restante)
oldname → newname (lowercase restante)
"Old Display Name" → "New Display Name" (nome de exibição)
"Old Author" → "New Author" (autor)
Comando com perl (mais confiável que sed no macOS):
find ./plugins/oldname -type f ! -path "*/vendor/*" ! -name "*.png" \
| xargs perl -i -pe 's/GlpiPlugin\\\\OldName/GlpiPlugin\\\\NewName/g; ...'
Arquivos a renomear (após substituir conteúdo)
mv ajax/oldname.php ajax/newname.php
mv ajax/oldname_data.php ajax/newname_data.php
mv public/css/oldname.css public/css/newname.css
mv public/js/oldname-form.js public/js/newname-form.js
mv public/js/oldname.js.php public/js/newname.js.php
mv oldname.xml newname.xml
mv src/QuestionTypeOldName.php src/QuestionTypeNewName.php
# ... demais arquivos src/
mv plugins/oldname plugins/newname # por último
Pós-renomeação: atualizar o GLPI
# Remover registro órfão do nome antigo (diretório não existe mais)
mysql -u glpi -p glpi -e "DELETE FROM glpi_plugins WHERE directory='oldname';"
# Instalar e ativar com o novo key
docker exec glpi-app php /var/www/glpi/bin/console plugin:install newname
docker exec glpi-app php /var/www/glpi/bin/console plugin:activate newname
docker exec glpi-app php /var/www/glpi/bin/console plugin:list
Verificação final
# Zero referências ao nome antigo (exceto menções históricas intencionais)
grep -rn "oldname\|OldName\|OLDNAME" ./plugins/newname \
--exclude-dir=vendor --exclude="*.png" | grep -v "vendor"
# Sintaxe PHP OK
find ./plugins/newname -name "*.php" ! -path "*/vendor/*" \
| xargs php -l | grep -v "No syntax errors"
Regra para agentes
Ao renomear um plugin:
- Substituir conteúdo (ordem do específico para o geral)
- Renomear arquivos individuais
- Renomear o diretório
- Limpar registro órfão no banco
- Reinstalar via console
Nunca renomear o diretório antes de substituir o conteúdo — o container pode perder a referência.
Classificação
- Tipo: Procedimento operacional de refatoração.
- Reutilização: aplicável a qualquer renomeação ou fork de plugin GLPI.