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.
* 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
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.
Many consumers of Discourse solved may want solved topics to show up more
prominently in search. New setting `prioritize_solved_topics_in_search` (default off) allows
bumping these topics to the top.
Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
This PR adds a site setting called `enable_solved_tags`. Solved will be enabled for topics containing these tags, just like we do for specific categories.
* Make it possible to disallow topic starters to accept a solution
* Make adding QAPage schema markup optional
* Address @eviltrout's comments
Co-authored-by: Richard <richard@communiteq.com>