Skip to content

Releases: ernestdefoe/digest-mail

2.2.0 — full translatability + resofire migration guide

Choose a tag to compare

@ernestdefoe ernestdefoe released this 06 Jul 14:46

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.yml ships 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 UnsubscribeToken mass 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:clear

2.1.3 — settings selector fix + audit hardening

Choose a tag to compare

@ernestdefoe ernestdefoe released this 02 Jul 01:15

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)

  • DigestSendLog uses an explicit $fillable whitelist instead of $guarded = [].
  • Awards digest fetch bounded to the newest 50 non-draft awards.
  • All 36 third-party-table query call sites annotated; the ConnectionInterface exception is scoped and documented (own digest_* 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

Choose a tag to compare

@ernestdefoe ernestdefoe released this 09 Jun 19:01

Floxum audit hardening release.

Security

  • The digestExtensions map (which reveals installed integrations) is now admin-only — it is no longer serialized to guests or regular members. digestAllowedFrequencies stays 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 ConnectionInterface usage with Eloquent models where it fits (unsubscribe tokens + a new DigestSendLog model). Integration queries against third-party extension tables intentionally remain raw SQL.
  • Removed copy-pasted unused imports across the query traits.
  • forum/index.ts rewritten 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

Choose a tag to compare

@ernestdefoe ernestdefoe released this 09 Jun 02:12

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 with npm 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 DigestQuery god 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

Choose a tag to compare

@ernestdefoe ernestdefoe released this 06 Jun 20:46

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

Choose a tag to compare

@ernestdefoe ernestdefoe released this 06 Jun 16:20

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

Choose a tag to compare

@ernestdefoe ernestdefoe released this 06 Jun 16:09

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.