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}}
<h3>{{i18n "solved.title"}}</h3>
<section class="field">
<div class="enable-accepted-answer">
<label class="checkbox-label">
@ -12,4 +13,16 @@
</label>
</div>
</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:
title: "Solved"
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"
accepted_description: "This is the accepted solution to this topic"
has_no_accepted_answer: "This topic has no solution"

View File

@ -133,7 +133,13 @@ SQL
)
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
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)
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
SiteSetting.notify_on_staff_accept_solved = true
user = Fabricate(:user)