Maintenance release: data integrity, notifications and a security hardening of the MCP server. Recommended for everyone.
Security
- MCP server accepts Application Passwords only. The API no longer accepts an account’s regular WordPress password over Basic auth, and no longer matches a bare password against every user. Connect with
username:application-password(or OAuth). Existing OAuth connections are unaffected.
New
- Project workspace. A project page now brings everything for that project together: its tasks (add, edit, complete, delete — with assignee, status and due date), notes, files (upload or pick from the media library), the estimates and invoices linked to it (create an estimate or invoice from the project, convert an estimate to an invoice), and a compose email action. Invoices and estimates record which project they belong to.
- Export and import. Settings → Export / Import: export leads, deals, contacts, clients, businesses, projects, tasks, tickets, estimates and invoices to CSV or PDF, with an optional date range. Import from CSV with column mapping, a downloadable template, a preview step, and duplicate handling (skip, update or create).
- Full-page package editor. Packages now have a dedicated create/edit page alongside the quick modal.
- Assigned agent on leads and deals. The assignee is shown on lead and deal lists, overviews and forms.
- Report PDFs render from the top of page 1 with safe page breaks (no more blank first pages or split table rows).
Fixed
- Invoice line items no longer disappear. Updating only part of an invoice — for example clicking “Mark as paid” — overwrote the stored invoice with just the changed fields, wiping items, taxes and discounts. Partial updates now merge into the saved invoice.
- Contact Form 7 leads are captured even when CF7’s own email fails. The integration listened for CF7’s “mail sent” event, so a mail delivery problem meant no lead. It now captures every completed submission, and CF7’s internal fields no longer appear in the lead’s notes.
- Recurring invoices generate again. The scheduled recurring-invoice job stopped with a fatal error on every run.
- No more
–in deal titles. Deals converted from leads are titled with a real dash, and a one-time repair decodes HTML entities in any existing lead, deal, contact, project, task, ticket or invoice titles. - Workflows no longer corrupt accents, quotes and line breaks. Saving a workflow stripped the backslashes out of its stored data, so an accented letter (é, ñ, ü) in an email turned into “u00e9”, line breaks in an email body were lost, and any quotation mark or backslash broke the workflow entirely — it saved, then came back with no actions. Text now round-trips exactly, including accents, quotes, curly quotes, em dashes, emoji and non-Latin scripts. The same fix covers multi-select custom-field values and custom-field text sent as JSON.
- Workflows saved with an older version: accented letters and typographic punctuation are repaired automatically on the first admin page load. A workflow that was broken by a quotation mark can’t be reconstructed, so if it was active it is switched off — open Workflows and rebuild it. Line breaks lost earlier can’t be recovered; re-check the email bodies of existing workflows.
- Client page shows invoices and totals. The client overview looked up invoices by the wrong link, so the Invoices & Estimates tab was always empty and Total Billed / Paid / Due read $0. It now lists the client’s invoices and estimates with their document numbers and computes totals from invoices only, honouring partial payments; the Clients list’s invoice count is fixed the same way.
- Ticket details show the right people. The requester name and email, the ticket description, and each reply’s author and avatar are displayed correctly; replies no longer all read “Staff Member”.
- “Deal won” fires once. Editing a deal that already sits in a won stage no longer re-logs “Deal won” and re-sends the won notification. The won check uses the stage’s type (or an exact “Won” name) and only on an actual stage change, which is now logged with the stage’s name.
- No duplicate bell notifications. An assignment or creation that was reported through more than one internal path produced two or three identical notifications; now exactly one per person, event and record.
- Notification emails no longer go missing. Two over-eager safeguards were removed: a 60-second window that dropped a second legitimate email to the same person (for example two client replies on a ticket within a minute), and a rule that skipped the system email whenever a workflow could email the same person even if that workflow’s conditions did not match.
- Estimate and invoice notifications work, with the right link. The created, accepted and paid emails for estimates and invoices were wired to a post type that does not exist and linked to a preview URL that does not exist; they now fire and link to the real document page.
- Brevo (Sendinblue) email log shows one row per email instead of a permanent “pending” row plus a result row.
- Plugin header now declares
Requires PHP: 7.4andRequires at least: 6.0, and the OAuth server no longer uses a PHP 8-only function.