mirror of
https://github.com/redmine/redmine.git
synced 2025-11-13 00:36:01 +01:00
Adds Initials to the list of default gratavar options (#42623).
git-svn-id: https://svn.redmine.org/redmine/trunk@23767 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -44,6 +44,7 @@ module AvatarsHelper
|
||||
if user.respond_to?(:mail)
|
||||
email = user.mail
|
||||
options[:title] = user.name unless options[:title]
|
||||
options[:initials] = user.initials if options[:default] == "initials"
|
||||
elsif user.to_s =~ %r{<(.+?)>}
|
||||
email = $1
|
||||
end
|
||||
|
||||
@@ -244,6 +244,7 @@ module SettingsHelper
|
||||
['Mystery man', 'mm'],
|
||||
['Retro', 'retro'],
|
||||
['Robohash', 'robohash'],
|
||||
['Wavatars', 'wavatar']]
|
||||
['Wavatars', 'wavatar'],
|
||||
['Initials', 'initials']]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,46 +28,55 @@ class User < Principal
|
||||
USER_FORMATS = {
|
||||
:firstname_lastname => {
|
||||
:string => '#{firstname} #{lastname}',
|
||||
:initials => '#{firstname.to_s.first}#{lastname.to_s.first}',
|
||||
:order => %w(firstname lastname id),
|
||||
:setting_order => 1
|
||||
},
|
||||
:firstname_lastinitial => {
|
||||
:string => '#{firstname} #{lastname.to_s.chars.first}.',
|
||||
:initials => '#{firstname.to_s.first}#{lastname.to_s.first}',
|
||||
:order => %w(firstname lastname id),
|
||||
:setting_order => 2
|
||||
},
|
||||
:firstinitial_lastname => {
|
||||
:string => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\')} #{lastname}',
|
||||
:initials => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\').first}#{lastname.to_s.first}',
|
||||
:order => %w(firstname lastname id),
|
||||
:setting_order => 2
|
||||
},
|
||||
:firstname => {
|
||||
:string => '#{firstname}',
|
||||
:initials => '#{firstname.to_s.first(2)}',
|
||||
:order => %w(firstname id),
|
||||
:setting_order => 3
|
||||
},
|
||||
:lastname_firstname => {
|
||||
:string => '#{lastname} #{firstname}',
|
||||
:initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
|
||||
:order => %w(lastname firstname id),
|
||||
:setting_order => 4
|
||||
},
|
||||
:lastnamefirstname => {
|
||||
:string => '#{lastname}#{firstname}',
|
||||
:initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
|
||||
:order => %w(lastname firstname id),
|
||||
:setting_order => 5
|
||||
},
|
||||
:lastname_comma_firstname => {
|
||||
:string => '#{lastname}, #{firstname}',
|
||||
:initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
|
||||
:order => %w(lastname firstname id),
|
||||
:setting_order => 6
|
||||
},
|
||||
:lastname => {
|
||||
:string => '#{lastname}',
|
||||
:initials => '#{lastname.to_s.first(2)}',
|
||||
:order => %w(lastname id),
|
||||
:setting_order => 7
|
||||
},
|
||||
:username => {
|
||||
:string => '#{login}',
|
||||
:initials => '#{login.to_s.first(2)}',
|
||||
:order => %w(login id),
|
||||
:setting_order => 8
|
||||
},
|
||||
@@ -275,6 +284,14 @@ class User < Principal
|
||||
end
|
||||
end
|
||||
|
||||
# Return user's initials based on name format
|
||||
def initials(formatter = nil)
|
||||
f = self.class.name_formatter(formatter)
|
||||
format = f[:initials] || USER_FORMATS[:firstname_lastname][:initials]
|
||||
initials = eval('"' + format + '"')
|
||||
initials.upcase
|
||||
end
|
||||
|
||||
def registered?
|
||||
self.status == STATUS_REGISTERED
|
||||
end
|
||||
|
||||
@@ -22,7 +22,12 @@
|
||||
<p><%= setting_check_box :gravatar_enabled, :data => {:enables => '#settings_gravatar_default'} %>
|
||||
<em class="info"><%= t(:text_avatar_server_config_html, :url => Redmine::Configuration['avatar_server_url']) %></em></p>
|
||||
|
||||
<p><%= setting_select :gravatar_default, gravatar_default_setting_options, :blank => :label_none %></p>
|
||||
<p>
|
||||
<%= setting_select :gravatar_default, gravatar_default_setting_options, :blank => :label_none %>
|
||||
<em class="<%= Setting.gravatar_default == "initials" ? "info" : "hidden" %>">
|
||||
<%= t(:text_setting_gravatar_default_initials_html) %>
|
||||
</em>
|
||||
</p>
|
||||
|
||||
<p><%= setting_check_box :thumbnails_enabled, :data => {:enables => '#settings_thumbnails_size'} %></p>
|
||||
|
||||
@@ -35,3 +40,18 @@
|
||||
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<% end %>
|
||||
|
||||
<%= javascript_tag do %>
|
||||
$('#settings_gravatar_default').on('change', function(e){
|
||||
const gravatar_default = e.target.value;
|
||||
const em = e.target.parentElement.getElementsByTagName('em')[0];
|
||||
|
||||
if (gravatar_default === 'initials') {
|
||||
em.classList.remove('hidden');
|
||||
em.classList.add('info');
|
||||
} else {
|
||||
em.classList.add('hidden');
|
||||
em.classList.remove('info');
|
||||
}
|
||||
});
|
||||
<% end %>
|
||||
@@ -1342,6 +1342,7 @@ en:
|
||||
text_no_subject: no subject
|
||||
text_allowed_queries_to_select: Public (to any users) queries only selectable
|
||||
text_setting_config_change: You can configure the behaviour in config/configuration.yml. Please restart the application after editing it.
|
||||
text_setting_gravatar_default_initials_html: Users' initials are sent to <a href="https://www.gravatar.com">https://www.gravatar.com</a> to generate their avatars.
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developer: Developer
|
||||
|
||||
@@ -69,7 +69,7 @@ module GravatarHelper
|
||||
options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
|
||||
gravatar_api_url(email_hash).tap do |url|
|
||||
opts = []
|
||||
[:rating, :size, :default].each do |opt|
|
||||
[:rating, :size, :default, :initials].each do |opt|
|
||||
unless options[opt].nil?
|
||||
value = h(options[opt])
|
||||
opts << [opt, value].join('=')
|
||||
|
||||
@@ -68,6 +68,18 @@ class AvatarsHelperTest < Redmine::HelperTest
|
||||
assert_include 'class="gravatar picture"', avatar('jsmith <jsmith@somenet.foo>', :class => 'picture')
|
||||
end
|
||||
|
||||
def test_avatar_with_initials
|
||||
with_settings :gravatar_default => 'initials' do
|
||||
assert_include 'initials="RA"', avatar(User.find(1))
|
||||
end
|
||||
end
|
||||
|
||||
def test_avatar_should_reject_initials_if_default_is_not_initials
|
||||
with_settings :gravatar_default => 'identicon' do
|
||||
assert_not_include 'initials="RA"', avatar(User.find(1))
|
||||
end
|
||||
end
|
||||
|
||||
def test_avatar_disabled
|
||||
with_settings :gravatar_enabled => '0' do
|
||||
assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
|
||||
|
||||
@@ -589,6 +589,27 @@ class UserTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_initials_format
|
||||
assert_equal 'JS', @jsmith.initials(:firstname_lastinitial)
|
||||
assert_equal 'SJ', @jsmith.initials(:lastname_comma_firstname)
|
||||
assert_equal 'SJ', @jsmith.initials(:lastname_firstname)
|
||||
assert_equal 'JS', @jsmith.initials(:firstinitial_lastname)
|
||||
assert_equal 'JL', User.new(:firstname => 'Jean-Philippe', :lastname => 'Lang').initials(:firstinitial_lastname)
|
||||
assert_equal 'JS', @jsmith.initials(:undefined_format)
|
||||
end
|
||||
|
||||
def test_initials_should_use_setting_as_default_format
|
||||
with_settings :user_format => :firstname_lastname do
|
||||
assert_equal 'JS', @jsmith.reload.initials
|
||||
end
|
||||
with_settings :user_format => :username do
|
||||
assert_equal 'JS', @jsmith.reload.initials
|
||||
end
|
||||
with_settings :user_format => :lastname do
|
||||
assert_equal 'SM', @jsmith.reload.initials
|
||||
end
|
||||
end
|
||||
|
||||
def test_lastname_should_accept_255_characters
|
||||
u = User.first
|
||||
u.lastname = 'a' * 255
|
||||
|
||||
Reference in New Issue
Block a user