`). * * - POST /subscribers {email, fields: {name, last_name, …}, groups: [group id]} (create or update) * - lists (groups): GET /groups?limit=100 → data[{id, name}] */ final class MailerLite extends EmailProvider { public const BASE = 'https://connect.mailerlite.com/api'; public function id(): string { return 'mailerlite'; } public function label(): string { return 'MailerLite'; } public function configured(): bool { return Credentials::has('mailerlite_api_key'); } public function needs_list(): bool { return false; // a subscriber without a group is valid. } /** @return array */ private function headers(): array { return ['Authorization' => 'Bearer ' . Credentials::get('mailerlite_api_key')]; } public function lists() { if (!$this->configured()) { return new WP_Error('zadex_integration_not_configured', 'MailerLite API token missing.'); } $r = Http::request('GET', self::BASE . '/groups?limit=100', ['headers' => $this->headers() + ['Accept' => 'application/json']]); return $r instanceof WP_Error ? $r : self::options($r['json']['data'] ?? [], 'id', 'name'); } public function subscribe(array $contact) { $fields = $contact['fields']; if ($contact['first_name'] !== '' && !isset($fields['name'])) { $fields['name'] = $contact['first_name']; } if ($contact['last_name'] !== '' && !isset($fields['last_name'])) { $fields['last_name'] = $contact['last_name']; } $body = ['email' => $contact['email']]; if ($fields) { $body['fields'] = $fields; } if ($contact['list'] !== '') { $body['groups'] = [$contact['list']]; } $r = Http::json('POST', self::BASE . '/subscribers', $body, $this->headers()); return $r instanceof WP_Error ? $r : true; } }