Project

General

Profile

Feature #42623 » 0001-Adds-Initials-to-the-list-of-default-gratavar-option.patch

Marius BĂLTEANU, 2025-04-29 22:09

View differences:

app/helpers/avatars_helper.rb
44 44
      if user.respond_to?(:mail)
45 45
        email = user.mail
46 46
        options[:title] = user.name unless options[:title]
47
        options[:initials] = user.initials if options[:default] == "initials"
47 48
      elsif user.to_s =~ %r{<(.+?)>}
48 49
        email = $1
49 50
      end
app/helpers/settings_helper.rb
244 244
     ['Mystery man', 'mm'],
245 245
     ['Retro', 'retro'],
246 246
     ['Robohash', 'robohash'],
247
     ['Wavatars', 'wavatar']]
247
     ['Wavatars', 'wavatar'],
248
     ['Initials', 'initials']]
248 249
  end
249 250
end
app/models/user.rb
28 28
  USER_FORMATS = {
29 29
    :firstname_lastname => {
30 30
      :string => '#{firstname} #{lastname}',
31
      :initials => '#{firstname.to_s.first}#{lastname.to_s.first}',
31 32
      :order => %w(firstname lastname id),
32 33
      :setting_order => 1
33 34
    },
34 35
    :firstname_lastinitial => {
35 36
      :string => '#{firstname} #{lastname.to_s.chars.first}.',
37
      :initials => '#{firstname.to_s.first}#{lastname.to_s.first}',
36 38
      :order => %w(firstname lastname id),
37 39
      :setting_order => 2
38 40
    },
39 41
    :firstinitial_lastname => {
40 42
      :string => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\')} #{lastname}',
43
      :initials => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\').first}#{lastname.to_s.first}',
41 44
      :order => %w(firstname lastname id),
42 45
      :setting_order => 2
43 46
    },
44 47
    :firstname => {
45 48
      :string => '#{firstname}',
49
      :initials => '#{firstname.to_s.first(2)}',
46 50
      :order => %w(firstname id),
47 51
      :setting_order => 3
48 52
    },
49 53
    :lastname_firstname => {
50 54
      :string => '#{lastname} #{firstname}',
55
      :initials => '#{lastname.to_s.first} #{firstname.to_s.first}',
51 56
      :order => %w(lastname firstname id),
52 57
      :setting_order => 4
53 58
    },
54 59
    :lastnamefirstname => {
55 60
      :string => '#{lastname}#{firstname}',
61
      :initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
56 62
      :order => %w(lastname firstname id),
57 63
      :setting_order => 5
58 64
    },
59 65
    :lastname_comma_firstname => {
60 66
      :string => '#{lastname}, #{firstname}',
67
      :initials => '#{lastname.to_s.first}#{firstname.to_s.first}',
61 68
      :order => %w(lastname firstname id),
62 69
      :setting_order => 6
63 70
    },
64 71
    :lastname => {
65 72
      :string => '#{lastname}',
73
      :initials => '#{lastname.to_s.first(2)}',
66 74
      :order => %w(lastname id),
67 75
      :setting_order => 7
68 76
    },
69 77
    :username => {
70 78
      :string => '#{login}',
79
      :initials => '#{login.to_s.first(2)}',
71 80
      :order => %w(login id),
72 81
      :setting_order => 8
73 82
    },
......
274 283
    end
275 284
  end
276 285

  
286
  # Return user's initials based on name format
287
  def initials(formatter = nil)
288
    f = self.class.name_formatter(formatter)
289
    format = f[:initials] || USER_FORMATS[:firstname_lastname][:initials]
290
    initials = eval('"' + format + '"')
291
    initials.upcase
292
  end
293

  
277 294
  def registered?
278 295
    self.status == STATUS_REGISTERED
279 296
  end
lib/plugins/gravatar/lib/gravatar.rb
69 69
      options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
70 70
      gravatar_api_url(email_hash).tap do |url|
71 71
        opts = []
72
        [:rating, :size, :default].each do |opt|
72
        [:rating, :size, :default, :initials].each do |opt|
73 73
          unless options[opt].nil?
74 74
            value = h(options[opt])
75 75
            opts << [opt, value].join('=')
test/helpers/avatars_helper_test.rb
68 68
    assert_include 'class="gravatar picture"', avatar('jsmith <jsmith@somenet.foo>', :class => 'picture')
69 69
  end
70 70

  
71
  def test_avatar_with_initials
72
    with_settings :gravatar_default => 'initials' do
73
      assert_include 'initials="RA"', avatar(User.find(1))
74
    end
75
  end
76

  
77
  def test_avatar_should_reject_initials_if_default_is_not_initials
78
    with_settings :gravatar_default => 'identicon' do
79
      assert_not_include 'initials="RA"', avatar(User.find(1))
80
    end
81
  end
82

  
71 83
  def test_avatar_disabled
72 84
    with_settings :gravatar_enabled => '0' do
73 85
      assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
test/unit/user_test.rb
589 589
    end
590 590
  end
591 591

  
592
  def test_initials_format
593
    assert_equal 'JS', @jsmith.initials(:firstname_lastinitial)
594
    assert_equal 'SJ', @jsmith.initials(:lastname_comma_firstname)
595
    assert_equal 'JS', @jsmith.initials(:firstinitial_lastname)
596
    assert_equal 'JL', User.new(:firstname => 'Jean-Philippe', :lastname => 'Lang').initials(:firstinitial_lastname)
597
    assert_equal 'JS', @jsmith.initials(:undefined_format)
598
  end
599

  
600
  def test_initials_should_use_setting_as_default_format
601
    with_settings :user_format => :firstname_lastname do
602
      assert_equal 'JS', @jsmith.reload.initials
603
    end
604
    with_settings :user_format => :username do
605
      assert_equal 'JS', @jsmith.reload.initials
606
    end
607
    with_settings :user_format => :lastname do
608
      assert_equal 'SM', @jsmith.reload.initials
609
    end
610
  end
611

  
592 612
  def test_lastname_should_accept_255_characters
593 613
    u = User.first
594 614
    u.lastname = 'a' * 255
(2-2/2)