Commit graph

16 commits

Author SHA1 Message Date
Claude
f15af72244 Build VIP: variante sem validação de licença Mindplace
Remove as duas camadas do kill switch (KB-PLUGIN-013) para distribuição
direta a contas estratégicas, fora do catálogo Mindplace:

- plugin_butterfly_load_license() removida;
- plugin_init_butterfly() inicializa sempre, sem checar licença;
- plugin_butterfly_check_config() retorna true incondicionalmente.

Versão marcada como 2.3.1-vip para o suporte identificar o build.
Único arquivo divergente do main é o setup.php — correções de produto
devem ser feitas no main e trazidas com `git merge main`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 13:19:51 -03:00
Claude
b409b65895 v2.3.1: corrige campo de CSS personalizado travado (Monaco criado oculto)
O editor era criado dentro de uma div com d-none: com display:none o
Monaco mede 0x0 e nasce sem área editável, enquanto o textarea ficava
oculto e disabled — resultado, campo impossível de editar.

- container passa a ser exibido ANTES do create (dimensões reais),
  mais layout() explícito e automaticLayout para relayout no resize;
- _force_default_lang evita o caminho de clonagem de linguagem do core
  (que quebra se a linguagem base não estiver registrada);
- textarea deixa de ser disabled: fica só oculto, com o valor do editor
  copiado nos eventos submit E formdata (form.submit() programático não
  dispara submit; formdata cobre os dois casos) — sem risco de perder a
  edição silenciosamente no POST;
- se o create falhar, rollback para o textarea comum.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 13:11:16 -03:00
Claude
e42eb2c798 v2.3.0: temas modernos com layouts distintos e variáveis por tema
Release: 4 temas novos (aurora-glass, nordic-minimal split-screen,
sunset-mesh borderless, carbon-neon terminal), variáveis de cor próprias
por tema, remoção dos 10 temas legados (~6MB → 128KB), fix do
ValueConverter (cores hex injetadas como cor, não string) e fix do
seletor de body do login (welcome-anonymous).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:59:45 -03:00
Claude
fade913fa9 Fix Scss: injetar cores hex como cor SCSS, não string com aspas
ValueConverter::fromPhp('#0b0e1a') gera SassString com aspas, e
'background-color:"#0b0e1a"' é CSS inválido (browser ignora — fundo
cinza). Bug latente desde os temas legados (afetava qualquer uso direto
de $var injetada, ex. cor do botão); ficou visível quando os fundos
passaram a usar $page-background-color. Hex agora entra via parseValue()
como cor de verdade — também habilita funções de cor sobre as variáveis.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:58:09 -03:00
Claude
d36e14c767 Temas: variáveis de cor por tema + remoção dos 10 temas legados
Cada tema agora expõe variáveis próprias no theme.json (color pickers
na config, injetadas no compile SCSS com !default):

- aurora-glass: page-background + aurora-color-1/2/3 (gradientes e blobs)
- nordic-minimal: page-background, panel-background e decor-color
  (grid, anéis e sombra do painel)
- sunset-mesh: page-background, accent-color (links/foco) e
  mesh-color-1..4 (os 4 lóbulos do mesh)
- carbon-neon: page-background, glow-color (bordas/glow/prompt/cursor)
  e terminal-background-color

Tons translúcidos derivados de variável usam color-mix() do CSS (scssphp
não avalia rgba($var) de cor injetada; color-mix passa direto e o browser
resolve). Validado: injeção de variável altera o CSS compilado e os 4
temas servem color-mix na página de login.

Temas legados removidos (aurora-boreal, baloons, cloud, desktop, light,
neon, night, original, power-red, prompt-developer) — catálogo agora são
só os 4 modernos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:54:58 -03:00
Claude
b276342d9f Temas com layouts estruturalmente distintos (não só cores)
- nordic-minimal: split-screen padrão Stripe/Notion — painel branco
  full-height ancorado à direita, anéis decorativos no lado livre,
  form alinhado à esquerda dentro do painel.
- carbon-neon: janela de terminal ancorada à esquerda — title bar com
  os 3 botões (no .card-header vazio do card), título user@glpi:~/login,
  labels com prompt '>', cursor '_' piscando no h2, botão '$ ENTRAR'
  outline que preenche no hover.
- sunset-mesh: borderless padrão Linear/Vercel — sem card, coluna
  estreita direto no mesh, inputs underline, botão pill.
- aurora-glass: glass compacto centrado (26rem) abraçando o form,
  inputs pill e dois blobs de aurora animados (keyframes) atrás.

Todos estilizam select2 do dropdown de origem de login e têm fallback
responsivo (painel/terminal centralizam em telas estreitas). Previews
regenerados refletindo o layout de cada tema.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:42:00 -03:00
Claude
fc6e04e659 Fix temas: background não aparecia (body do login é .welcome-anonymous)
O body da tela de login do GLPI 11 é <body class="welcome-anonymous">;
.page-anonymous fica no <main>. Os seletores body.page-anonymous nunca
casavam e o cinza padrão do Tabler ficava por cima. Agora o fundo é
aplicado em body.welcome-anonymous, body.login-page e main.page-anonymous
(background-attachment: fixed alinha as camadas no viewport).

Gotcha de dev: o cache do compileScss é chaveado pelo texto do @import,
não pelo conteúdo do arquivo — editar login.scss exige ?reload=1 na URL
do login para recompilar.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:31:32 -03:00
Claude
9c05c3e35d 4 temas modernos de login: aurora-glass, nordic-minimal, sunset-mesh, carbon-neon
Temas 100% CSS (sem fotos de fundo — gradientes, mesh e glassmorphism),
seguindo o contrato de variáveis existente (btn-background/foreground,
card-background) e estilizando o .card-body interno (o scss.class força
.main-content-card transparente quando não há cor de cartão definida).

- aurora-glass: glassmorphism escuro, aurora indigo/violeta/teal,
  backdrop-filter blur no cartão
- nordic-minimal: claro escandinavo, grid sutil, acento azul profundo
- sunset-mesh: mesh gradient quente (coral/âmbar/violeta), cartão
  translúcido estilo Stripe/Linear
- carbon-neon: dark tech, grid de carbono, glow ciano no cartão e botão

login.css fallback compilado com o próprio scssphp do core; previews
renderizados por script PHP GD (gradientes por pixel + mockup do cartão).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:25:38 -03:00
Claude
9ca8ea616b v2.2.0: ícone na aba de config e kill switch de licença Mindplace
- Aba em Configuração > Geral agora usa createTabEntry com ícone
  ti ti-butterfly (Tabler v3.34 do core).
- Kill switch de licença nas duas camadas do padrão KB-PLUGIN-013:
  check_config impede ativação sem licença Mindtek válida e
  plugin_init aborta silenciosamente (mesmo padrão do plugin redmine).
- Gotcha operacional: mudar PLUGIN_BUTTERFLY_VERSION desativa o plugin
  até rodar glpi:plugin:install de novo (checkPluginState).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:11:45 -03:00
Claude
020558f14f Novo recurso: controle da logo do login (custom/original/ocultar) + caixa de CSS grande
- Dropdown 'Logo' na seção Login Page: custom (imagem enviada ou logo do
  tema — comportamento legado, default), original (força logo GLPI) e
  hide (oculta via CSS injetado no display_login).
- Campos de CSS custom agora são textarea de 14 linhas sempre visível
  (monospace, 100%); o Monaco só assume se window.GLPI.Monaco existir
  (melhoria progressiva — antes o fallback dependia de JS e o campo
  podia ficar escondido/curto).
- Traduções pt_BR novas + pt_BR.mo recompilado (msgfmt indisponível;
  compilado com script Python puro).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 18:25:28 -03:00
Claude
c6f6c405f6 Fix: registerClass sem barra invertida inicial (tab de config não aparecia)
isPluginItemType() valida o itemtype com regex que não aceita '\' inicial;
registerClass('\GlpiPlugin\Butterfly\Config') retornava false silenciosamente
e a tab Butterfly nunca era registrada em Configuração > Geral. Usar ::class
(que nunca tem barra inicial) resolve e casa com o glpi_tab do config_page.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 18:14:09 -03:00
Claude
39f3f3f2a2 Modernização GLPI 11: namespace GlpiPlugin\Butterfly, Monaco, assets em public/
- Classes migradas de inc/*.class.php (PluginButterfly*) para src/ com
  namespace GlpiPlugin\Butterfly (PSR-4 registrado pelo core; KB-033).
  Referências de core qualificadas (\Config, \Html, \Session, ...).
- Editor de CSS custom agora usa o Monaco do core (GLPI.Monaco.createEditor
  + sync via formdata, mesmo padrão de custom_ui do core) com fallback
  para textarea se a lib não carregar.
- pics/ movido para public/pics: no GLPI 11 só recursos em public/ são
  servidos estaticamente em /plugins/<key>/... (RequestRouterTrait).
  URLs do select2 de temas agora usam root_doc + encodeURIComponent.
- MIN_GLPI_VERSION 11.0.0; removido bloco morto de GLPI <9.5 e
  css/login.base.css órfão.
- config_page com glpi_tab urlencoded para a classe namespaced.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 18:04:13 -03:00
Claude
0248febe8b Higiene e segurança: sanitização de theme, permissões, BMP e temas duplicados
- $_GET['theme'] sanitizado no display_login com a mesma regex do
  picture.send.php; getThemeInfo() ganhou defesa em profundidade
  (rejeita qualquer valor que não seja nome simples de diretório).
- mkdir 0755 (era 0777) no storage de imagens.
- IMAGETYPE_BMP usava imagecreatefromwbmp (WBMP != BMP); agora
  imagecreatefrombmp.
- public/themes/ removido: era cópia divergente e corrompida (CSS
  mutilado por find/replace) da fonte real themes/ — o código só lê
  themes/ da raiz e serve via picture.send.php.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 17:55:00 -03:00
Claude
18879bff6d Conformidade KB: sem inc/includes.php, logo.png, limpeza e JSON_HEX_TAG
- front/*.php não incluem mais ../../../inc/includes.php: no GLPI 11 o
  LegacyFileLoadController boota o core antes do script, e o include
  quebra quando o plugin roda do marketplace dir (KB-PLUGIN-028/010).
- logo.png (512x512) criado a partir de plugin.png: o LogoController só
  reconhece o nome fixo logo.png (KB-INFRA-002).
- Removidos front/test_simple.php e front/login.css.php (deprecated),
  incluindo a firewall strategy correspondente no setup.php (KB-018).
- json_encode com JSON_HEX_TAG|JSON_HEX_AMP em todo dado dinâmico
  embutido em <script> (KB-PLUGIN-003).
- .gitignore padrão KB-018; .DS_Store removidos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:25:56 -03:00
Claude
072547ae8a GLPI 11: remove dependências de libs extintas (CodeMirror, jQuery UI) e hack FileVersion
- add_css/add_javascript agora usam strings simples: o core do GLPI 11
  interpola o valor uma única vez e acrescenta ?v=<versão> sozinho, o que
  neutralizava o truque de __toString duplo do PluginButterflyFileVersion
  (classe removida).
- CodeMirror foi removido do GLPI 11 (substituído por Monaco no core);
  o init quebrava com ReferenceError. Textarea simples por ora; Monaco
  entra na modernização.
- $('#tabs').tabs() removido: jQuery UI não existe mais no GLPI 11 e o
  HTML das tabs já estava comentado.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:09:38 -03:00
Claude
26127bf736 Baseline: plugin butterfly v2.1.0 como recebido (pré-fixes GLPI 11)
Estado original vindo do servidor de origem via tar.gz, antes da
rodada de conformidade com a knowledge-base e fixes de GLPI 11.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:34:10 -03:00