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 fa9a0b0d341..4395ac21116 100644 --- a/app/assets/javascripts/admin/addon/components/admin-flags-form.gjs +++ b/app/assets/javascripts/admin/addon/components/admin-flags-form.gjs @@ -30,11 +30,13 @@ export default class AdminFlagsForm extends Component { appliesTo: this.args.flag.applies_to, requireMessage: this.args.flag.require_message, enabled: this.args.flag.enabled, + autoActionType: this.args.flag.auto_action_type, }; } else { return { enabled: true, requireMessage: false, + autoActionType: false, }; } } @@ -68,7 +70,14 @@ export default class AdminFlagsForm extends Component { } @action - save({ name, description, appliesTo, requireMessage, enabled }) { + save({ + name, + description, + appliesTo, + requireMessage, + enabled, + autoActionType, + }) { const createOrUpdate = this.isUpdate ? this.update : this.create; const data = { name, @@ -76,6 +85,7 @@ export default class AdminFlagsForm extends Component { enabled, applies_to: appliesTo, require_message: requireMessage, + auto_action_type: autoActionType, }; createOrUpdate(data); } @@ -107,6 +117,7 @@ export default class AdminFlagsForm extends Component { this.args.flag.applies_to = response.flag.applies_to; this.args.flag.require_message = response.flag.require_message; this.args.flag.enabled = response.flag.enabled; + this.args.flag.auto_action_type = response.flag.auto_action_type; this.router.transitionTo("adminConfig.flags"); } catch (error) { popupAjaxError(error); @@ -183,6 +194,20 @@ export default class AdminFlagsForm extends Component { > + + + + {{i18n + "admin.config_areas.flags.form.auto_action_type_description" + }} + + diff --git a/app/serializers/flag_serializer.rb b/app/serializers/flag_serializer.rb index b7e4e927e3e..bc072927c3b 100644 --- a/app/serializers/flag_serializer.rb +++ b/app/serializers/flag_serializer.rb @@ -12,7 +12,8 @@ class FlagSerializer < ApplicationSerializer :enabled, :is_flag, :applies_to, - :is_used + :is_used, + :auto_action_type def i18n_prefix "#{@options[:target] || "post_action"}_types.#{object.name_key}" diff --git a/app/services/flags/create_flag.rb b/app/services/flags/create_flag.rb index 8a0f1e85931..b0d1b385dbc 100644 --- a/app/services/flags/create_flag.rb +++ b/app/services/flags/create_flag.rb @@ -10,6 +10,7 @@ class Flags::CreateFlag attribute :require_message, :boolean attribute :enabled, :boolean attribute :applies_to + attribute :auto_action_type, :boolean validates :name, presence: true validates :description, presence: true diff --git a/app/services/flags/update_flag.rb b/app/services/flags/update_flag.rb index a32312aaaad..1a52d3d8925 100644 --- a/app/services/flags/update_flag.rb +++ b/app/services/flags/update_flag.rb @@ -10,6 +10,7 @@ class Flags::UpdateFlag attribute :require_message, :boolean attribute :enabled, :boolean attribute :applies_to + attribute :auto_action_type, :boolean validates :id, presence: true validates :name, presence: true diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index dc046bb6c28..28dc31fdea8 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -5679,6 +5679,8 @@ en: non_deletable: "You cannot delete this flag because it is a system flag or has already been used in the review system, however you can still disable it." require_message: "Prompt users to provide additional reasons" require_message_description: "When this flag is selected, a text field will be displayed for the user to provide additional detail about why they are flagging the content" + auto_action_type: "Auto action type" + auto_action_type_description: "When a post is flagged by a staff member it is automatically hidden" more_options: title: "More options" move_up: "Move up" diff --git a/spec/requests/api/schemas/json/site_response.json b/spec/requests/api/schemas/json/site_response.json index 44cf69df471..a91ea86bb52 100644 --- a/spec/requests/api/schemas/json/site_response.json +++ b/spec/requests/api/schemas/json/site_response.json @@ -368,6 +368,9 @@ }, "position": { "type": "integer" + }, + "auto_action_type": { + "type": "boolean" } }, "required": [ @@ -380,7 +383,8 @@ "require_message", "enabled", "applies_to", - "is_used" + "is_used", + "auto_action_type" ] } }, @@ -423,6 +427,9 @@ }, "position": { "type": "integer" + }, + "auto_action_type": { + "type": "boolean" } }, "required": [ @@ -435,7 +442,8 @@ "require_message", "enabled", "applies_to", - "is_used" + "is_used", + "auto_action_type" ] } }, diff --git a/spec/services/flags/create_flag_spec.rb b/spec/services/flags/create_flag_spec.rb index 0ba2858ef17..4906ecbcefc 100644 --- a/spec/services/flags/create_flag_spec.rb +++ b/spec/services/flags/create_flag_spec.rb @@ -14,13 +14,16 @@ RSpec.describe(Flags::CreateFlag) do fab!(:current_user) { Fabricate(:admin) } - let(:params) { { name:, description:, applies_to:, require_message:, enabled: } } + let(:params) do + { name:, description:, applies_to:, require_message:, enabled:, auto_action_type: } + end let(:dependencies) { { guardian: current_user.guardian } } let(:name) { "custom flag name" } let(:description) { "custom flag description" } let(:applies_to) { ["Topic"] } let(:enabled) { true } let(:require_message) { true } + let(:auto_action_type) { true } context "when user is not allowed to perform the action" do fab!(:current_user) { Fabricate(:user) } @@ -62,6 +65,7 @@ RSpec.describe(Flags::CreateFlag) do require_message: true, enabled: true, notify_type: true, + auto_action_type: true, ) end diff --git a/spec/services/flags/update_flag_spec.rb b/spec/services/flags/update_flag_spec.rb index 17fcde871a0..70b216727c2 100644 --- a/spec/services/flags/update_flag_spec.rb +++ b/spec/services/flags/update_flag_spec.rb @@ -16,7 +16,17 @@ RSpec.describe(Flags::UpdateFlag) do fab!(:current_user) { Fabricate(:admin) } let(:flag) { Fabricate(:flag) } - let(:params) { { id: flag_id, name:, description:, applies_to:, require_message:, enabled: } } + let(:params) do + { + id: flag_id, + name:, + description:, + applies_to:, + require_message:, + enabled:, + auto_action_type:, + } + end let(:dependencies) { { guardian: current_user.guardian } } let(:flag_id) { flag.id } let(:name) { "edited custom flag name" } @@ -24,6 +34,7 @@ RSpec.describe(Flags::UpdateFlag) do let(:applies_to) { ["Topic"] } let(:require_message) { true } let(:enabled) { false } + let(:auto_action_type) { true } context "when contract is invalid" do let(:name) { nil } @@ -72,6 +83,7 @@ RSpec.describe(Flags::UpdateFlag) do applies_to: ["Topic"], require_message: true, enabled: false, + auto_action_type: true, ) end