=== GemMail Integration for Elementor Forms ===
Contributors: adnaneser
Tags: elementor, forms, email marketing, gemmail, integration
Requires at least: 6.2
Tested up to: 6.6
Requires PHP: 7.4
Stable tag: 1.0.12
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Envia formulários do Elementor Pro para uma ou mais listas do GemMail com mapeamento independente por lista.

== Description ==

* Sincroniza listas e campos pela API.
* Permite selecionar uma ou várias listas em cada formulário.
* Cria um mapeamento diferente para cada lista.
* Cria o assinante ou atualiza o registro existente pelo e-mail.
* Mantém a chave da API somente no servidor.

Serviço externo: o plugin envia os dados mapeados pelo administrador à API GemMail configurada pelo próprio usuário. Consulte os termos e a política de privacidade da sua instalação GemMail.

== Installation ==

1. Instale e ative o plugin.
2. Acesse Configurações > GemMail + Elementor.
3. Informe a chave da API. O endpoint oficial já vem definido no plugin.
4. Sincronize as listas.
5. No formulário, adicione GemMail em Ações após envio e configure listas e mapeamentos.

== Changelog ==

= 1.0.12 =
* Corrige o cache do manifesto sobreviver a uma instalação manual do plugin. Instalar por upload dispara um evento diferente do de atualização, e o cache antigo continuava valendo — a tela de detalhes chegava a mostrar uma versão anterior à instalada. A invalidação agora acompanha a versão instalada, e não o evento do WordPress.

= 1.0.11 =
* Corrige a atualização não aparecer: o plugin só se anunciava quando o WordPress gravava a lista de atualizações, o que acontece a cada 12 horas. Agora também responde à leitura dessa lista, então a versão nova aparece assim que a tela de Plugins é aberta.
* Reduz para uma hora o intervalo entre consultas ao servidor de atualizações.

= 1.0.10 =
* Corrige o "Verificar novamente" da tela de Atualizações, que só surtia efeito no clique seguinte. O WordPress registra a própria checagem antes dos plugins carregarem, então limpar o cache num hook chegava tarde; agora quem ignora o cache é a leitura dele.

= 1.0.9 =
* Grava o IP de quem preencheu o formulário, e não mais o IP do servidor do WordPress. Detecta o visitante por CF-Connecting-IP e X-Forwarded-For, com o filtro gemmail_elementor_visitor_ip para quem usa outro CDN ou proxy.

= 1.0.8 =
* Sincroniza o catálogo de listas sozinho: uma vez por dia e logo após cada atualização do plugin. Deixa de ser preciso lembrar de clicar em sincronizar.
* Avisa quando um mapeamento aponta para um ID de campo que não existe no formulário. Antes o campo era descartado em silêncio e o envio falhava sem explicação.
* O diagnóstico detalhado do envio só aparece para quem é administrador. Quem preenche o formulário nunca vê mensagem técnica.
* Falha ao consultar o servidor de atualizações passa a ter cache de 20 minutos em vez de 6 horas, para uma indisponibilidade momentânea não esconder a atualização.
* Ajusta os avisos da tela de configurações, que quebravam o layout da página.

= 1.0.7 =
* Deixa de derrubar o site quando há mais de uma cópia do plugin instalada. A segunda cópia carregada agora se desliga e avisa no painel, em vez de declarar as mesmas classes de novo e causar erro fatal.

= 1.0.6 =
* Move a origem das atualizações para updates.gemmail.com.br, servida por infraestrutura própria. A pasta anterior ficava atrás do StackProtect da hospedagem, que responde um desafio de navegador e por isso barraria a consulta feita servidor a servidor.

= 1.0.5 =
* Passa a avisar de novas versões pelo próprio painel do WordPress, com atualização em um clique, a partir de um manifesto publicado em gemmail.com.br.
* A origem das atualizações pode ser trocada pela constante GEMMAIL_ELEMENTOR_UPDATE_URL no wp-config.php.

= 1.0.4 =
* Corrige o envio do assinante: os campos iam aninhados sob data[...] e a API, que os lê no primeiro nível do corpo, respondia 422 sem gravar nada.
* Corrige a busca por e-mail, que enviava o parâmetro em minúsculas e por isso nunca encontrava o assinante — todo envio virava criação, nunca atualização.
* Passa a ler o campo required como a string "yes"/"no" devolvida pela API, em vez de marcar todos os campos como obrigatórios.
* Distingue "assinante não existe" (404) de falha real na busca, para que um erro de chave não vire cadastro às cegas.
* Trata "assinante já existe" (409) como sucesso do formulário.
* Registra sempre as falhas no log, sem depender de WP_DEBUG, e mostra o último erro na tela de configurações.
* Avisa quando o mapeamento não cobre um campo obrigatório da lista, antes de chamar a API.

= 1.0.3 =
* Passa a usar diretamente a API 2.0 em https://gemmailmanager.com/api/.
* Usa autenticação por uma única chave no cabeçalho X-Api-Key.
* Adiciona instruções do mapeamento por formulário na tela de configurações.

= 1.0.2 =
* Corrige a autenticação do wrapper usando os cabeçalhos Public-Key e Private-Key.
* Exibe corretamente mensagens devolvidas no campo result da API.

= 1.0.1 =
* Define https://api.gemmail.com.br/ como endpoint fixo e remove a configuração manual de URL.
* Aplica a identidade visual oficial do GemMail à tela de configuração.

= 1.0.0 =
* Primeira versão pública.
