Patch #7664 » add-gravatars-like-themes.patch
| app/controllers/settings_controller.rb | ||
|---|---|---|
| 46 | 46 |
@guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank?
|
| 47 | 47 |
|
| 48 | 48 |
Redmine::Themes.rescan |
| 49 |
Redmine::Gravatars.rescan |
|
| 49 | 50 |
end |
| 50 | 51 | |
| 51 | 52 |
def plugin |
| app/helpers/application_helper.rb | ||
|---|---|---|
| 882 | 882 |
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>') |
| 883 | 883 |
def avatar(user, options = { })
|
| 884 | 884 |
if Setting.gravatar_enabled? |
| 885 |
options.merge!({:ssl => (defined?(request) && request.ssl?), :default => Setting.gravatar_default})
|
|
| 885 |
default = Redmine::Gravatar.gravatar(Setting.gravatar_default) |
|
| 886 |
options.merge!({:ssl => (defined?(request) && request.ssl?), :default => default})
|
|
| 886 | 887 |
email = nil |
| 887 | 888 |
if user.respond_to?(:mail) |
| 888 | 889 |
email = user.mail |
| app/helpers/settings_helper.rb | ||
|---|---|---|
| 81 | 81 |
l_or_humanize(notifiable.name, :prefix => 'label_'), |
| 82 | 82 |
:class => notifiable.parent.present? ? "parent" : '') |
| 83 | 83 |
end |
| 84 | ||
| 85 |
def options_for_gravatar_default |
|
| 86 |
Redmine::Gravatars.gravatars |
|
| 87 |
end |
|
| 84 | 88 |
end |
| app/views/settings/_display.rhtml | ||
|---|---|---|
| 15 | 15 | |
| 16 | 16 |
<p><%= setting_check_box :gravatar_enabled %></p> |
| 17 | 17 | |
| 18 |
<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]], :blank => :label_none %></p>
|
|
| 18 |
<p><%= setting_select :gravatar_default, options_for_gravatar_default, :blank => :label_none %></p>
|
|
| 19 | 19 |
</div> |
| 20 | 20 | |
| 21 | 21 |
<%= submit_tag l(:button_save) %> |
| lib/redmine/gravatars.rb | ||
|---|---|---|
| 1 |
# redMine - project management software |
|
| 2 |
# Copyright (C) 2006-2011 Jean-Philippe Lang |
|
| 3 |
# |
|
| 4 |
# This program is free software; you can redistribute it and/or |
|
| 5 |
# modify it under the terms of the GNU General Public License |
|
| 6 |
# as published by the Free Software Foundation; either version 2 |
|
| 7 |
# of the License, or (at your option) any later version. |
|
| 8 |
# |
|
| 9 |
# This program is distributed in the hope that it will be useful, |
|
| 10 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 11 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 12 |
# GNU General Public License for more details. |
|
| 13 |
# |
|
| 14 |
# You should have received a copy of the GNU General Public License |
|
| 15 |
# along with this program; if not, write to the Free Software |
|
| 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
| 17 | ||
| 18 |
module Redmine |
|
| 19 |
module Gravatars |
|
| 20 |
WELL_KNOWN_GRAVATARS = [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]] |
|
| 21 | ||
| 22 |
# Return an array of installed gravatars |
|
| 23 |
def self.gravatars |
|
| 24 |
@@installed_gravatars ||= scan_gravatars |
|
| 25 |
end |
|
| 26 | ||
| 27 |
# Rescan gravatars directory |
|
| 28 |
def self.rescan |
|
| 29 |
@@installed_gravatars = scan_gravatars |
|
| 30 |
end |
|
| 31 | ||
| 32 |
# Return gravatar for given id, or nil if it's not found |
|
| 33 |
def self.gravatar(id, options = {})
|
|
| 34 |
return nil if id.blank? |
|
| 35 | ||
| 36 |
found = gravatars.find {|g| g.id == id}
|
|
| 37 |
if found.nil? && options[:rescan] != false |
|
| 38 |
rescan |
|
| 39 |
found = gravatar(id, :rescan => false) |
|
| 40 |
end |
|
| 41 |
found |
|
| 42 |
end |
|
| 43 | ||
| 44 |
# Class used to represent a gravatar |
|
| 45 |
class Gravatar |
|
| 46 |
include Comparable |
|
| 47 | ||
| 48 |
def initialize(value) |
|
| 49 |
@value = value |
|
| 50 |
end |
|
| 51 | ||
| 52 |
def label |
|
| 53 |
value |
|
| 54 |
end |
|
| 55 | ||
| 56 |
def id |
|
| 57 |
value |
|
| 58 |
end |
|
| 59 | ||
| 60 |
def <=>(g) |
|
| 61 |
if Gravatar === g |
|
| 62 |
self.id <=> g.id |
|
| 63 |
else |
|
| 64 |
nil |
|
| 65 |
end |
|
| 66 |
end |
|
| 67 | ||
| 68 |
def to_api_option |
|
| 69 |
"#{Setting.protocol}://#{Setting.host_name}/gravatars/#{value}"
|
|
| 70 |
end |
|
| 71 | ||
| 72 |
private |
|
| 73 |
attr_reader :value |
|
| 74 |
end |
|
| 75 | ||
| 76 |
class WellKnownGravatar < Gravatar |
|
| 77 |
def initialize(label, value) |
|
| 78 |
@label = label |
|
| 79 |
super(value) |
|
| 80 |
end |
|
| 81 | ||
| 82 |
attr_reader :label |
|
| 83 | ||
| 84 |
def to_api_option |
|
| 85 |
value |
|
| 86 |
end |
|
| 87 |
end |
|
| 88 |
|
|
| 89 |
private |
|
| 90 |
|
|
| 91 |
def self.scan_gravatars |
|
| 92 |
found = Dir.glob("#{Rails.public_path}/gravatars/*").select{|f|
|
|
| 93 |
File.readable?(f) |
|
| 94 |
}.map{|f|
|
|
| 95 |
Gravatar.new(File.basename(f)) |
|
| 96 |
} |
|
| 97 | ||
| 98 |
WELL_KNOWN_GRAVATARS.map{|label, value|
|
|
| 99 |
WellKnownGravatar.new(label, value) |
|
| 100 |
} + found |
|
| 101 |
end |
|
| 102 |
end |
|
| 103 |
end |
|
| public/gravatars/.gitignore | ||
|---|---|---|
| 1 |
/* |
|
| 2 |
!/.gitignore |
|
| test/unit/lib/redmine/gravatars_test.rb | ||
|---|---|---|
| 1 |
# Redmine - project management software |
|
| 2 |
# Copyright (C) 2006-2010 Jean-Philippe Lang |
|
| 3 |
# |
|
| 4 |
# This program is free software; you can redistribute it and/or |
|
| 5 |
# modify it under the terms of the GNU General Public License |
|
| 6 |
# as published by the Free Software Foundation; either version 2 |
|
| 7 |
# of the License, or (at your option) any later version. |
|
| 8 |
# |
|
| 9 |
# This program is distributed in the hope that it will be useful, |
|
| 10 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 11 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 12 |
# GNU General Public License for more details. |
|
| 13 |
# |
|
| 14 |
# You should have received a copy of the GNU General Public License |
|
| 15 |
# along with this program; if not, write to the Free Software |
|
| 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
| 17 | ||
| 18 |
require File.expand_path('../../../../test_helper', __FILE__)
|
|
| 19 | ||
| 20 |
class Redmine::GravatarsTest < ActiveSupport::TestCase |
|
| 21 |
def setup |
|
| 22 |
Redmine::Gravatars.rescan |
|
| 23 |
end |
|
| 24 |
|
|
| 25 |
def test_gravatars |
|
| 26 |
gravatars = Redmine::Gravatars.gravatars |
|
| 27 |
assert_kind_of Array, gravatars |
|
| 28 |
gravatars.each do |gravatar| |
|
| 29 |
assert_kind_of Redmine::Gravatars::Gravatar, gravatar |
|
| 30 |
end |
|
| 31 |
end |
|
| 32 |
|
|
| 33 |
def test_rescan |
|
| 34 |
Redmine::Gravatars.gravatars.pop |
|
| 35 |
|
|
| 36 |
assert_difference 'Redmine::Gravatars.gravatars.size' do |
|
| 37 |
Redmine::Gravatars.rescan |
|
| 38 |
end |
|
| 39 |
end |
|
| 40 |
|
|
| 41 |
def test_gravatar_loaded |
|
| 42 |
gravatar = Redmine::Gravatars.gravatars.last |
|
| 43 |
|
|
| 44 |
assert_equal gravatar, Redmine::Gravatars.gravatar(gravatar.id) |
|
| 45 |
end |
|
| 46 |
|
|
| 47 |
def test_gravatar_loaded_without_rescan |
|
| 48 |
gravatar = Redmine::Gravatars.gravatars.last |
|
| 49 |
|
|
| 50 |
assert_equal gravatar, Redmine::Gravatars.gravatar(gravatar.id, :rescan => false) |
|
| 51 |
end |
|
| 52 |
|
|
| 53 |
def test_gravatar_not_loaded |
|
| 54 |
gravatar = Redmine::Gravatars.gravatars.pop |
|
| 55 |
|
|
| 56 |
assert_equal gravatar, Redmine::Gravatars.gravatar(gravatar.id) |
|
| 57 |
end |
|
| 58 |
|
|
| 59 |
def test_gravatar_not_loaded_without_rescan |
|
| 60 |
gravatar = Redmine::Gravatars.gravatars.pop |
|
| 61 |
|
|
| 62 |
assert_nil Redmine::Gravatars.gravatar(gravatar.id, :rescan => false) |
|
| 63 |
end |
|
| 64 |
end |
|
- « Previous
- 1
- 2
- 3
- Next »