diff --git a/app/controllers/public/account_controller.rb b/app/controllers/public/account_controller.rb index 36ad1b1..d4cf820 100644 --- a/app/controllers/public/account_controller.rb +++ b/app/controllers/public/account_controller.rb @@ -262,7 +262,7 @@ class AccountController < ApplicationController def user_data user_data = if logged_in? - current_user.data_hash self + current_user.data_hash(gravatar_default) else { } end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0b735c7..f3d61bf 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -38,6 +38,8 @@ module ApplicationHelper include LayoutHelper + include Noosfero::Gravatar + def locale (@page && !@page.language.blank?) ? @page.language : FastGettext.locale end @@ -356,8 +358,7 @@ module ApplicationHelper end def theme_path - if ( respond_to?(:session) && session[:theme] ) || - ( @controller && @controller.session[:theme] ) + if session[:theme] '/user_themes/' + current_theme else '/designs/themes/' + current_theme @@ -367,8 +368,7 @@ module ApplicationHelper def current_theme @current_theme ||= begin - if ( respond_to?(:session) && session[:theme] ) || - ( @controller && @controller.session[:theme] ) + if session[:theme] session[:theme] else # utility for developers: set the theme to 'random' in development mode and @@ -591,28 +591,8 @@ module ApplicationHelper :class => 'vcard'), :class => 'common-profile-list-block') end - def gravatar_url_for(email, options = {}) - # Ta dando erro de roteamento - default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil - url_for( { :gravatar_id => Digest::MD5.hexdigest(email.to_s), - :host => 'www.gravatar.com', - :protocol => 'http://', - :only_path => false, - :controller => 'avatar.php', - :d => default - }.merge(options) ) - end - - def str_gravatar_url_for(email, options = {}) - default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil - "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.to_s)}?" + { - :only_path => false, - :d => default - }.merge(options).map{|k,v| '%s=%s' % [ k,v ] }.join('&') - end - - def gravatar_profile_url(email) - 'http://www.gravatar.com/'+ Digest::MD5.hexdigest(email.to_s) + def gravatar_default + (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar'] end attr_reader :environment diff --git a/app/models/person.rb b/app/models/person.rb index 11a1705..e22da57 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -476,6 +476,13 @@ class Person < Profile self.fields_privacy.nil? ? [] : self.fields_privacy.reject{ |k, v| v != 'public' }.keys.map(&:to_s) end + include Noosfero::Gravatar + + def profile_custom_icon(gravatar_default=nil) + (self.image.present? && self.image.public_filename(:icon)) || + gravatar_profile_image_url(self.email, :size=>20, :d => gravatar_default) + end + protected def followed_by?(profile) diff --git a/app/models/profile.rb b/app/models/profile.rb index 525df3d..20f7d9f 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -844,8 +844,10 @@ private :generate_url, :url_options }[amount] || _("%s members") % amount end - def profile_custom_icon - self.image.public_filename(:icon) unless self.image.blank? + include Noosfero::Gravatar + + def profile_custom_icon(gravatar_default=nil) + image.public_filename(:icon) if image.present? end def jid(options = {}) diff --git a/app/models/user.rb b/app/models/user.rb index 5c896ff..231272d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -275,25 +275,21 @@ class User < ActiveRecord::Base end end - include ApplicationHelper - - def data_hash(controller=nil) - @controller ||= controller + def data_hash(gravatar_default = nil) friends_list = {} enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } } self.person.friends.online.map do |person| friends_list[person.identifier] = { - 'avatar' => person.profile_custom_icon, + 'avatar' => person.profile_custom_icon(gravatar_default), 'name' => person.short_name, 'jid' => person.full_jid, 'status' => person.user.chat_status, } end - avatar = self.person.profile_custom_icon - avatar = str_gravatar_url_for(self.email, :size=>20) if avatar.blank? + { 'login' => self.login, - 'avatar' => avatar, + 'avatar' => self.person.profile_custom_icon(gravatar_default), 'is_admin' => self.person.is_admin?, 'since_month' => self.person.created_at.month, 'since_year' => self.person.created_at.year, diff --git a/app/views/comment/_comment.rhtml b/app/views/comment/_comment.rhtml index e7fb23b..5061040 100644 --- a/app/views/comment/_comment.rhtml +++ b/app/views/comment/_comment.rhtml @@ -13,11 +13,11 @@ <% else %> <% url_image, status_class = comment.author_id ? [comment.removed_user_image, 'icon-user-removed'] : - [str_gravatar_url_for( comment.email, :size => 50, :d=>404 ), 'icon-user-unknown'] %> + [gravatar_profile_image_url( comment.email, :size => 50, :d=>404 ), 'icon-user-unknown'] %> <%= link_to( image_tag(url_image, :onerror=>'gravatarCommentFailback(this)', - 'data-gravatar'=>str_gravatar_url_for(comment.email, :size=>50)) + + 'data-gravatar'=>gravatar_profile_image_url(comment.email, :size=>50)) + content_tag('span', comment.author_name, :class => 'comment-info') + content_tag('span', comment.message, :class => 'comment-user-status ' + status_class), diff --git a/app/views/profile/_comment.rhtml b/app/views/profile/_comment.rhtml index 50a9b36..3bd3a71 100644 --- a/app/views/profile/_comment.rhtml +++ b/app/views/profile/_comment.rhtml @@ -16,11 +16,11 @@ <% else %> <% url_image, status_class = comment.author_id ? [comment.removed_user_image, 'icon-user-removed'] : - [str_gravatar_url_for( comment.email ), 'icon-user-unknown'] %> + [gravatar_profile_image_url( comment.email ), 'icon-user-unknown'] %> <%= link_to( image_tag(url_image, :onerror=>'gravatarCommentFailback(this)', - 'data-gravatar'=>str_gravatar_url_for(comment.email)) + + 'data-gravatar'=>gravatar_profile_image_url(comment.email)) + content_tag('span', comment.author_name, :class => 'comment-info') + content_tag('span', comment.message, :class => 'comment-user-status comment-user-status-wall ' + status_class), diff --git a/app/views/search/_comment.rhtml b/app/views/search/_comment.rhtml index 1cacab1..5f9abbc 100644 --- a/app/views/search/_comment.rhtml +++ b/app/views/search/_comment.rhtml @@ -8,7 +8,7 @@ <%# unauthenticated user: display gravatar icon %> <%= content_tag 'span', ' ', :class => 'comment-picture', - :style => 'background-image:url(%s)' % str_gravatar_url_for( comment.email, :size => 20 ) + :style => 'background-image:url(%s)' % gravatar_profile_image_url( comment.email, :size => 20 ) %> <%- end %> <%= link_to(comment.title, comment.url) %> diff --git a/lib/noosfero/gravatar.rb b/lib/noosfero/gravatar.rb new file mode 100644 index 0000000..5f4d743 --- /dev/null +++ b/lib/noosfero/gravatar.rb @@ -0,0 +1,11 @@ +module Noosfero::Gravatar + def gravatar_profile_image_url(email, options = {}) + "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.to_s)}?" + { + :only_path => false, + }.merge(options).map{|k,v| '%s=%s' % [ k,v ] }.join('&') + end + + def gravatar_profile_url(email) + 'http://www.gravatar.com/'+ Digest::MD5.hexdigest(email.to_s) + end +end diff --git a/test/unit/application_helper_test.rb b/test/unit/application_helper_test.rb index 0385997..27512c2 100644 --- a/test/unit/application_helper_test.rb +++ b/test/unit/application_helper_test.rb @@ -466,32 +466,19 @@ class ApplicationHelperTest < ActiveSupport::TestCase assert_match(/Community nick/, page_title) end - should 'generate a gravatar image url' do - stubs(:environment).returns(Environment.default) - @controller = ApplicationController.new - + should 'gravatar default parameter' do + profile = mock + profile.stubs(:theme).returns('some-theme') + stubs(:profile).returns(profile) with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do - url = str_gravatar_url_for( 'rms@gnu.org', :size => 50 ) - assert_match(/^http:\/\/www\.gravatar\.com\/avatar\.php\?/, url) - assert_match(/(\?|&)gravatar_id=ed5214d4b49154ba0dc397a28ee90eb7(&|$)/, url) - assert_match(/(\?|&)d=crazyvatar(&|$)/, url) - assert_match(/(\?|&)size=50(&|$)/, url) + assert_equal gravatar_default, 'crazyvatar' end stubs(:theme_option).returns('gravatar' => 'nicevatar') with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do - url = str_gravatar_url_for( 'rms@gnu.org', :size => 50 ) - assert_match(/^http:\/\/www\.gravatar\.com\/avatar\.php\?/, url) - assert_match(/(\?|&)gravatar_id=ed5214d4b49154ba0dc397a28ee90eb7(&|$)/, url) - assert_match(/(\?|&)d=nicevatar(&|$)/, url) - assert_match(/(\?|&)size=50(&|$)/, url) + assert_equal gravatar_default, 'nicevatar' end end - should 'generate a gravatar profile url' do - url = gravatar_profile_url( 'rms@gnu.org' ) - assert_equal('http://www.gravatar.com/ed5214d4b49154ba0dc397a28ee90eb7', url) - end - should 'use theme passed via param when in development mode' do stubs(:environment).returns(Environment.new(:theme => 'environment-theme')) ENV.stubs(:[]).with('RAILS_ENV').returns('development') diff --git a/test/unit/gravatar_test.rb b/test/unit/gravatar_test.rb new file mode 100644 index 0000000..6954d5a --- /dev/null +++ b/test/unit/gravatar_test.rb @@ -0,0 +1,26 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class GravatarTest < ActiveSupport::TestCase + + def setup + @object = Object.new + @object.extend(Noosfero::Gravatar) + end + + should 'generate a gravatar image url' do + url = @object.gravatar_profile_image_url( 'rms@gnu.org', :size => 50, :d => 'crazyvatar' ) + assert_match(/^http:\/\/www\.gravatar\.com\/avatar\/ed5214d4b49154ba0dc397a28ee90eb7?/, url) + assert_match(/(\?|&)d=crazyvatar(&|$)/, url) + assert_match(/(\?|&)size=50(&|$)/, url) + + url = @object.gravatar_profile_image_url( 'rms@gnu.org', :size => 50, :d => 'nicevatar' ) + assert_match(/^http:\/\/www\.gravatar\.com\/avatar\/ed5214d4b49154ba0dc397a28ee90eb7?/, url) + assert_match(/(\?|&)d=nicevatar(&|$)/, url) + assert_match(/(\?|&)size=50(&|$)/, url) + end + + should 'generate a gravatar profile url' do + url = @object.gravatar_profile_url( 'rms@gnu.org' ) + assert_equal('http://www.gravatar.com/ed5214d4b49154ba0dc397a28ee90eb7', url) + end +end diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index d69fcc4..8c34553 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -336,10 +336,22 @@ class UserTest < ActiveSupport::TestCase Person.any_instance.stubs(:is_admin?).returns(true) Person.any_instance.stubs(:created_at).returns(DateTime.parse('16-08-2010')) expected_hash = { - 'login' => 'x_and_y', 'is_admin' => true, 'since_month' => 8, 'chat_enabled' => false, 'since_year' => 2010, 'email_domain' => nil, 'amount_of_friends' => 0, + 'login' => 'x_and_y', 'is_admin' => true, 'since_month' => 8, + 'chat_enabled' => false, 'since_year' => 2010, 'avatar' => + 'http://www.gravatar.com/avatar/a0517761d5125820c28d87860bc7c02e?only_path=false&d=&size=20', + 'email_domain' => nil, 'amount_of_friends' => 0, 'friends_list' => {}, 'enterprises' => [], } - assert_equal expected_hash, person.user.data_hash + + assert_equal expected_hash['login'], person.user.data_hash['login'] + assert_equal expected_hash['is_admin'], person.user.data_hash['is_admin'] + assert_equal expected_hash['since_month'], person.user.data_hash['since_month'] + assert_equal expected_hash['chat_enabled'], person.user.data_hash['chat_enabled'] + assert_equal expected_hash['since_year'], person.user.data_hash['since_year'] + assert_equal expected_hash['avatar'], person.user.data_hash['avatar'] + assert_equal expected_hash['email_domain'], person.user.data_hash['email_domain'] + assert_equal expected_hash['amount_of_friends'], person.user.data_hash['amount_of_friends'] + assert_equal expected_hash['friends_list'], person.user.data_hash['friends_list'] end should "data_hash return the friends_list information" do -- libgit2 0.21.2