# CWP Billing changelog

New versions install with one click under **Update** in the admin area. The newest package is always at
http://static.cdn-cwp.com/files/billing/cwp-billing-latest.zip (version and SHA-256 in `latest.json` next to it).

## 1.0.20 (2026-11-12)

- Your own server modules and domain registrars: add them as an extension (plain PHP in `extensions/`, never
  touched by updates). They appear next to the built-in ones in the server, product and domain screens. Guide with a
  complete example: docs/MODULES.md, or "Writing your own server module" on the docs site.

## 1.0.19 (2026-11-12)

- Server modules: Suspend, Unsuspend and Change package also run from cron when the panel is on the billing's own
  server (CWP restarts PHP-FPM for these too, which showed "503 Service Unavailable"). The button answers "Queued"
  and the module log shows the result within a few minutes. The server option is now called **Run account actions
  from cron**.

## 1.0.18 (2026-11-12)

- Configurable options can be edited in the admin area: **Catalogue → Configurable options**. Groups linked to
  products, options (drop-down, radio, yes/no, quantity) and choices with a price and setup fee per currency and
  billing cycle. Options and choices that services use are hidden instead of deleted.
- Options can carry a code and choices a value for the server module, like `value|Name` in WHMCS (the WHMCS import
  keeps them now). Virtualizor: an option with the code `os` lets the client choose the operating system when
  ordering; the option page can add all OS templates of a Virtualizor server as choices.
- Domain pricing → **Import prices**: loads your cost per TLD from eNom, adds your margin (percent and/or fixed),
  rounds (cent, .99, whole) and shows a preview before anything is saved.
- Server modules: when the panel runs on the billing's own server (CWP restarts PHP-FPM while it creates an
  account), creating and removing accounts runs from cron, so the web request is no longer cut off. Can also be
  switched on per server.
- Subscription payments for a terminated or cancelled service no longer create and pay a renewal invoice: the
  amount goes to the client's credit and staff get a ticket to cancel the subscription and refund.
- Tickets: an attachment that is too large is reported before sending and the message text is kept. Clients can
  search their tickets by number, subject or text.
- PHP 8.5 compatibility.

## 1.0.17 (2026-11-11)

- PHP 8.4: every page answered error 500 after the installation ("session.sid_length INI setting is deprecated").
  A setting PHP marks as deprecated is now written to the log instead of stopping the page.
- Server modules: creating or removing an account finishes and is recorded even when the web server gives up
  first (a "503 Service Unavailable" page while a slow panel creates the account).
- Mass mail to contacts that are not clients: import a list of addresses (`php bin/console massmail:import file.csv
  --list=name`) and send to clients, contacts or both. Contacts get their own one-click unsubscribe link, and
  addresses that unsubscribe or bounce are skipped.
- Security alerts: the same logins no longer raise a second alert ticket after midnight.

## 1.0.16 (2026-11-10)

- Installer: an installation that stopped halfway continues where it stopped when the form is sent again (the
  database no longer needs to be emptied). The web installer creates the tables in short steps, so a short PHP-FPM
  request timeout cannot cut it off.
- Passwords are hashed with argon2id only when the installer's test shows it works in your PHP, otherwise with
  bcrypt. Some PHP builds crash with "Illegal instruction" in argon2id on older CPUs. Existing installations can
  set `'password_algo' => 'bcrypt'` in config/config.php.
- Refunds: what a payment paid beyond its invoice (credited as overpayment) is taken back from the credit first,
  and the credit note covers only the invoice part. Before, refunding an overpaid invoice left the overpayment
  in the client's credit.

## 1.0.15 (2026-11-10)

- **Mercado Pago** gateway (Checkout Pro): cards, boleto, Pix and Mercado Pago balance, confirmed automatically,
  fee recorded, refunds from the invoice.
- **Pix** gateway (static, any bank): Pix QR code and Pix Copia e Cola with the exact amount and the invoice number,
  confirmed by staff with Add payment; the client can send the receipt in a ticket.
- Installer: a folder PHP cannot read is shown in the checks (with the chown to fix it) instead of a blank error
  500; storage/ is no longer scanned.
- Log in: a double click no longer ends on "page expired" (419). Forms are sent once, and a second login request
  after a successful one just opens the client area.
- Staff API: `POST /clients/{id}/due-dates` gives several services one renewal date with a single prorated invoice.

## 1.0.14 (2026-11-10)

- cPanel: accounts are created on the shared IP. Before, the server's IP went into WHM's "ip" field (which means
  "give a dedicated IP"), so account creation failed on servers without free dedicated IPs. A dedicated IP set on the
  service is sent as customip. WHM calls are sent as POST, so passwords no longer show in the WHM access log.
- Webuzo: suspend and unsuspend really suspend (Webuzo reported success and did nothing); the billing now reads the
  user back to confirm. Tested end to end with Webuzo 4.9.1, cPanel/WHM 138 and CWP 1.30.5.

## 1.0.13 (2026-11-10)

- **Webuzo** server module: create, suspend, unsuspend, terminate, change plan and password, one-click login to the
  Webuzo panel. API key: `root:PASSWORD`, or a Webuzo API key entered as `apikey:USER:KEY` (port 2005).
- **eNom** registrar: availability check, register, transfer, renew, nameservers, registrar lock, expiry sync.
  eNom e-mails the EPP code to the registrant.
- WHMCS and ClientExec imports recognise Webuzo servers and eNom domains.
- Mass mail: an address that fails the check or that the mail server refuses is marked as bouncing and skipped by
  later mass mails. When more than 5% of one mass mail fail, nobody is marked (that points to your own mail server).
- License agreement: 30-day money-back guarantee on the first payment.

## 1.0.12 (2026-11-09)

- Support ticket report like WHMCS: staff in rows (tickets and replies), days as columns, weekends shaded, totals.

## 1.0.11 (2026-11-09)

- **ClientExec import** (`php bin/console import:clientexec`) with clean-up options for old unpaid invoices,
  packages that were never billed, and currency conversion.
- Universal login: clients keep their WHMCS and ClientExec passwords, and the login form keeps the old field names.
- Staff API: client search by e-mail or IP (`GET /api/v1/clients`).
- Staff API keys: Telegram alert when an automation key goes quiet.

## 1.0.10 (2026-11-09)

- Quotes, client groups with discounts, card payment retries (dunning), downloads section, GDPR data requests.
- SMS notices (Twilio, Vonage, any HTTPS gateway), sign in with Google.
- Gateways: Mollie, Authorize.net, BTCPay Server. Server modules: Plesk, Virtualizor, SolusVM.

## 1.0.9 (2026-11-08)

- AI assistant for the support desk (ChatGPT, Claude, DeepSeek, Gemini or any OpenAI-compatible API): drafts,
  summaries, translations, sorting, and automatic replies only within the rules you set; daily limits and budget.
- Staff API limits editable in Billing settings.

## 1.0.8 (2026-11-08)

- Admin client page in tabs like WHMCS, sticky client notes, users and permissions, log in as client.
- Ticket page in tabs, formatting toolbar with preview, several attachments and pasted screenshots, signatures,
  tickets opened by staff.
- Clients change license quantities, order tickets per product, invoice notes per client group.
- Staff billing API with dry runs; mail piping fixes; extensions with their own console commands and texts.

## 1.0.7 (2026-11-04)

- One-click updates, orders and cancellations report with a daily e-mail, bounce marking, no-reply senders,
  forgot password through a contact address, multilingual e-mail piping.

## 1.0.6 (2026-11-03)

- Installer trusts the server's own IPs as proxies.

## 1.0.5 (2026-11-03)

- Optional staff 2FA, newest-first tickets, one-click unsubscribe and own sender address for mass mails.

## 1.0.4 (2026-11-03)

- CWP sync API for the CWP Billing module on CWP servers, console setup commands (server:add, product:add-cwp).

## 1.0.2 and 1.0.3 (2026-11-03)

- 15-day free trial without a key; client area and e-mails in German, Spanish, French, Italian, Portuguese
  (Brazil), Russian and Turkish.

## 1.0.1 (2026-11-02)

- First public release.
