Add bulk "Send login invites" mode to the reminders flow - #2168
Merged
Conversation
Staff need a way to bulk-invite registrants who have no portal account yet. The reminders picker already handles recipient selection, filtering, and a confirm interstitial, so this reuses it via a mode=invite branch instead of a parallel page. In invite mode the recipient list is restricted to registrants with no user, the email is the fixed portal welcome/confirmation email (admins preview it but can't edit a subject/message), and sending creates an account for anyone without one before delivering the invite. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Invite mode was only reachable from the Bulk actions menu; add a reciprocal toggle link so admins can switch between sending a bulk email and sending login invites without leaving the page. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The lock icon in the invite-email notice inherited the base font size, dwarfing the small notice text; scope the sizing to the box. Turn the bulk-email/invite mode toggle into an outline button with a jump-link icon so it reads as a navigation action rather than inline text. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nner Relabel the feature from "login invites" to "portal invite (confirmation) emails" everywhere it's surfaced. Replace the long mode-toggle button with an explanatory banner row above the recipients that says what the page does and offers the other mode as a plain inline link. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Page title/menu become "Send Portal invite emails" (drop the parenthetical); capitalize "Portal" as the product name in the banner, notice, and description. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
maebeale
force-pushed
the
maebeale/honiara
branch
from
August 12, 2026 01:19
76badec to
bdbcd42
Compare
maebeale
marked this pull request as ready for review
August 12, 2026 01:48
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
FontAwesome webfont icons rendered high with items-center/items-start; baseline alignment lines the glyph up with the text. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
"No account" people have never been sent an invite, and "Invited" means the welcome email already went out — relabel to "Not invited yet" / "Already invited" so the User account filter reads as an invite lifecycle. Same values and scope; CSV export label kept in sync. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…te bucket "No account" (no user at all) is distinct from an account that was never sent an invite (no_access): keep both. User account filter is now No account / Not invited yet / Already invited / Has access; CSV export kept in sync. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Relabel "Already invited" back to "Invited" and restore the "No access" option, and add a "Not invited yet" umbrella that matches everyone who still needs an invite (no account at all, or an account never sent a welcome invite = none ∪ no_access) via a new account_status scope value. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
maebeale
added a commit
that referenced
this pull request
Aug 12, 2026
Counts active registrants with no portal account yet and links to the reminders flow's bulk invite mode (mode=invite), which #2168 added. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 suggested review level: 3 Read 📖 contained logic reusing the reminders flow via a mode branch; new one-person invite service
What is the goal of this PR and why is this important?
BulkInviteService.How did you approach the change?
mode=inviteparam throughpreview_reminder→confirm_reminder→send_reminderrather than building a parallel page, so recipient filtering, the checkbox picker, and the confirm interstitial are all reused.PersonInviterservice encapsulates "create a user if needed + send the welcome email" (mirrors the steps inProcessConfirmation); skips people who already have a confirmed account.DeviseMailer#confirmation_instructionsgained apreview:flag so rendering the on-page preview doesn't log a notification or emit an auth event.Anything else to add?
page_bg_classmappings are unchanged.spec/services/person_inviter_spec.rb,spec/requests/events/bulk_invites_spec.rb.