diff --git a/app/assets/javascripts/admin/addon/components/admin-flags-form.gjs b/app/assets/javascripts/admin/addon/components/admin-flags-form.gjs
index bf0ffab74cd..2d09b602f6d 100644
--- a/app/assets/javascripts/admin/addon/components/admin-flags-form.gjs
+++ b/app/assets/javascripts/admin/addon/components/admin-flags-form.gjs
@@ -135,7 +135,7 @@ export default class AdminFlagsForm extends Component {
diff --git a/app/models/flag.rb b/app/models/flag.rb
index e10fffb4aef..619e43bdd00 100644
--- a/app/models/flag.rb
+++ b/app/models/flag.rb
@@ -43,7 +43,7 @@ class Flag < ActiveRecord::Base
end
def system?
- self.id < MAX_SYSTEM_FLAG_ID
+ self.id.present? && self.id < MAX_SYSTEM_FLAG_ID
end
def applies_to?(type)
@@ -61,7 +61,8 @@ class Flag < ActiveRecord::Base
end
def set_name_key
- self.name_key = self.name.squeeze(" ").gsub(" ", "_").gsub(/[^\w]/, "").downcase
+ prefix = self.system? ? "" : "custom_"
+ self.name_key = "#{prefix}#{self.name.squeeze(" ").gsub(" ", "_").gsub(/[^\w]/, "").downcase}"
end
end
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 2db37838c13..7568f3f125e 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -5617,6 +5617,7 @@ en:
saved: "saved!"
flags:
header: "Moderation Flags"
+ edit_header: "Edit Flag"
subheader: "The flagging system in Discourse helps you and your moderator team manage content and user behavior, keeping your community respectful and healthy. The defaults are suitable for most communities and you don’t have to change them. However, if your site has particular requirements you can disable flags you don’t need and add your own custom flags."
description: "Description"
enabled: "Enabled?"
diff --git a/spec/lib/post_action_type_view_spec.rb b/spec/lib/post_action_type_view_spec.rb
index 607839522b7..5d5a85fc04c 100644
--- a/spec/lib/post_action_type_view_spec.rb
+++ b/spec/lib/post_action_type_view_spec.rb
@@ -29,8 +29,8 @@ RSpec.describe PostActionTypeView do
)
expect(post_action_type_view.score_types).to eq({ needs_approval: 9 })
- flag = Fabricate(:flag, name: "custom", enabled: false)
- expect(PostActionTypeView.new.disabled_flag_types).to eq({ custom: flag.id })
+ flag = Fabricate(:flag, name: "flag", enabled: false)
+ expect(PostActionTypeView.new.disabled_flag_types).to eq({ custom_flag: flag.id })
flag.destroy!
end
diff --git a/spec/models/flag_spec.rb b/spec/models/flag_spec.rb
index c090b854cd0..9c2597e815e 100644
--- a/spec/models/flag_spec.rb
+++ b/spec/models/flag_spec.rb
@@ -17,14 +17,14 @@ RSpec.describe Flag, type: :model do
end
it "has correct name key" do
- flag = Fabricate(:flag, name: "CuStOm Flag!!!")
+ flag = Fabricate(:flag, name: "FlAg!!!")
expect(flag.name_key).to eq("custom_flag")
flag.update!(name: "It's Illegal")
- expect(flag.name_key).to eq("its_illegal")
+ expect(flag.name_key).to eq("custom_its_illegal")
flag.update!(name: "THIS IS SPaM!+)(*&^%$#@@@!)")
- expect(flag.name_key).to eq("this_is_spam")
+ expect(flag.name_key).to eq("custom_this_is_spam")
flag.destroy!
end
@@ -37,17 +37,9 @@ RSpec.describe Flag, type: :model do
%i[notify_user off_topic inappropriate spam illegal notify_moderators needs_approval],
)
- flag = Fabricate(:flag, name: "custom")
+ flag = Fabricate(:flag, name: "flag")
expect(PostActionType.flag_types.keys).to eq(
- %i[notify_user off_topic inappropriate spam illegal notify_moderators custom],
- )
- expect(ReviewableScore.types.keys).to eq(
- %i[notify_user off_topic inappropriate spam illegal notify_moderators custom needs_approval],
- )
-
- flag.update!(name: "edited_custom")
- expect(PostActionType.flag_types.keys).to eq(
- %i[notify_user off_topic inappropriate spam illegal notify_moderators edited_custom],
+ %i[notify_user off_topic inappropriate spam illegal notify_moderators custom_flag],
)
expect(ReviewableScore.types.keys).to eq(
%i[
@@ -57,7 +49,24 @@ RSpec.describe Flag, type: :model do
spam
illegal
notify_moderators
- edited_custom
+ custom_flag
+ needs_approval
+ ],
+ )
+
+ flag.update!(name: "edited_flag")
+ expect(PostActionType.flag_types.keys).to eq(
+ %i[notify_user off_topic inappropriate spam illegal notify_moderators custom_edited_flag],
+ )
+ expect(ReviewableScore.types.keys).to eq(
+ %i[
+ notify_user
+ off_topic
+ inappropriate
+ spam
+ illegal
+ notify_moderators
+ custom_edited_flag
needs_approval
],
)
diff --git a/spec/models/post_action_spec.rb b/spec/models/post_action_spec.rb
index 01c31448dea..708ab07bf6c 100644
--- a/spec/models/post_action_spec.rb
+++ b/spec/models/post_action_spec.rb
@@ -791,7 +791,7 @@ RSpec.describe PostAction do
PostActionCreator.new(
Discourse.system_user,
post,
- PostActionType.types[:flag_without_message],
+ PostActionType.types[:custom_flag_without_message],
message: "WAT",
).perform
@@ -824,7 +824,7 @@ RSpec.describe PostAction do
PostActionCreator.new(
Discourse.system_user,
post,
- PostActionType.types[:flag_with_message],
+ PostActionType.types[:custom_flag_with_message],
message: "WAT",
).perform
diff --git a/spec/system/admin_flags_spec.rb b/spec/system/admin_flags_spec.rb
index d7aec68d877..f826946a30b 100644
--- a/spec/system/admin_flags_spec.rb
+++ b/spec/system/admin_flags_spec.rb
@@ -108,7 +108,7 @@ describe "Admin Flags Page", type: :system do
)
# update
- admin_flags_page.visit.click_edit_flag("vulgar")
+ admin_flags_page.visit.click_edit_flag("custom_vulgar")
admin_flag_form_page.fill_in_name("Tasteless").click_save
expect(admin_flags_page).to have_flags(
@@ -132,7 +132,7 @@ describe "Admin Flags Page", type: :system do
)
# delete
- admin_flags_page.visit.click_delete_flag("tasteless").confirm_delete
+ admin_flags_page.visit.click_delete_flag("custom_tasteless").confirm_delete
expect(admin_flags_page).to have_no_flag("tasteless")
@@ -146,6 +146,28 @@ describe "Admin Flags Page", type: :system do
"It's Illegal",
"Something Else",
)
+
+ # custom flag with same name as system flag
+ admin_flags_page.visit.toggle("inappropriate")
+ admin_flags_page.click_add_flag
+ admin_flag_form_page
+ .fill_in_name("Inappropriate")
+ .fill_in_description("New flag description")
+ .select_applies_to("Topic")
+ .select_applies_to("Post")
+ .click_save
+
+ topic_page.visit_topic(post.topic).open_flag_topic_modal
+
+ expect(flag_modal).to have_choices(
+ "It's Spam",
+ "It's Illegal",
+ "Something Else",
+ "Inappropriate",
+ )
+
+ Flag.system.where(name: "illegal").update!(enabled: true)
+ admin_flags_page.visit.click_delete_flag("custom_inappropriate").confirm_delete
end
it "has settings tab" do