Implement server-side error templates and continuous connection monitoring for the BlockNote editor when the Hocuspocus collaboration server becomes unreachable.
Flow:
- Initial load, server down: Timeout 10s → Error notice
- Server comes up: 'synced' event → Editor Recovery notice
- Server goes down again: 'disconnect' event → Error notice
Ref: https://tiptap.dev/docs/hocuspocus/provider/eventshttps://community.openproject.org/wp/68801
The split allows definitive response types- i.e html vs turbo-streams.
This is specifically needed in destroy actions via `turbo_method: :delete` where
turbo will "force" turbo stream requests if the controller supports the format.
Diff was achieved by running
rubocop -A --only Style/FrozenStringLiteralComment,Layout/EmptyLineAfterMagicComment,Style/RedundantFreeze
for the module folders of the affected modules.
This change is part of the effort to slowly roll out frozen
string literals across the entire application.
Due to STI nature it is required. Otherwise undesired behavior is possible
in dev and test environments(where usually lazy loading is enabled).
The udesired behavior can be like:
Fetching not loaded yet STI model through its parent model
(e.g. `User.find(service_account_id)` raises `ActiveRecord::NotFound`, because
`ServiceAccount` has not been referenced yet.
`SubclassRegistry` has been removed, because:
1. `.register_subclasses` and `.registered_subclasses` produce unexpected results.
```ruby
# e.g.: Principal -> User -> ServiceAccount
Principal.register_subclass(User)
# Then
Principal.registered_subclasses == [User] # true
User.registered_subclasses == [User] # true
ServiceAccount.registered_subclasses == [User] # true
# Having User as a subclass of User and ServiceAccount seems to be weird.
```
2. There seems to be no big win in have the additional list of subclasses that have to be manually filled.
3. Used in commit apprach seems to be simpler.
It is just calling STI classes explicitly in to_prepare block of configuration.
* spec with correctly scoped links
* move db check into own file - fix deprecation
* basic spec for member creation service
* use constants for all notifications
* send an OP notification after member has been created
* send an OP notification after member has been updated
* mails on group member added
Depending on whether the membership existed before or not, an updated or
a created notification is send. This is done asynchronously.
* move all mail sender background jobs into namespace
* wip
* wip
* correct handling group member notifications
* add setting enable/disable mail sending on member alterations
* use services in members controller
* move Notifiable to OpenProject
* remove member after save hooks
* cleanup/testing/linting
* render member mails in receiver locale
* remove add_member! method
* use mailer layout for all mailers
* Update app/services/groups/cleanup_inherited_roles_service.rb
Co-authored-by: Oliver Günther <mail@oliverguenther.de>
* use around callback to avoid prepending
* handle nil params
Co-authored-by: Oliver Günther <mail@oliverguenther.de>
Updates the copyright to 2021 for all files that have a copyright. Files in our source code without the copyright header still do not receive one automatically. Additionally, backlisted files are also excluded.
Previously the copyright of chiliproject which references redmine stated a copyright of redmine up to and including 2017 which is not true for the code we have in here. Because of that I changed that to 2013
* use cte for aggregated journal
* Revert "use cte for aggregated journal"
This reverts commit 5fedefefdd.
* add another subselect that could later on be provided from the outside
* allow passing a nukleous sql to aggregated journals
* wip - using aggregated journal for activity
* new sql for aggregated journals
* start implementing new aggregated query
* additional documentation
* consolidate activity functionality
* simplify by turing into instance methods
* move activity fetcher out of redmine
* remove verb verification made obsolete
Without catchall routes, the dispatching handles it
* remove duplicate authorize check
* refactor activities controller
* refactory activity fetcher
* cache avatar file
* sort choosable events
* remove legacy spec covered by contemporary
* speed up aggregated journals via CTE
* instance var might never have been set
* ensure the event_types are always transmitted
* correctly reset the avatar cache
* fix avatar fetcher expectation regarding wiki pages
* adapt spec
[ci skip]