1
0
mirror of https://github.com/meineerde/redmine.git synced 2025-10-17 17:01:01 +00:00

Refactor avatar helper method (#29824).

git-svn-id: https://svn.redmine.org/redmine/trunk@23907 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Marius Balteanu 2025-08-07 20:33:50 +00:00
parent 65f68c4c59
commit 1a5fb1325b

View File

@ -38,30 +38,9 @@ module AvatarsHelper
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
def avatar(user, options = {})
if Setting.gravatar_enabled?
options[:default] = Setting.gravatar_default
options[:class] = GravatarHelper::DEFAULT_OPTIONS[:class] + " " + options[:class] if options[:class]
email = nil
if user.respond_to?(:mail)
email = user.mail
options[:title] = user.name unless options[:title]
options[:initials] = user.initials if options[:default] == "initials" && user.initials.present?
elsif user.to_s =~ %r{<(.+?)>}
email = $1
end
if email.present?
gravatar(email.to_s.downcase, options) rescue nil
elsif user.is_a?(AnonymousUser)
anonymous_avatar(options)
elsif user.is_a?(Group)
group_avatar(options)
else
nil
end
gravatar_avatar_tag(user, options)
elsif user.respond_to?(:initials)
size = options.delete(:size) || GravatarHelper::DEFAULT_OPTIONS[:size]
css_class = "avatar-color-#{user.id % 8} avatar s#{size}"
css_class += " #{options[:class]}" if options[:class]
content_tag('span', user.initials, role: 'img', class: css_class)
initials_avatar_tag(user, options)
else
''
end
@ -75,8 +54,6 @@ module AvatarsHelper
end
end
private
def anonymous_avatar(options={})
image_tag 'anonymous.png', GravatarHelper::DEFAULT_OPTIONS.except(:default, :rating, :ssl).merge(options)
end
@ -84,4 +61,42 @@ module AvatarsHelper
def group_avatar(options={})
image_tag 'group.png', GravatarHelper::DEFAULT_OPTIONS.except(:default, :rating, :ssl).merge(options)
end
private
def gravatar_avatar_tag(user, options)
options[:default] = Setting.gravatar_default
options[:class] = [GravatarHelper::DEFAULT_OPTIONS[:class], options[:class]].compact.join(' ')
email = extract_email_from_user(user)
if user.respond_to?(:mail)
options[:title] ||= user.name
options[:initials] = user.initials if options[:default] == "initials" && user.initials.present?
end
if email.present?
gravatar(email.to_s.downcase, options) rescue nil
elsif user.is_a?(AnonymousUser)
anonymous_avatar(options)
elsif user.is_a?(Group)
group_avatar(options)
end
end
def initials_avatar_tag(user, options)
size = (options.delete(:size) || GravatarHelper::DEFAULT_OPTIONS[:size]).to_i
css_class = ["avatar-color-#{user.id % 8}", 'avatar', "s#{size}", options[:class]].compact.join(' ')
content_tag('span', user.initials, role: 'img', class: css_class, title: options[:title])
end
def extract_email_from_user(user)
if user.respond_to?(:mail)
user.mail
elsif user.to_s =~ %r{<(.+?)>}
$1
end
end
end