2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-07 12:02:53 +08:00

FIX: default_avatars wasn't being used for some server side templates

This commit is contained in:
Robin Ward 2015-06-26 13:37:50 -04:00
parent 9408d5891d
commit b52e5d1536
4 changed files with 20 additions and 19 deletions

View file

@ -4,21 +4,13 @@ var safe = Handlebars.SafeString;
var registerUnbound = require('discourse/helpers/register-unbound', null, null, true).default; var registerUnbound = require('discourse/helpers/register-unbound', null, null, true).default;
var avatarTemplate = require('discourse/lib/avatar-template', null, null, true).default; var avatarTemplate = require('discourse/lib/avatar-template', null, null, true).default;
/**
Bound avatar helper.
@method bound-avatar
@for Handlebars
**/
Em.Handlebars.helper('bound-avatar', function(user, size, uploadId) { Em.Handlebars.helper('bound-avatar', function(user, size, uploadId) {
if (Em.isEmpty(user)) { if (Em.isEmpty(user)) {
return new safe("<div class='avatar-placeholder'></div>"); return new safe("<div class='avatar-placeholder'></div>");
} }
var username = Em.get(user, 'username'); var username = Em.get(user, 'username');
if (arguments.length < 4) { uploadId = Em.get(user, 'uploaded_avatar_id'); } if (arguments.length < 4) { uploadId = Em.get(user, 'uploaded_avatar_id'); }
var avatar = Em.get(user, 'avatar_template') || avatarTemplate(username, uploadId); var avatar = Em.get(user, 'avatar_template') || avatarTemplate(username, uploadId);
return new safe(Discourse.Utilities.avatarImg({ size: size, avatarTemplate: avatar })); return new safe(Discourse.Utilities.avatarImg({ size: size, avatarTemplate: avatar }));

View file

@ -429,8 +429,23 @@ class User < ActiveRecord::Base
UrlHelper.schemaless UrlHelper.absolute avatar_template UrlHelper.schemaless UrlHelper.absolute avatar_template
end end
def self.default_template(username)
if SiteSetting.default_avatars.present?
split_avatars = SiteSetting.default_avatars.split("\n")
if split_avatars.present?
hash = username.each_char.reduce(0) do |result, char|
[((result << 5) - result) + char.ord].pack('L').unpack('l').first
end
avatar_template = split_avatars[hash.abs % split_avatars.size]
end
else
"#{Discourse.base_uri}/letter_avatar/#{username.downcase}/{size}/#{LetterAvatar.version}.png"
end
end
def self.avatar_template(username,uploaded_avatar_id) def self.avatar_template(username,uploaded_avatar_id)
return letter_avatar_template(username) if !uploaded_avatar_id return default_template(username) if !uploaded_avatar_id
username ||= "" username ||= ""
hostname = RailsMultisite::ConnectionManagement.current_hostname hostname = RailsMultisite::ConnectionManagement.current_hostname
UserAvatar.local_avatar_template(hostname, username.downcase, uploaded_avatar_id) UserAvatar.local_avatar_template(hostname, username.downcase, uploaded_avatar_id)

View file

@ -25,15 +25,8 @@ module PrettyText
return "" unless user.present? return "" unless user.present?
# TODO: Add support for ES6 and call `avatar-template` directly # TODO: Add support for ES6 and call `avatar-template` directly
if !user.uploaded_avatar_id && SiteSetting.default_avatars.present? if !user.uploaded_avatar_id
split_avatars = SiteSetting.default_avatars.split("\n") avatar_template = User.default_template(username)
if split_avatars.present?
hash = username.each_char.reduce(0) do |result, char|
[((result << 5) - result) + char.ord].pack('L').unpack('l').first
end
avatar_template = split_avatars[hash.abs % split_avatars.size]
end
else else
avatar_template = user.avatar_template avatar_template = user.avatar_template
end end

View file

@ -9,10 +9,11 @@ describe PrettyText do
describe "Cooking" do describe "Cooking" do
describe "with avatar" do describe "with avatar" do
let(:default_avatar) { "//test.localhost/uploads/default/avatars/42d/57c/46ce7ee487/{size}.png" }
before(:each) do before(:each) do
eviltrout = User.new eviltrout = User.new
eviltrout.stubs(:avatar_template).returns("//test.localhost/uploads/default/avatars/42d/57c/46ce7ee487/{size}.png") User.stubs(:default_template).returns(default_avatar)
User.expects(:find_by).with(username_lower: "eviltrout").returns(eviltrout) User.expects(:find_by).with(username_lower: "eviltrout").returns(eviltrout)
end end