Releases: ernestdefoe/digest-mail
Release list
2.2.0 — full translatability + resofire migration guide
Full translatability (i18n)
Every user-facing and admin string now goes through the translator — the extension is 100% translatable. Drop in a locale file for any language and the digest emails, unsubscribe pages, user settings, and the entire admin panel render in that language.
- Digest email: period words ("this day/week/month"), reply/post/vote/etc. counts, discussion meta ("Last reply by…", "Started by…"), the header badge, the "Visit" button, and the footer are now translated.
- Relative times ("1 hour ago") now localize with the recipient's language — Carbon's locale is set per recipient alongside the translator, so dates no longer stay English in a translated digest.
- Admin panel: settings, statistics, digest order, and the full server / queue / cron documentation are fully externalized.
locale/en.ymlships every key; other locales (fr.yml, etc.) can be filled in by translators.
Also included since 2.1.3
- Fix digests failing to send — unguard
UnsubscribeTokenmass assignment (was 2.1.5). - Audit fixes — honor disabled-frequency toggles; trim the leaderboard NEW-badge query (was 2.1.4).
Migrating from resofire/digest-mail
This is a drop-in-compatible fork — same database schema, idempotent migrations, and no subscriber data lost when you switch. See the "Migrating from resofire/digest-mail" section in the README for the full steps.
Install / update
composer require ernestdefoe/digest-mail:^2.2
php flarum migrate
php flarum assets:publish
php flarum cache:clear2.1.3 — settings selector fix + audit hardening
Fixed
- The digest-frequency selector now reliably appears in Settings → Notifications. On some Flarum 2 builds the settings chunk is double-bundled, so extending only the module registry never reached the mounted page. The extension now hooks both the registry (string-form extend) and the settings route's lazy resolver, with dedupe — validated end-to-end in a browser (render, save, persist across reload).
- PHP 8.x deprecation: optional-before-required constructor parameter in
DigestContent.
Hardened (Floxum audit)
DigestSendLoguses an explicit$fillablewhitelist instead of$guarded = [].- Awards digest fetch bounded to the newest 50 non-draft awards.
- All 36 third-party-table query call sites annotated; the
ConnectionInterfaceexception is scoped and documented (owndigest_*tables remain Eloquent-only). - Long methods split for testability:
processFrequency(stamp/log/prune/window helpers),getPicks(events + leaderboard builders),getLeaderboard(CASE builder + rank reconstruction),getResofireGamepedia(getTopGenres). resolve()usage in the ApiResource fields callback documented as an intentional lazy exception.
2.1.2 — security & audit hardening
Floxum audit hardening release.
Security
- The
digestExtensionsmap (which reveals installed integrations) is now admin-only — it is no longer serialized to guests or regular members.digestAllowedFrequenciesstays public (the forum JS needs it). - The admin stats API no longer returns the raw server filesystem path as a bare value. Cron / Supervisor lines are now assembled server-side and the panel renders those ready-to-paste strings directly.
Robustness
- The giveaways digest section no longer silently swallows query failures — it logs the exception before degrading gracefully, so a broken third-party table is visible in your logs.
Code quality
- Replaced direct
ConnectionInterfaceusage with Eloquent models where it fits (unsubscribe tokens + a newDigestSendLogmodel). Integration queries against third-party extension tables intentionally remain raw SQL. - Removed copy-pasted unused imports across the query traits.
forum/index.tsrewritten as idiomatic, typed Flarum 2 TypeScript; admin entry modernized.
No database or configuration changes are required. Upgrade with composer update ernestdefoe/digest-mail and clear caches.
2.1.1
What's Changed
Frontend
- Added buildable TypeScript sources (
js/src) and the standard Flarum build skeleton (package.json,tsconfig.json,webpack.config.js, entry points). The extension previously shipped dist-only, so the Mithril frontend could only be maintained by hand-editing the bundles — it now rebuilds withnpm run build. Sources are a faithful reconstruction; behaviour verified identical in-browser (all admin tabs + the forum opt-in modal, zero console errors).
Backend
- Fixed 8 Floxum code-audit findings (DB portability, N+1 queries, row caps, dead code)
- Split the
DigestQuerygod class into per-integration query traits - Use
User::query()for native users-table queries (audit follow-up)
Full Changelog: 2.1.0...2.1.1
2.1.0
What's Changed
- 🎁 New: Giveaways section — when ernestdefoe/giveaways is installed, the digest now features ending-soon giveaways (prize, time left, entrant count) and recently-drawn winners. Opt-in via the section toggle; gracefully hidden when the extension isn't installed or there's nothing to show.
Full Changelog: 2.0.1...2.1.0
2.0.1
Added
- CFB Picks digest section now works with
ernestdefoe/picks. When the extension is installed, digests include upcoming games members can still pick, recent results, and the picks leaderboard (week / season / all-time scope), with confidence-mode support. Enable it under the digest's integration toggles.
2.0.0
First release under ernestdefoe.
A Flarum 2 extension that emails members a scheduled digest summarising new, active, and unread discussions, new members, and community stats — with optional Leaderboard, Badges, Pick'em, Gamepedia, and Awards sections. Per-user frequency (daily/weekly/monthly), send windows for large forums, light/dark email themes, and one-click unsubscribe.
Rebranded fork of resofire/digest-mail, with full credit to the original author.