FEATURE: solved topic auto close setting per category (#233)

* FEATURE: solved topic auto close setting per category

This commit adds per category "solved topics auto close hours" setting. The plugin would use the existing "solved topics auto close hours" setting, except if there was a setting for the relevant category in which case that would take precedence.

* minor changes per feedback
This commit is contained in:
Arpit Jalan 2023-04-19 19:44:33 +05:30 committed by GitHub
parent 4ae1841479
commit bffc46858a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 3 deletions

View File

@ -1,5 +1,6 @@
<h3>{{i18n "solved.title"}}</h3>
{{#unless siteSettings.allow_solved_on_all_topics}} {{#unless siteSettings.allow_solved_on_all_topics}}
<h3>{{i18n "solved.title"}}</h3>
<section class="field"> <section class="field">
<div class="enable-accepted-answer"> <div class="enable-accepted-answer">
<label class="checkbox-label"> <label class="checkbox-label">
@ -12,4 +13,16 @@
</label> </label>
</div> </div>
</section> </section>
{{/unless}} {{/unless}}
<section class="field auto-close-solved-topics">
<label for="auto-close-solved-topics">
{{i18n "solved.solved_topics_auto_close_hours"}}
</label>
<NumberField
@number={{this.category.custom_fields.solved_topics_auto_close_hours}}
@id="auto-close-solved-topics"
@type="number"
@min="0"
/>
</section>

View File

@ -9,6 +9,7 @@ en:
solved: solved:
title: "Solved" title: "Solved"
allow_accepted_answers: "Allow topic owner and staff to mark a reply as the solution" allow_accepted_answers: "Allow topic owner and staff to mark a reply as the solution"
solved_topics_auto_close_hours: "Auto close topic (n) hours after the last reply once the topic has been marked as solved."
accept_answer: "Select if this reply solves the problem" accept_answer: "Select if this reply solves the problem"
accepted_description: "This is the accepted solution to this topic" accepted_description: "This is the accepted solution to this topic"
has_no_accepted_answer: "This topic has no solution" has_no_accepted_answer: "This topic has no solution"

View File

@ -133,7 +133,13 @@ SQL
) )
end end
auto_close_hours = SiteSetting.solved_topics_auto_close_hours auto_close_hours = 0
if topic&.category.present?
auto_close_hours = topic.category.custom_fields["solved_topics_auto_close_hours"].to_i
auto_close_hours = 175_200 if auto_close_hours > 175_200 # 20 years
end
auto_close_hours = SiteSetting.solved_topics_auto_close_hours if auto_close_hours == 0
if (auto_close_hours > 0) && !topic.closed if (auto_close_hours > 0) && !topic.closed
topic_timer = topic_timer =

View File

@ -61,6 +61,32 @@ RSpec.describe "Managing Posts solved status" do
expect(topic.public_topic_timer.based_on_last_post).to eq(true) expect(topic.public_topic_timer.based_on_last_post).to eq(true)
end end
it "gives priority to category's solved_topics_auto_close_hours setting" do
freeze_time
custom_auto_close_category = Fabricate(:category)
topic_2 = Fabricate(:topic, category: custom_auto_close_category)
post_2 = Fabricate(:post, topic: topic_2)
custom_auto_close_category.custom_fields["solved_topics_auto_close_hours"] = 4
custom_auto_close_category.save_custom_fields
post "/solution/accept.json", params: { id: post_2.id }
expect(response.status).to eq(200)
expect(post_2.reload.custom_fields["is_accepted_answer"]).to eq("true")
topic_2.reload
expect(topic_2.public_topic_timer.status_type).to eq(TopicTimer.types[:silent_close])
expect(
topic_2.custom_fields[DiscourseSolved::AUTO_CLOSE_TOPIC_TIMER_CUSTOM_FIELD].to_i,
).to eq(topic_2.public_topic_timer.id)
expect(topic_2.public_topic_timer.execute_at).to eq_time(Time.zone.now + 4.hours)
expect(topic_2.public_topic_timer.based_on_last_post).to eq(true)
end
it "sends notifications to correct users" do it "sends notifications to correct users" do
SiteSetting.notify_on_staff_accept_solved = true SiteSetting.notify_on_staff_accept_solved = true
user = Fabricate(:user) user = Fabricate(:user)