This PR does some preparatory work to prepare for the front-end display
of who marked an answer as solved. It migrates the custom fields from
discourse-solved of Topic and Post to a new table, except "accepted_answer_post_id"
ref: /t/-/95318
A while ago the `accept_all_solutions_allowed_groups` setting was introduced to replace the `accept_all_solutions_trust_level` setting and to make the plugin more flexible by allowing admins to choose groups that are allowed to accept solutions instead of trust levels.
The new group-based setting includes the TL4 group by default. However, removing the TL4 group from the setting doesn't actually remove TL4 users permission to accept solution.
The reason for this bug is that the `can_accept_answer?` guardian method calls `can_perform_action_available_to_group_moderators?` which always allows TL4 users to perform category moderator actions:
56524f4bdf/lib/guardian/topic_guardian.rb (L342-L348)
This commit fixes the bug by checking if the user is a moderator on the topic's category (by calling the `is_category_group_moderator?` guardian method) instead of checking if the user can perform category moderator actions. In our case, `is_category_group_moderator?` is equivalent to `can_perform_action_available_to_group_moderators?` except for the TL4 check which is what we need.
Internal topic: t/134675.
it would raise an error because we delete the topic before and we need the topic record to update various meta data.
This ensures we load the "deleted" version in such cases.
Internal ref - t/130797
* FEATURE: change status on unsolve & fix assign changes
When a topic is unsolved, it should have an option,
defined in the settings, to change its status to that state.
Fix assign changes when a topic was solved, previously it was
changing the assignee.
* DEV: Change names in tests and remove comments
* DEV: Update change status on solve implementation
Update tests to verify that the change status on solve feature is working as expected.
Change the implementation to loop throught the topic assignments and update the status.
* DEV: address review feedback
* FEATURE: Prevents assign notification & change status on solved
Relates to this [topic](https://meta.discourse.org/t/assign-plugin-for-informatica/256974/94)
Add an event listener to `accepted_solution` event
Add `assigns_reminder_assigned_topics_query` modifier to not notify if
`prevent_assign_notification` setting is on.
Add settings to prevent assign notification and change status on solved
* DEV: Address review comments
Update SiteSettings names.
* DEV(WIP): Add tests for integration with discourse-assign
Add test for integration with discourse-assign plugin
checks if the assignment status is moved to `Done`
* DEV: lint solved_spec.rb
* DEV: Update test where it updates all assignments
Change `on(:accepted_solution)` is defined
Update test to use acting_user instead of admin
* DEV: lint & add tests for assigns_reminder_assigned_topics_query
Linted and added tests for `assigns_reminder_assigned_topics_query` modifier.
* DEV: Update tests based on review feedback
change plugin_initializer location
update spec with new tests to test integration with discourse-assign
* DEV: Add describe to spec for discourse-assign integration tests
* DEV: update describe name for discourse-assing spec integration
* DEV: Add more tests to spec for discourse-assign integration
* DEV: Lint solved_spec
* DEV: Lint and update spec to not have `p1` topic inside
* FEATURE: add new custom status filters
Those can be used in /filter route.
Depends on https://github.com/discourse/discourse/pull/26770
Internal ref. /t/127278
* DEV: pin plugin for Discourse 3.3.0.beta2-dev
When using the `status:unsolved` search filter, the plugin was only
returning results from topics in categories where solved was enabled.
This commit changes the search query to also include topics with tags
that have solved enabled via the `enable_solved_tags` site setting.
This fixes the `status:unsolved tags:tag1` search query.
This refactor makes for easier testing and makes things
more organised, the guardian extensions had no testing
whatsoever and I need some to make the TL -> group change.
We're updating core to change TL based access settings to be group based. This requires some updates of tests to work correctly. (The existing test setup gives false positives.)
In https://github.com/discourse/discourse/pull/24740, `min_trust_to_create_topic` site setting was replaced by `create_topic_allowed_groups`. This PR replaces the former, deprecated one, with the latter.
c.f. de983796e1b66aa2ab039a4fb6e32cec8a65a098
There will soon be additional login_required checks
for Guardian, and the intent of many checks by automated
systems is better fulfilled by using BasicUser, which
simulates a logged in TL0 forum user, rather than an
anon user.
As it's currently implemented, the fallback is essential here. `this` in a static method is `undefined`, and therefore cannot have an owner.
Unfortunately this plugin outlet does not seem to be tested in the plugin's own test suite. Core's test suite picked up this issue.
Followup to 3a0b46da7a