fix(bulkReceive): honour admin email toggle and ISetting notification defaults#2562
Merged
Merged
Conversation
4b21461 to
eb8f9a4
Compare
Activity
|
||||||||||||||||||||||||||||||||||
| Project |
Activity
|
| Branch Review |
fix/bulk-receive-email-notification-bypass
|
| Run status |
|
| Run duration | 02m 20s |
| 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
previously 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! |
4b22d47 to
b770f9d
Compare
miaulalala
commented
May 18, 2026
Collaborator
Author
miaulalala
left a comment
There was a problem hiding this comment.
Addressed: removed the unused IConfig dependency that was accidentally left in when IAppConfig was added. The constructor now only holds IAppConfig for the enable_email check, with typed getValueString(). All 41 Consumer tests pass.
18ad0df to
babc4d2
Compare
skjnldsv
reviewed
May 19, 2026
babc4d2 to
131a5f4
Compare
… 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(). Signed-off-by: Anna Larch <anna@nextcloud.com>
131a5f4 to
4e3129f
Compare
skjnldsv
approved these changes
May 19, 2026
Collaborator
Author
|
/backport to stable34 |
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