Add a modular base set-up that allows adding more different event types.
This one adds upload contests. More can be added the same way with minimal coding efforts.
Implementing a completely automated system may not be feasible, as there are too many individual variations and nuances to account for.
These aren't currently being used. If this functionality is to be completed, it should be easy enough to find the code through the git history again. However, UNIT3D doesn't really use events and it'd be better for most of the notification sending to be inline (except the stale one of course).
- Dedicated CRUD controller
- Allow selected groups only
- Old Mass action controller will be moved to own Mass validate users controller in separate pr
- closes#4690
The query only takes 6 seconds on my local untuned machine. Caching it for an hour is probably fine, we have worse queries out there, and indexing isn't an option since this table is write-heavy. Reduces overall complexity and prevents blank page after cache is reset.
Just an initial portion for now fixing incorrect text and preventing future incorrect text. Eventually, I'd like to fix everything still listed under "ignoredWords" in cspell.json.
These permissions were never meant to be directly edited by staff. They should never have been added to the staff user edit page as it just caused confusion when the settings reset at the daily group change. I've now added these settings to the group directly and allow the settings on the user edit page to override the group settings. I refrained from fixing the can_download permission for now, because so many different things affect it and it will need at 3 separate permissions to control everything it does. Trying to fix it will take much more effort than what can be fixed today. Because of this, I removed the setting from the user edit page to reduce confusion from staff who don't realize it is controlled by the scheduler. Relevant issue: #1820.
Useful for forums dedicated to fixing bugs or adding suggestions. This way, topics can be closed when bugs are fixed or suggestions are implemented, and opening the forum only shows relevant bugs/suggestions by default. Topics with different states can be accessed by changing the filter back to `Any`.
* add: system required validation
- this will stop site operators from renaming system required groups which breaks things like:
`$validatingGroup = cache()->rememberForever('validating_group', fn () => Group::query()->where('slug', '=', 'validating')->pluck('id'));`