FEATURE: Site Setting to hide suspension reason on the public profile

This commit is contained in:
Robin Ward 2017-09-12 16:06:01 -04:00
parent d7c37d9369
commit 561fa7d0cd
8 changed files with 49 additions and 4 deletions

View File

@ -4,7 +4,12 @@
{{text-field value=duration maxlength="5" autofocus="autofocus"}} {{text-field value=duration maxlength="5" autofocus="autofocus"}}
{{i18n 'admin.user.suspend_duration_units'}}<br/> {{i18n 'admin.user.suspend_duration_units'}}<br/>
<br/> <br/>
{{{i18n 'admin.user.suspend_reason_label'}}}<br/> {{#if siteSettings.hide_suspension_reasons}}
{{{i18n 'admin.user.suspend_reason_hidden_label'}}}<br/>
{{else}}
{{{i18n 'admin.user.suspend_reason_label'}}}<br/>
{{/if}}
<br/> <br/>
{{text-field value=reason class="span8"}} {{text-field value=reason class="span8"}}
</form> </form>

View File

@ -84,8 +84,10 @@
{{#if model.isSuspended}} {{#if model.isSuspended}}
<div class='suspended'> <div class='suspended'>
{{d-icon "ban"}} {{d-icon "ban"}}
<b>{{i18n 'user.suspended_notice' date=model.suspendedTillDate}}</b><br/> <b>{{i18n 'user.suspended_notice' date=model.suspendedTillDate}}</b><br>
<b>{{i18n 'user.suspended_reason'}}</b> {{model.suspend_reason}} {{#if model.suspend_reason}}
<b>{{i18n 'user.suspended_reason'}}</b> {{model.suspend_reason}}
{{/if}}
</div> </div>
{{/if}} {{/if}}
{{#if isNotSuspendedOrIsStaff}} {{#if isNotSuspendedOrIsStaff}}

View File

@ -251,7 +251,7 @@ class UserSerializer < BasicUserSerializer
end end
def include_suspend_reason? def include_suspend_reason?
object.suspended? scope.can_see_suspension_reason?(object) && object.suspended?
end end
def include_suspended_till? def include_suspended_till?

View File

@ -3266,6 +3266,7 @@ en:
suspend_duration: "How long will the user be suspended for?" suspend_duration: "How long will the user be suspended for?"
suspend_duration_units: "(days)" suspend_duration_units: "(days)"
suspend_reason_label: "Why are you suspending? This text <b>will be visible to everyone</b> on this user's profile page, and will be shown to the user when they try to log in. Keep it short." suspend_reason_label: "Why are you suspending? This text <b>will be visible to everyone</b> on this user's profile page, and will be shown to the user when they try to log in. Keep it short."
suspend_reason_hidden_label: "Why are you suspending? This text will be shown to the user when they try to log in. Keep it short."
suspend_reason: "Reason" suspend_reason: "Reason"
suspended_by: "Suspended by" suspended_by: "Suspended by"
delete_all_posts: "Delete all posts" delete_all_posts: "Delete all posts"

View File

@ -1441,6 +1441,7 @@ en:
hide_user_profiles_from_public: "Disable user cards, user profiles and user directory for anonymous users." hide_user_profiles_from_public: "Disable user cards, user profiles and user directory for anonymous users."
hide_suspension_reasons: "Don't display suspension reasons publically on user profiles."
user_website_domains_whitelist: "User website will be verified against these domains. Pipe-delimited list." user_website_domains_whitelist: "User website will be verified against these domains. Pipe-delimited list."
allow_profile_backgrounds: "Allow users to upload profile backgrounds." allow_profile_backgrounds: "Allow users to upload profile backgrounds."

View File

@ -422,6 +422,9 @@ users:
user_website_domains_whitelist: user_website_domains_whitelist:
default: '' default: ''
type: list type: list
hide_suspension_reasons:
default: false
client: true
groups: groups:
enable_group_directory: enable_group_directory:

View File

@ -67,4 +67,9 @@ module UserGuardian
user && is_staff? user && is_staff?
end end
def can_see_suspension_reason?(user)
return true unless SiteSetting.hide_suspension_reasons?
user == @user || is_staff?
end
end end

View File

@ -2541,4 +2541,32 @@ describe Guardian do
end end
end end
end end
context "suspension reasons" do
let(:user) { Fabricate(:user) }
it "will be shown by default" do
expect(Guardian.new.can_see_suspension_reason?(user)).to eq(true)
end
context "with hide suspension reason enabled" do
let(:moderator) { Fabricate(:moderator) }
before do
SiteSetting.hide_suspension_reasons = true
end
it "will not be shown to anonymous users" do
expect(Guardian.new.can_see_suspension_reason?(user)).to eq(false)
end
it "users can see their own suspensions" do
expect(Guardian.new(user).can_see_suspension_reason?(user)).to eq(true)
end
it "staff can see suspensions" do
expect(Guardian.new(moderator).can_see_suspension_reason?(user)).to eq(true)
end
end
end
end end