mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
UX: The Site's logo is the selected option when changing the system's user avatar. (#12861)
If the "use_site_small_logo_as_system_avatar" setting is enabled, the site's small logo is displayed as the selected option by the avatar-selector. Choosing a different avatar disables the setting.
This commit is contained in:
parent
d3c0b6bfe1
commit
cdbdb04909
@ -11,6 +11,11 @@ export default Controller.extend(ModalFunctionality, {
|
|||||||
gravatarBaseUrl: setting("gravatar_base_url"),
|
gravatarBaseUrl: setting("gravatar_base_url"),
|
||||||
gravatarLoginUrl: setting("gravatar_login_url"),
|
gravatarLoginUrl: setting("gravatar_login_url"),
|
||||||
|
|
||||||
|
@discourseComputed("selected", "uploading")
|
||||||
|
submitDisabled(selected, uploading) {
|
||||||
|
return selected === "logo" || uploading;
|
||||||
|
},
|
||||||
|
|
||||||
@discourseComputed(
|
@discourseComputed(
|
||||||
"siteSettings.selectable_avatars_enabled",
|
"siteSettings.selectable_avatars_enabled",
|
||||||
"siteSettings.selectable_avatars"
|
"siteSettings.selectable_avatars"
|
||||||
@ -22,12 +27,20 @@ export default Controller.extend(ModalFunctionality, {
|
|||||||
},
|
},
|
||||||
|
|
||||||
@discourseComputed(
|
@discourseComputed(
|
||||||
|
"user.use_logo_small_as_avatar",
|
||||||
"user.avatar_template",
|
"user.avatar_template",
|
||||||
"user.system_avatar_template",
|
"user.system_avatar_template",
|
||||||
"user.gravatar_avatar_template"
|
"user.gravatar_avatar_template"
|
||||||
)
|
)
|
||||||
selected(avatarTemplate, systemAvatarTemplate, gravatarAvatarTemplate) {
|
selected(
|
||||||
if (avatarTemplate === systemAvatarTemplate) {
|
useLogo,
|
||||||
|
avatarTemplate,
|
||||||
|
systemAvatarTemplate,
|
||||||
|
gravatarAvatarTemplate
|
||||||
|
) {
|
||||||
|
if (useLogo) {
|
||||||
|
return "logo";
|
||||||
|
} else if (avatarTemplate === systemAvatarTemplate) {
|
||||||
return "system";
|
return "system";
|
||||||
} else if (avatarTemplate === gravatarAvatarTemplate) {
|
} else if (avatarTemplate === gravatarAvatarTemplate) {
|
||||||
return "gravatar";
|
return "gravatar";
|
||||||
|
@ -8,6 +8,12 @@
|
|||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
{{#if user.use_logo_small_as_avatar}}
|
||||||
|
<div class="avatar-choice">
|
||||||
|
{{radio-button id="logo-small" name="logo" value="logo" selection=selected}}
|
||||||
|
<label class="radio" for="logo-small">{{bound-avatar-template siteSettings.site_logo_small_url "large"}} {{html-safe (i18n "user.change_avatar.logo_small")}}</label>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
<div class="avatar-choice">
|
<div class="avatar-choice">
|
||||||
{{radio-button id="system-avatar" name="avatar" value="system" selection=selected}}
|
{{radio-button id="system-avatar" name="avatar" value="system" selection=selected}}
|
||||||
<label class="radio" for="system-avatar">{{bound-avatar-template user.system_avatar_template "large"}} {{html-safe (i18n "user.change_avatar.letter_based")}}</label>
|
<label class="radio" for="system-avatar">{{bound-avatar-template user.system_avatar_template "large"}} {{html-safe (i18n "user.change_avatar.letter_based")}}</label>
|
||||||
@ -28,7 +34,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="avatar-choice">
|
<div class="avatar-choice">
|
||||||
{{radio-button id="uploaded-avatar" name="avatar" value="uploaded" selection=selected}}
|
{{radio-button id="uploaded-avatar" name="avatar" value="custom" selection=selected}}
|
||||||
<label class="radio" for="uploaded-avatar">
|
<label class="radio" for="uploaded-avatar">
|
||||||
{{#if user.custom_avatar_template}}
|
{{#if user.custom_avatar_template}}
|
||||||
{{bound-avatar-template user.custom_avatar_template "large"}}
|
{{bound-avatar-template user.custom_avatar_template "large"}}
|
||||||
@ -50,7 +56,7 @@
|
|||||||
|
|
||||||
{{#unless siteSettings.selectable_avatars_enabled}}
|
{{#unless siteSettings.selectable_avatars_enabled}}
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
{{d-button action=(action "saveAvatarSelection") class="btn-primary" disabled=uploading label="save"}}
|
{{d-button action=(action "saveAvatarSelection") class="btn-primary" disabled=submitDisabled label="save"}}
|
||||||
{{d-modal-cancel close=(route-action "closeModal")}}
|
{{d-modal-cancel close=(route-action "closeModal")}}
|
||||||
</div>
|
</div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
@ -1129,11 +1129,9 @@ class UsersController < ApplicationController
|
|||||||
|
|
||||||
if type.blank? || type == 'system'
|
if type.blank? || type == 'system'
|
||||||
upload_id = nil
|
upload_id = nil
|
||||||
|
elsif !SiteSetting.allow_uploaded_avatars
|
||||||
|
return render json: failed_json, status: 422
|
||||||
else
|
else
|
||||||
if !SiteSetting.allow_uploaded_avatars
|
|
||||||
return render json: failed_json, status: 422
|
|
||||||
end
|
|
||||||
|
|
||||||
upload_id = params[:upload_id]
|
upload_id = params[:upload_id]
|
||||||
upload = Upload.find_by(id: upload_id)
|
upload = Upload.find_by(id: upload_id)
|
||||||
|
|
||||||
@ -1153,6 +1151,10 @@ class UsersController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if user.is_system_user?
|
||||||
|
SiteSetting.use_site_small_logo_as_system_avatar = false
|
||||||
|
end
|
||||||
|
|
||||||
user.uploaded_avatar_id = upload_id
|
user.uploaded_avatar_id = upload_id
|
||||||
user.save!
|
user.save!
|
||||||
user.user_avatar.save!
|
user.user_avatar.save!
|
||||||
@ -1187,6 +1189,11 @@ class UsersController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
user.uploaded_avatar_id = upload.id
|
user.uploaded_avatar_id = upload.id
|
||||||
|
|
||||||
|
if user.is_system_user?
|
||||||
|
SiteSetting.use_site_small_logo_as_system_avatar = false
|
||||||
|
end
|
||||||
|
|
||||||
user.save!
|
user.save!
|
||||||
|
|
||||||
avatar = user.user_avatar || user.create_user_avatar
|
avatar = user.user_avatar || user.create_user_avatar
|
||||||
|
@ -872,8 +872,12 @@ class User < ActiveRecord::Base
|
|||||||
Digest::MD5.hexdigest(username)[0...15].to_i(16) % length
|
Digest::MD5.hexdigest(username)[0...15].to_i(16) % length
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def is_system_user?
|
||||||
|
id == Discourse::SYSTEM_USER_ID
|
||||||
|
end
|
||||||
|
|
||||||
def avatar_template
|
def avatar_template
|
||||||
use_small_logo = id == Discourse::SYSTEM_USER_ID &&
|
use_small_logo = is_system_user? &&
|
||||||
SiteSetting.logo_small && SiteSetting.use_site_small_logo_as_system_avatar
|
SiteSetting.logo_small && SiteSetting.use_site_small_logo_as_system_avatar
|
||||||
|
|
||||||
if use_small_logo
|
if use_small_logo
|
||||||
|
@ -59,7 +59,8 @@ class UserSerializer < UserCardSerializer
|
|||||||
:can_change_website,
|
:can_change_website,
|
||||||
:user_api_keys,
|
:user_api_keys,
|
||||||
:user_auth_tokens,
|
:user_auth_tokens,
|
||||||
:user_notification_schedule
|
:user_notification_schedule,
|
||||||
|
:use_logo_small_as_avatar
|
||||||
|
|
||||||
untrusted_attributes :bio_raw,
|
untrusted_attributes :bio_raw,
|
||||||
:bio_cooked,
|
:bio_cooked,
|
||||||
@ -309,6 +310,10 @@ class UserSerializer < UserCardSerializer
|
|||||||
object.profile_background_upload&.url
|
object.profile_background_upload&.url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def use_logo_small_as_avatar
|
||||||
|
object.is_system_user? && SiteSetting.logo_small && SiteSetting.use_site_small_logo_as_system_avatar
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def custom_field_keys
|
def custom_field_keys
|
||||||
|
@ -34,6 +34,7 @@ class WebHookUserSerializer < UserSerializer
|
|||||||
group_users
|
group_users
|
||||||
user_auth_tokens
|
user_auth_tokens
|
||||||
user_auth_token_logs
|
user_auth_token_logs
|
||||||
|
use_logo_small_as_avatar
|
||||||
}.each do |attr|
|
}.each do |attr|
|
||||||
define_method("include_#{attr}?") do
|
define_method("include_#{attr}?") do
|
||||||
false
|
false
|
||||||
|
@ -1268,6 +1268,7 @@ en:
|
|||||||
uploaded_avatar_empty: "Add a custom picture"
|
uploaded_avatar_empty: "Add a custom picture"
|
||||||
upload_title: "Upload your picture"
|
upload_title: "Upload your picture"
|
||||||
image_is_not_a_square: "Warning: we've cropped your image; width and height were not equal."
|
image_is_not_a_square: "Warning: we've cropped your image; width and height were not equal."
|
||||||
|
logo_small: "Site's small logo. Used by default."
|
||||||
|
|
||||||
change_profile_background:
|
change_profile_background:
|
||||||
title: "Profile Header"
|
title: "Profile Header"
|
||||||
|
@ -2393,6 +2393,20 @@ describe UsersController do
|
|||||||
expect(user.reload.uploaded_avatar_id).to eq(nil)
|
expect(user.reload.uploaded_avatar_id).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'disables the use_site_small_logo_as_system_avatar setting when picking an avatar for the system user' do
|
||||||
|
system_user = Discourse.system_user
|
||||||
|
SiteSetting.use_site_small_logo_as_system_avatar = true
|
||||||
|
another_upload = Fabricate(:upload, user: system_user)
|
||||||
|
sign_in(system_user)
|
||||||
|
|
||||||
|
put "/u/#{system_user.username}/preferences/avatar/pick.json", params: {
|
||||||
|
upload_id: another_upload.id, type: "uploaded"
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
expect(SiteSetting.use_site_small_logo_as_system_avatar).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
it 'can successfully pick a gravatar' do
|
it 'can successfully pick a gravatar' do
|
||||||
|
|
||||||
user.user_avatar.update_columns(gravatar_upload_id: upload.id)
|
user.user_avatar.update_columns(gravatar_upload_id: upload.id)
|
||||||
@ -2494,6 +2508,19 @@ describe UsersController do
|
|||||||
expect(user.reload.uploaded_avatar_id).to eq(avatar1.id)
|
expect(user.reload.uploaded_avatar_id).to eq(avatar1.id)
|
||||||
expect(user.user_avatar.reload.custom_upload_id).to eq(avatar1.id)
|
expect(user.user_avatar.reload.custom_upload_id).to eq(avatar1.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'disables the use_site_small_logo_as_system_avatar setting when picking an avatar for the system user' do
|
||||||
|
system_user = Discourse.system_user
|
||||||
|
SiteSetting.use_site_small_logo_as_system_avatar = true
|
||||||
|
sign_in(system_user)
|
||||||
|
|
||||||
|
put "/u/#{system_user.username}/preferences/avatar/select.json", params: {
|
||||||
|
url: UrlHelper.cook_url(avatar1.url)
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
expect(SiteSetting.use_site_small_logo_as_system_avatar).to eq(false)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user