diff --git a/assets/javascripts/discourse/components/wizard-realtime-validations.js.es6 b/assets/javascripts/discourse/components/wizard-realtime-validations.js.es6
index 5bafaac3..c4b35d5c 100644
--- a/assets/javascripts/discourse/components/wizard-realtime-validations.js.es6
+++ b/assets/javascripts/discourse/components/wizard-realtime-validations.js.es6
@@ -2,9 +2,25 @@ import Component from "@ember/component";
import EmberObject from "@ember/object";
import { cloneJSON } from "discourse-common/lib/object";
import Category from "discourse/models/category";
+import discourseComputed from "discourse-common/utils/decorators";
+import I18n from "I18n";
export default Component.extend({
classNames: ["realtime-validations"],
+ @discourseComputed
+ timeUnits() {
+ return [
+ "days",
+ "weeks",
+ "months",
+ "years"
+ ].map((unit) => {
+ return {
+ id: unit,
+ name: I18n.t(`admin.wizard.field.validations.time_units.${unit}`)
+ }
+ });
+ },
init() {
this._super(...arguments);
diff --git a/assets/javascripts/discourse/templates/components/wizard-realtime-validations.hbs b/assets/javascripts/discourse/templates/components/wizard-realtime-validations.hbs
index fe053bc3..39734761 100644
--- a/assets/javascripts/discourse/templates/components/wizard-realtime-validations.hbs
+++ b/assets/javascripts/discourse/templates/components/wizard-realtime-validations.hbs
@@ -22,13 +22,15 @@
-
+
- {{date-picker-past
- value=(readonly props.date_after)
- containerId="date-container"
- onSelect=(action (mut props.date_after))}}
+ {{input type="number" class="time-n-value" value=props.time_n_value}}
+ {{combo-box
+ value=(readonly props.time_unit)
+ content=timeUnits
+ class="time-unit-selector"
+ onChange=(action (mut props.time_unit))}}
diff --git a/assets/javascripts/wizard/components/similar-topics-validator.js.es6 b/assets/javascripts/wizard/components/similar-topics-validator.js.es6
index 2625cdf2..3b63fafb 100644
--- a/assets/javascripts/wizard/components/similar-topics-validator.js.es6
+++ b/assets/javascripts/wizard/components/similar-topics-validator.js.es6
@@ -124,7 +124,8 @@ export default WizardFieldValidator.extend({
this.backendValidate({
title: this.get("field.value"),
categories: this.get("validation.categories"),
- date_after: this.get("validation.date_after"),
+ time_unit: this.get("validation.time_unit"),
+ time_n_value: this.get("validation.time_n_value")
}).then((result) => {
const similarTopics = A(
deepMerge(result["topics"], result["similar_topics"])
diff --git a/assets/stylesheets/common/wizard-admin.scss b/assets/stylesheets/common/wizard-admin.scss
index a06c19e2..389de55c 100644
--- a/assets/stylesheets/common/wizard-admin.scss
+++ b/assets/stylesheets/common/wizard-admin.scss
@@ -680,3 +680,13 @@
.wizard.category-selector {
width: 200px !important;
}
+
+.time-n-value {
+ width: 70px;
+ vertical-align: middle;
+}
+
+.select-kit.time-unit-selector {
+ width: 80px;
+ vertical-align: middle;
+}
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 8b3d4e66..47b2aa5b 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -184,7 +184,12 @@ en:
above: "Above"
below: "Below"
categories: "Categories"
- date_after: "Date After"
+ max_topic_age: "Max Topic Age"
+ time_units:
+ days: "Days"
+ weeks: "Weeks"
+ months: "Months"
+ years: "Years"
type:
text: "Text"
diff --git a/lib/custom_wizard/realtime_validations/similar_topics.rb b/lib/custom_wizard/realtime_validations/similar_topics.rb
index 29425f5b..3323a2ee 100644
--- a/lib/custom_wizard/realtime_validations/similar_topics.rb
+++ b/lib/custom_wizard/realtime_validations/similar_topics.rb
@@ -21,8 +21,9 @@ class CustomWizard::RealtimeValidation::SimilarTopics
title = params[:title]
raw = params[:raw]
categories = params[:categories]
- date_after = params[:date_after]
-
+ time_n_value = params[:time_n_value]
+ time_unit = params[:time_unit]
+
result = CustomWizard::RealtimeValidation::Result.new(:similar_topic)
if title.length < SiteSetting.min_title_similar_length || !Topic.count_exceeds_minimum?
@@ -31,7 +32,11 @@ class CustomWizard::RealtimeValidation::SimilarTopics
topics = Topic.similar_to(title, raw, user).to_a
topics.select! { |t| categories.include?(t.category.id.to_s) } if categories.present?
- topics.select! { |t| t.created_at > DateTime.parse(date_after) } if date_after.present?
+
+ if time_n_value.to_i > 0 && time_unit.present?
+ topics.select! { |t| t.created_at >= time_n_value.to_i.send(time_unit).ago }
+ end
+
topics.map! { |t| SimilarTopic.new(t) }
result.items = topics
diff --git a/spec/components/custom_wizard/realtime_validations/similar_topics_spec.rb b/spec/components/custom_wizard/realtime_validations/similar_topics_spec.rb
index e76b7fdb..7d871d45 100644
--- a/spec/components/custom_wizard/realtime_validations/similar_topics_spec.rb
+++ b/spec/components/custom_wizard/realtime_validations/similar_topics_spec.rb
@@ -30,12 +30,12 @@ describe ::CustomWizard::RealtimeValidation::SimilarTopics do
expect(result.items.length).to eq(1)
end
- it "filters topics based on created date" do
- topic.update!(created_at: 1.day.ago)
+ it "filters topics based on Max Topic Age setting" do
+ topic.update!(created_at: 23.hours.ago)
cat_topic.update!(created_at: 2.days.ago)
validation = ::CustomWizard::RealtimeValidation::SimilarTopics.new(user)
- result = validation.perform({ title: "matching similar", date_after: 1.day.ago.to_date.to_s })
+ result = validation.perform({ title: "matching similar", time_n_value: 1, time_unit: "days" })
expect(result.items.length).to eq(1)
end
end