mirror of
https://github.com/redmine/redmine.git
synced 2025-11-13 08:46: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)
|
if user.respond_to?(:mail)
|
||||||
email = user.mail
|
email = user.mail
|
||||||
options[:title] = user.name unless options[:title]
|
options[:title] = user.name unless options[:title]
|
||||||
|
options[:initials] = user.initials if options[:default] == "initials"
|
||||||
elsif user.to_s =~ %r{<(.+?)>}
|
elsif user.to_s =~ %r{<(.+?)>}
|
||||||
email = $1
|
email = $1
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -244,6 +244,7 @@ module SettingsHelper
|
|||||||
['Mystery man', 'mm'],
|
['Mystery man', 'mm'],
|
||||||
['Retro', 'retro'],
|
['Retro', 'retro'],
|
||||||
['Robohash', 'robohash'],
|
['Robohash', 'robohash'],
|
||||||
['Wavatars', 'wavatar']]
|
['Wavatars', 'wavatar'],
|
||||||
|
['Initials', 'initials']]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -28,46 +28,55 @@ class User < Principal
|
|||||||
USER_FORMATS = {
|
USER_FORMATS = {
|
||||||
:firstname_lastname => {
|
:firstname_lastname => {
|
||||||
:string => '#{firstname} #{lastname}',
|
:string => '#{firstname} #{lastname}',
|
||||||
|
:initials => '#{firstname.to_s.first}#{lastname.to_s.first}',
|
||||||
:order => %w(firstname lastname id),
|
:order => %w(firstname lastname id),
|
||||||
:setting_order => 1
|
:setting_order => 1
|
||||||
},
|
},
|
||||||
:firstname_lastinitial => {
|
:firstname_lastinitial => {
|
||||||
:string => '#{firstname} #{lastname.to_s.chars.first}.',
|
:string => '#{firstname} #{lastname.to_s.chars.first}.',
|
||||||
|
:initials => '#{firstname.to_s.first}#{lastname.to_s.first}',
|
||||||
:order => %w(firstname lastname id),
|
:order => %w(firstname lastname id),
|
||||||
:setting_order => 2
|
:setting_order => 2
|
||||||
},
|
},
|
||||||
:firstinitial_lastname => {
|
:firstinitial_lastname => {
|
||||||
:string => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\')} #{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),
|
:order => %w(firstname lastname id),
|
||||||
:setting_order => 2
|
:setting_order => 2
|
||||||
},
|
},
|
||||||
:firstname => {
|
:firstname => {
|
||||||
:string => '#{firstname}',
|
:string => '#{firstname}',
|
||||||
|
:initials => '#{firstname.to_s.first(2)}',
|
||||||
:order => %w(firstname id),
|
:order => %w(firstname id),
|
||||||
:setting_order => 3
|
:setting_order => 3
|
||||||
},
|
},
|
||||||
:lastname_firstname => {
|
:lastname_firstname => {
|
||||||
:string => '#{lastname} #{firstname}',
|
:string => '#{lastname} #{firstname}',
|
||||||
|
:initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
|
||||||
:order => %w(lastname firstname id),
|
:order => %w(lastname firstname id),
|
||||||
:setting_order => 4
|
:setting_order => 4
|
||||||
},
|
},
|
||||||
:lastnamefirstname => {
|
:lastnamefirstname => {
|
||||||
:string => '#{lastname}#{firstname}',
|
:string => '#{lastname}#{firstname}',
|
||||||
|
:initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
|
||||||
:order => %w(lastname firstname id),
|
:order => %w(lastname firstname id),
|
||||||
:setting_order => 5
|
:setting_order => 5
|
||||||
},
|
},
|
||||||
:lastname_comma_firstname => {
|
:lastname_comma_firstname => {
|
||||||
:string => '#{lastname}, #{firstname}',
|
:string => '#{lastname}, #{firstname}',
|
||||||
|
:initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
|
||||||
:order => %w(lastname firstname id),
|
:order => %w(lastname firstname id),
|
||||||
:setting_order => 6
|
:setting_order => 6
|
||||||
},
|
},
|
||||||
:lastname => {
|
:lastname => {
|
||||||
:string => '#{lastname}',
|
:string => '#{lastname}',
|
||||||
|
:initials => '#{lastname.to_s.first(2)}',
|
||||||
:order => %w(lastname id),
|
:order => %w(lastname id),
|
||||||
:setting_order => 7
|
:setting_order => 7
|
||||||
},
|
},
|
||||||
:username => {
|
:username => {
|
||||||
:string => '#{login}',
|
:string => '#{login}',
|
||||||
|
:initials => '#{login.to_s.first(2)}',
|
||||||
:order => %w(login id),
|
:order => %w(login id),
|
||||||
:setting_order => 8
|
:setting_order => 8
|
||||||
},
|
},
|
||||||
@@ -275,6 +284,14 @@ class User < Principal
|
|||||||
end
|
end
|
||||||
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?
|
def registered?
|
||||||
self.status == STATUS_REGISTERED
|
self.status == STATUS_REGISTERED
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -22,7 +22,12 @@
|
|||||||
<p><%= setting_check_box :gravatar_enabled, :data => {:enables => '#settings_gravatar_default'} %>
|
<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>
|
<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>
|
<p><%= setting_check_box :thumbnails_enabled, :data => {:enables => '#settings_thumbnails_size'} %></p>
|
||||||
|
|
||||||
@@ -35,3 +40,18 @@
|
|||||||
|
|
||||||
<%= submit_tag l(:button_save) %>
|
<%= submit_tag l(:button_save) %>
|
||||||
<% end %>
|
<% 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_no_subject: no subject
|
||||||
text_allowed_queries_to_select: Public (to any users) queries only selectable
|
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_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_manager: Manager
|
||||||
default_role_developer: Developer
|
default_role_developer: Developer
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ module GravatarHelper
|
|||||||
options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
|
options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
|
||||||
gravatar_api_url(email_hash).tap do |url|
|
gravatar_api_url(email_hash).tap do |url|
|
||||||
opts = []
|
opts = []
|
||||||
[:rating, :size, :default].each do |opt|
|
[:rating, :size, :default, :initials].each do |opt|
|
||||||
unless options[opt].nil?
|
unless options[opt].nil?
|
||||||
value = h(options[opt])
|
value = h(options[opt])
|
||||||
opts << [opt, value].join('=')
|
opts << [opt, value].join('=')
|
||||||
|
|||||||
@@ -68,6 +68,18 @@ class AvatarsHelperTest < Redmine::HelperTest
|
|||||||
assert_include 'class="gravatar picture"', avatar('jsmith <jsmith@somenet.foo>', :class => 'picture')
|
assert_include 'class="gravatar picture"', avatar('jsmith <jsmith@somenet.foo>', :class => 'picture')
|
||||||
end
|
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
|
def test_avatar_disabled
|
||||||
with_settings :gravatar_enabled => '0' do
|
with_settings :gravatar_enabled => '0' do
|
||||||
assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
|
assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
|
||||||
|
|||||||
@@ -589,6 +589,27 @@ class UserTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
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
|
def test_lastname_should_accept_255_characters
|
||||||
u = User.first
|
u = User.first
|
||||||
u.lastname = 'a' * 255
|
u.lastname = 'a' * 255
|
||||||
|
|||||||
Reference in New Issue
Block a user