|Summary||Discourse Solved allows users to accept solutions on topics in designated categories.|
|Install Guide||How to install plugins in Discourse|
To enable Solved on a single category:
Navigate to a category page and click on the category settings button
Navigate to the settings sections
scroll down and enable the
Allow topic owner and staff to mark a reply as the solutionsetting
To enable Solved on all categories:
allow solved on all topics site setting
As the OP (topic creator), you will have a button that allows you to accept an answer.
Topics with accepted answers are highlighted and linked in the topic list:
Accepted answers are highlighted in the first post:
Some sites might benefit from a solved/unsolved indicator on topic lists. If that’s your cup of tea, you can enable the
empty_box_on_unsolved site setting.
When searching for topics, you can filter the search to only solved or unsolved topics via the
status:unsolved queries. “are solved” and “are unsolved” can also be found via the “Where topics” dropdown.
You can enable a filter dropdown in topic list pages using the site setting
You can also filter solved/unsolved topics by adding a parameter to the URL. For example:
These links could be added above a specific category list by following the instructions here
As it stands, our plugin system has no clean way of shipping badges and removing them when a plugin is removed. While this is being solved you can add badges to your liking via the badge interface.
SELECT p.user_id, p.id post_id, p.updated_at granted_at FROM badge_posts p WHERE p.post_number > 1 AND p.id IN ( SELECT post_id FROM ( SELECT pc.post_id, row_number() OVER (PARTITION BY p1.user_id ORDER BY pc.created_at) as rnum FROM post_custom_fields pc JOIN badge_posts p1 ON p1.id = pc.post_id JOIN topics t1 ON p1.topic_id = t1.id WHERE name = 'is_accepted_answer' AND value IS NOT NULL AND p1.user_id <> t1.user_id AND ( :backfill OR p1.user_id IN ( select user_id from posts where p1.id IN (:post_ids) ) ) ) X WHERE rnum = 1)
SELECT id user_id, current_timestamp granted_at FROM users WHERE id IN ( SELECT p1.user_id FROM post_custom_fields pc JOIN badge_posts p1 ON p1.id = pc.post_id JOIN topics t1 ON p1.topic_id = t1.id WHERE p1.user_id <> t1.user_id AND name = 'is_accepted_answer' AND value IS NOT NULL AND p1.user_id IN ( SELECT user_id FROM posts WHERE :backfill OR p1.id IN (:post_ids) ) GROUP BY p1.user_id HAVING COUNT(*) > 9 )
To list each individual “solved” event:
SELECT acting_user_id, target_topic_id, target_post_id, created_at FROM user_actions WHERE action_type=15 ORDER BY created_at DESC
To produce a list with stats per-user: (with variable for time interval, defaults to 1 year):
-- [params] -- string :interval = 1 year SELECT ua.acting_user_id, count(case t.user_id when ua.acting_user_id then 1 else null end) as is_op, count(case t.user_id when ua.acting_user_id then null else 1 end) as not_op, count(*) as total FROM user_actions ua LEFT JOIN topics t ON target_topic_id = t.id WHERE action_type=15 AND ua.created_at >= CURRENT_DATE - INTERVAL :interval GROUP BY ua.acting_user_id ORDER BY total DESC
This is an official plugin, and we plan to ship it to all our customers. Thank you to Western Digital for funding the development of this plugin!