• v0.3.5 88f3d3e0e7

    UltimateByte released this 2026-05-28 03:06:04 +02:00 | 52 commits to main since this release

    What's new

    👥 Subscribers — WP users now live in the same table

    Email-only subscribers and WordPress users now share one unified table. A new WP users filter dropdown lets you scope to: Include (default — both kinds), Only (WP users alone), or Exclude (legacy subscribers-only behaviour). Rows are deduped by email — when a WP user and a subscriber share the same address, the WP user wins (matching what would actually happen at send-time).

    New columns in the column picker: Type (Subscriber / WP user pill), Opted-in (✓ — and editable inline-checkbox on WP user rows that saves instantly), Opted-out (✓). A small admin-users glyph next to the email flags WP user rows at a glance even when the Type column is hidden.

    The detail modal now opens for both kinds (in-page, no redirect to the WordPress user editor for a quick view), and Prev / Next now walks all visible rows regardless of type — the modal seamlessly transitions from a subscriber to a WP user mid-navigation, with the open row highlighted in the background table.

    📋 Bulk actions extended

    • Opt-in / Opt-out — applies to both subscribers and WP users in one go.
    • Add to list… — pick an eligible list from an inline picker, attach the selection to it.
    • Trash / Restore / Delete stay subscribers-only (WP users in a mixed selection are silently skipped).

    Layout swap: the bulk-action dropdown is now on the left of the toolbar (matching the Contact Form Submissions layout), with the row-count summary + per-page picker + columns icon clustered on the right.

    🔀 Sortable columns plugin-wide

    Every table column with a sort indicator (Subscribers, Email Logs, Contact Form Submissions) is now clickable: first click sorts ascending, second flips to descending, third clears. The ▲ / ▼ glyph appears on the active column. Your sort choice persists in a long-lived cookie per table.

    Each list table grows a small Per page dropdown next to the row-count summary (replaces the old admin-level setting in the Logs Storage modal). The choice is stored in a session cookie and falls back to the default when the cookie is gone — no more being silently locked into a stale preference you forgot you set.

    🐛 Bug fixes

    • Subscriber detail modal & Add subscribers modal: were offering checkboxes for every list in the database — including system lists and WP-user-targeting lists where the toggle had no real effect. Now filtered to manual-membership subscribers-kind lists only, with server-side defence against POST tampering.
    • Dashboard had two horizontal divider lines stacked under the page header (page-header bottom border + section-title top border). The section-title's top border is now suppressed when it follows the page header directly.
    • CF Submissions sort-by-Date emptied the table (column is submitted_at, not created_at — silent SQL failure).
    • Email Logs can now be sorted by the To column too (recipient list — lexical sort on the first recipient).
    • Confirm prompt modal was anchoring top-left of the viewport instead of being centered — a CSS rule was overriding the modal's flexbox centering.
    • Sortable column hover had a slight flicker on first pass — caused by a CSS transition firing before the browser had cached the pseudo-state. Hover swap is now instant.

    🎨 Design tokens

    A new text-size family — --etk-text-{xxs, xs, sm, md, lg} (10 / 11 / 12 / 13 / 14px) — joins the existing spacing / radius / shadow / palette tokens in admin-base.css. This is groundwork for the theme system + density setting coming in v0.4.x and v0.5.x.

    What's next — v0.4.x

    Three meaty pillars:

    • Captcha enrichment — Cloudflare Turnstile + Google reCAPTCHA providers, invisible mode support, theme / size customization per identity.
    • CSS cleanup — finish migrating every hardcoded chrome value to design tokens, plugin-wide. Prerequisite for the upcoming Theme system (Light / Dark / Auto / LRob / Contrast) + Density setting (Compact / Comfortable / Spacious) in v0.5.x.
    • LRob branding — discrete "made with ❤️ by LRob.fr" placements, branded plugin polish.

    Full roadmap (v0.4.x → v1.0.0) is locked in todo.md.

    Upgrading

    Drop-in. No schema migration. Settings preserved. If you had configured Entries per page in the Email Logs Storage modal: that setting is gone (no longer admin-level), and the new inline per-page picker on the list view defaults to 20 — pick your preference once and it'll stick (per browser).

    Downloads