diff --git a/assets/javascripts/discourse/connectors/category-custom-settings/solved-settings.hbs b/assets/javascripts/discourse/connectors/category-custom-settings/solved-settings.hbs
index b78a359..aaf30ae 100644
--- a/assets/javascripts/discourse/connectors/category-custom-settings/solved-settings.hbs
+++ b/assets/javascripts/discourse/connectors/category-custom-settings/solved-settings.hbs
@@ -1,5 +1,6 @@
+
{{i18n "solved.title"}}
+
{{#unless siteSettings.allow_solved_on_all_topics}}
- {{i18n "solved.title"}}
-{{/unless}}
\ No newline at end of file
+{{/unless}}
+
+
+
+
+
\ No newline at end of file
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 631381b..f5af30a 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -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"
diff --git a/plugin.rb b/plugin.rb
index 30d2982..a712428 100644
--- a/plugin.rb
+++ b/plugin.rb
@@ -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 =
diff --git a/spec/integration/solved_spec.rb b/spec/integration/solved_spec.rb
index 40013cf..0de7146 100644
--- a/spec/integration/solved_spec.rb
+++ b/spec/integration/solved_spec.rb
@@ -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)