- docs/DESIGN-2.0.md: decisões fechadas (tags PT, editor linha-a-linha,
escopo global, dry-run com preview) e arquitetura Motor x Template
- PluginRedmineTemplateengine: render mustache-like ({{ var | filtro }}),
regra de tipos (tag inteira = tipo nativo), lookup indexado
(map.status[chamado.status]), filtros (truncar, sem_html, minusculo,
identificador, padrao), prune de nulls, seeds 1.x-equivalentes e
descoberta de custom fields obrigatórios
- tabela glpi_plugin_redmine_templates (operation único, is_active)
- wiring com precedência de template + fallback no render em
create_issue, log_time e update_status
- validado: 12/12 unit + E2E (template ativo cria issue/tempo; template
quebrado cai no motor 1.x sem perder lançamento)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Causa raiz do incidente "autor = admin": cache de usuários vazio no prod.
- cache miss -> lookup ao vivo por e-mail no Redmine + upsert no cache
- syncUsers nunca mais esvazia a tabela (upsert por redmine_id)
- fallback para admin deixa rastro no log
- config exibe saúde do cache (contagem + alerta se vazio)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 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>
- opções do projeto Redmine montadas no PHP (Twig merge renumera chaves inteiras)
- aba mostra o NOME do projeto vinculado (não só o ID)
- botão Desvincular (projeto e entidade) + dropdown só com projetos ativos
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Toolbox::logError não existe no 11.0.4 -> erro fatal ao criar issue/lançar
tempo/garantir membership. Usa Toolbox::logInFile('redmine', ...).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- config_form usava fields.csrfField() (inexistente no 11.0.4) -> erro fatal
- token CSRF agora via csrf_token_value (PHP); URL usa textField
- compatível com 11.0.0+
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- plugin_init aborta e check_config falha se licença inválida ou Mind Place ausente
- README: seção de Licenciamento; CHANGELOG: 1.5.0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Endpoints, payloads, cabeçalhos, mapeamento de campos, impersonation,
idempotência e exemplos completos. Material de treino para a equipe.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- nova aba Redmine em Administração > Entidades (PluginRedmineEntity)
- tabela glpi_plugin_redmine_entities (1:1 entidade -> projeto Redmine, + categoria)
- hook resolve o projeto Redmine por: projeto vinculado OU, na ausência,
a entidade do chamado (match exato, sem herança de árvore)
- twigs do tab generalizados (owner_field/owner_id) p/ reuso projeto+entidade
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Plugin de integração GLPI <-> Redmine:
- Config nativa (Twig) com API key cifrada (GLPIKey)
- Vínculo projeto GLPI <-> projeto Redmine (aba do projeto) + categoria por vínculo
- 1 issue Redmine por chamado; defaults (tracker/priority/activity) e mapa de status
- Tempo das TicketTasks -> time entries (gate em "Feito"), idempotente
- Autores via impersonation (X-Redmine-Switch-User) + auto-membership por role
- Mapeamento de usuários GLPI->Redmine (auto-match por e-mail + overrides)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>