fix(bulkReceive): honour admin email toggle and ISetting notification defaults#2562
Open
miaulalala wants to merge 1 commit into
Open
fix(bulkReceive): honour admin email toggle and ISetting notification defaults#2562miaulalala wants to merge 1 commit into
miaulalala wants to merge 1 commit into
Conversation
4b21461 to
eb8f9a4
Compare
Activity
|
||||||||||||||||||||||||||||||||||
| Project |
Activity
|
| Branch Review |
fix/bulk-receive-email-notification-bypass
|
| Run status |
|
| Run duration | 02m 28s |
| Commit |
|
| Committer | Anna |
| View all properties for this run ↗︎ | |
| Test results | |
|---|---|
|
|
1
|
|
|
0
|
|
|
1
|
|
|
0
|
|
|
8
|
| View all changes introduced in this branch ↗︎ | |
Tests for review

cypress/e2e/settings.cy.ts • 1 failed test • Run E2E
| Test | Artifacts | |
|---|---|---|
| Check that user's settings survive a reload > Form survive a reload |
Test Replay
Screenshots
|
|
Collaborator
Author
|
/backport to stable33 |
3 tasks
come-nc
requested changes
May 12, 2026
eb8f9a4 to
4b22d47
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
… defaults The admin Enable notification emails toggle was not checked in bulkReceive(), so emails could be queued even when the toggle was disabled. Also, ISetting-based settings that do not implement ActivitySettings had canChangeNotification() called on them, which caused a fatal error; the default push-enabled state was also ignored. Injects IAppConfig and uses getValueString() to check the toggle, consistent with the approach used elsewhere. ISetting instances that are not ActivitySettings now fall back to the setting default via isDefaultEnabledNotification() without calling canChangeNotification(). AI-Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Anna Larch <anna@nextcloud.com>
4b22d47 to
b770f9d
Compare
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.
Summary
Email bug (main issue, stable33+master):
bulkReceive()was querying per-user email settings viaIUserConfig::getValuesByUsers()— a raw DB query with no knowledge of the adminenable_emailtoggle. This caused activity emails to be sent to all users even when an admin had globally disabled them. Added the sameenable_emailguard that already exists inUserSettings::getUserSetting()andfilterUsersBySetting().Notification bug: When
canChangeNotification()isfalse,$userPushSettingswas leftnull, making$notificationSettingresolve tonull. The guardnull !== falseis always true, so push notifications fired unconditionally. Fixed by deriving$defaultPushEnabledfromISetting::isDefaultEnabledNotification()and using it as the authoritative value when the user cannot change the setting.Test plan
composer test:unitpasses (326 tests, 1580 assertions)testBulkReceiveNoMailWhenAdminEmailDisabledverifies thatgetValuesByUsersis never called and no mail is queued whenenable_email=no🤖 Generated with Claude Code