Redmine/CHANGELOG.md
Gemini c8765ca5ff fix: custom fields obrigatórios na criação de projeto + identifier lowercase (1.5.6)
- form das abas Redmine exibe/envia custom_field_values (Tipo de Projeto etc.)
- createProjectFull normaliza o identificador (minúsculas)
- sync da aba de projeto usa syncMetadata completo (não apaga mais o cache)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 09:53:23 -03:00

119 lines
5 KiB
Markdown

# Changelog
Todas as mudanças relevantes deste plugin são documentadas aqui.
O formato segue [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/)
e o versionamento segue [SemVer](https://semver.org/lang/pt-BR/).
## [1.5.6]
### Corrigido
- **Criação de projeto Redmine falhava** em instâncias com campos personalizados
obrigatórios de projeto (ex.: "Tipo de Projeto", "Tipo de Faturamento"): o form
das abas Redmine agora exibe esses campos (dropdown para listas) e os envia
como `custom_field_values`.
- **Identificador** é normalizado (minúsculas) na criação — "GNA" virava
"Identificador não é válido".
- O "Sincronizar Metadados" da aba de projeto fazia um sync parcial que apagava
trackers/status/prioridades do cache; agora usa o sync completo (inclui usuários).
## [1.5.5]
### Corrigido
- Se a issue Redmine vinculada a um chamado foi **apagada** no Redmine, o plugin
reusava o ID órfão e falhava ("Tarefa não é válido"). Agora ele verifica se a
issue ainda existe; se não, remove o vínculo órfão e **recria** a issue.
## [1.5.4]
### Corrigido
- Lançamento de tempo: o campo **comentário** é obrigatório em algumas configs do
Redmine. Se a tarefa do GLPI não tiver descrição, o plugin agora envia um
comentário padrão ("Tempo lançado via GLPI (chamado #N)") em vez de vazio.
### Notas
- A **Atividade** do lançamento de tempo é **por projeto** no Redmine: a atividade
configurada como padrão precisa estar habilitada no projeto vinculado.
## [1.5.3]
### Corrigido
- **Vínculo gravava o ID errado do projeto Redmine**: o `merge` do Twig renumera
chaves inteiras, então o dropdown gravava o índice (posição) em vez do ID real
do projeto. As opções passam a ser montadas no PHP (preservam os IDs).
### Adicionado
- Botão **Desvincular** na aba Redmine (projeto e entidade) — antes só dava pra vincular.
- A visão "vinculado" mostra o **nome** do projeto Redmine (não só o ID).
- Dropdown de projetos lista **apenas projetos ativos** (evita vincular projeto fechado/arquivado).
## [1.5.2]
### Corrigido
- Compatibilidade com GLPI 11.0.4: `Toolbox::logError()` não existe nessa versão e
causava erro fatal (`undefined method logError`) ao criar issue / lançar tempo /
garantir membership. Substituído por `Toolbox::logInFile('redmine', ...)`, disponível
em todas as versões.
## [1.5.1]
### Corrigido
- Compatibilidade com GLPI 11.0.4: o formulário de configuração usava o macro
`fields.csrfField()` (só existe a partir de versões mais novas), causando
`Macro "csrfField" is not defined`. Agora o token CSRF é emitido via
`csrf_token_value` (PHP), e o campo de URL usa `textField` — compatível com 11.0.0+.
## [1.5.0]
### Adicionado
- **Kill switch de licença Mindtek / Mind Place** (requisito do marketplace): o plugin
só ativa e registra seus hooks se a licença for válida (`\GlpiPlugin\Mindplace\License::isValid()`).
Sem Mind Place ou com licença inválida, o plugin é desativado por segurança, sem erros.
## [1.4.0]
### Adicionado
- Vínculo **Entidade GLPI → Projeto Redmine** (1:1, match exato, sem herança de árvore), via aba Redmine em Administração → Entidades — para clientes de suporte recorrente cujos chamados nascem na entidade, sem projeto.
- Documentação de API para desenvolvedores (`docs/API.md`).
### Alterado
- Resolução do projeto Redmine no hook passa a considerar, além do projeto vinculado, a **entidade** do chamado como fallback.
- Templates do tab generalizados (`owner_field`/`owner_id`) para reuso entre Projeto e Entidade.
## [1.3.0]
### Adicionado
- Mapeamento de usuários GLPI → Redmine (auto-match por e-mail + overrides manuais).
- Autoria real de issues e lançamentos de tempo via *impersonation* (`X-Redmine-Switch-User`).
- Inclusão automática do técnico como membro do projeto Redmine (papel configurável).
- Observadores padrão configuráveis nas issues.
## [1.2.0]
### Adicionado
- Formulário de configuração com valores padrão da issue (tracker, prioridade, atividade).
- Mapa de status Chamado GLPI → Status Redmine.
- Categoria padrão por vínculo de projeto.
- "Sincronizar Metadados" passa a cachear trackers, status, prioridades, atividades e usuários.
### Alterado
- `createIssue`/`logTime` enriquecidos com os valores padrão.
- Tempo só é enviado ao Redmine quando a tarefa é marcada como "Feito".
## [1.1.0]
### Adicionado
- Tabela de mapeamento Chamado → Issue (uma issue por chamado) e Tarefa → lançamento de tempo.
### Corrigido
- Issue duplicada a cada salvamento de tarefa.
- Dupla contagem de tempo em edições de tarefa.
- Resolução do projeto Redmine pelo vínculo salvo (em vez de identificador adivinhado).
- Vínculo direto chamado↔projeto lido da tabela correta do GLPI 11 (`glpi_itils_projects`).
### Segurança
- Chave de API criptografada em repouso (GLPIKey), com migração da chave existente.
## [1.0.0]
### Adicionado
- Versão inicial: vínculo de projeto, configuração de URL/chave e criação básica de issues/tempo.