module ApplicationHelper
include Redmine::WikiFormatting::Macros::Definitions
+ include GravatarHelper::PublicMethods
extend Forwardable
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
(@has_content && @has_content[name]) || false
end
- def gravatar_for_mail(mail, options = { })
+ # Returns the avatar image tag for the given +user+ if avatars are enabled
+ # +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?
- return gravatar(mail.to_s.downcase, options) rescue nil
+ email = nil
+ if user.respond_to?(:mail)
+ email = user.mail
+ elsif user.to_s =~ %r{<(.+?)>}
+ email = $1
+ end
+ return gravatar(email.to_s.downcase, options) unless email.blank? rescue nil
end
end
<%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %>
</div>
-<h2><%= gravatar_for_mail @user.mail unless @user.mail.empty? %> <%=h @user.name %></h2>
+<h2><%= avatar @user %> <%=h @user.name %></h2>
<p>
<%= mail_to(h(@user.mail)) unless @user.pref.hide_mail %>
<h4><div style="float:right;"><%= link_to "##{journal.indice}", :anchor => "note-#{journal.indice}" %></div>
<%= content_tag('a', '', :name => "note-#{journal.indice}")%>
<%= format_time(journal.created_on) %> - <%= journal.user.name %></h4>
- <%= gravatar_for_mail(journal.user.mail.blank? ? "" : journal.user.mail, :size => "32") %>
+ <%= avatar(journal.user, :size => "32") %>
<ul>
<% for detail in journal.details %>
<li><%= show_detail(detail) %></li>
<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
<div class="issue <%= "status-#{@issue.status.position} priority-#{@issue.priority.position}" %>">
- <%= gravatar_for_mail(@issue.author.mail, :size => "64") %>
+ <%= avatar(@issue.author, :size => "64") %>
<h3><%=h @issue.subject %></h3>
<p class="author">
<%= authoring @issue.created_on, @issue.author %>.
<td class="due-date"><b><%=l(:field_due_date)%>:</b></td><td class="due-date"><%= format_date(@issue.due_date) %></td>
</tr>
<tr>
- <td class="assigned-to"><b><%=l(:field_assigned_to)%>:</b></td><td><%= gravatar_for_mail(@issue.assigned_to.mail, :size => "14") unless @issue.assigned_to.blank?%><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
+ <td class="assigned-to"><b><%=l(:field_assigned_to)%>:</b></td><td><%= avatar(@issue.assigned_to, :size => "14") %><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
<td class="progress"><b><%=l(:field_done_ratio)%>:</b></td><td class="progress"><%= progress_bar @issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%" %></td>
</tr>
<tr>
<dl>
<% @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%>
<dt class="<%= e.event_type %> <%= User.current.logged? && e.respond_to?(:event_author) && User.current == e.event_author ? 'me' : nil %>">
- <%= gravatar_for_mail(e.user.mail, :size => "24") if e.respond_to?(:user) %>
- <%= gravatar_for_mail(e.author.mail, :size => "24") if e.respond_to?(:author) %>
- <%= gravatar_for_mail(e.committer.match('\\<.+?\\>')[0].gsub(/[<>]/, ''), :size => "24") if e.respond_to?(:committer) rescue nil %>
+ <%= avatar(e.event_author, :size => "24") if e.respond_to?(:event_author) %>
<span class="time"><%= format_time(e.event_datetime, false) %></span>
<%= content_tag('span', h(e.project), :class => 'project') if @project.nil? || @project != e.project %>
<%= link_to format_activity_title(e.event_title), e.event_url %></dt>
<tbody>
<% for user in @users -%>
<tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
- <td class="username"><%= gravatar_for_mail(user.mail.blank? ? "" : user.mail, :size => "24") %><%= link_to h(user.login), :action => 'edit', :id => user %></td>
+ <td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), :action => 'edit', :id => user %></td>
<td class="firstname"><%= h(user.firstname) %></td>
<td class="lastname"><%= h(user.lastname) %></td>
<td class="email"><%= mail_to(h(user.mail)) %></td>
class ApplicationHelperTest < HelperTestCase
include ApplicationHelper
include ActionView::Helpers::TextHelper
- fixtures :projects, :roles, :enabled_modules,
+ fixtures :projects, :roles, :enabled_modules, :users,
:repositories, :changesets,
:trackers, :issue_statuses, :issues, :versions, :documents,
:wikis, :wiki_pages, :wiki_contents,
assert_equal expected, due_date_distance_in_words(date)
end
end
+
+ def test_avatar
+ # turn on avatars
+ Setting.gravatar_enabled = '1'
+ assert avatar(User.find_by_mail('jsmith@somenet.foo')).include?(Digest::MD5.hexdigest('jsmith@somenet.foo'))
+ assert avatar('jsmith <jsmith@somenet.foo>').include?(Digest::MD5.hexdigest('jsmith@somenet.foo'))
+ assert_nil avatar('jsmith')
+ assert_nil avatar(nil)
+
+ # turn off avatars
+ Setting.gravatar_enabled = '0'
+ assert_nil avatar(User.find_by_mail('jsmith@somenet.foo'))
+ end
end