Commit 9a16d8cacf991dc954c94ee8e209d06c3c9dba79

Authored by Daniela Feitosa
2 parents 866d64b6 47b1c180

Merge branch 'merge-requests/60'

app/helpers/application_helper.rb
@@ -588,7 +588,7 @@ module ApplicationHelper @@ -588,7 +588,7 @@ module ApplicationHelper
588 def gravatar_url_for(email, options = {}) 588 def gravatar_url_for(email, options = {})
589 # Ta dando erro de roteamento 589 # Ta dando erro de roteamento
590 default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil 590 default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil
591 - url_for( { :gravatar_id => Digest::MD5.hexdigest(email), 591 + url_for( { :gravatar_id => Digest::MD5.hexdigest(email.to_s),
592 :host => 'www.gravatar.com', 592 :host => 'www.gravatar.com',
593 :protocol => 'http://', 593 :protocol => 'http://',
594 :only_path => false, 594 :only_path => false,
@@ -600,7 +600,7 @@ module ApplicationHelper @@ -600,7 +600,7 @@ module ApplicationHelper
600 def str_gravatar_url_for(email, options = {}) 600 def str_gravatar_url_for(email, options = {})
601 default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil 601 default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil
602 url = 'http://www.gravatar.com/avatar.php?gravatar_id=' + 602 url = 'http://www.gravatar.com/avatar.php?gravatar_id=' +
603 - Digest::MD5.hexdigest(email) 603 + Digest::MD5.hexdigest(email.to_s)
604 { 604 {
605 :only_path => false, 605 :only_path => false,
606 :d => default 606 :d => default
@@ -610,6 +610,10 @@ module ApplicationHelper @@ -610,6 +610,10 @@ module ApplicationHelper
610 url 610 url
611 end 611 end
612 612
  613 + def gravatar_profile_url(email)
  614 + 'http://www.gravatar.com/'+ Digest::MD5.hexdigest(email.to_s)
  615 + end
  616 +
613 attr_reader :environment 617 attr_reader :environment
614 def select_categories(object_name, title=nil, title_size=4) 618 def select_categories(object_name, title=nil, title_size=4)
615 return nil if environment.enabled?(:disable_categories) 619 return nil if environment.enabled?(:disable_categories)
app/views/content_viewer/_comment.rhtml
@@ -11,14 +11,21 @@ @@ -11,14 +11,21 @@
11 :title => comment.author_name 11 :title => comment.author_name
12 %> 12 %>
13 <% else %> 13 <% else %>
14 - <%# unauthenticated user: display gravatar icon %>  
15 - <% url_image, status_class = comment.author_id ? [comment.removed_user_image, 'icon-user-removed'] : [str_gravatar_url_for( comment.email, :size => 50 ), 'icon-user-unknown'] %>  
16 - <%= content_tag 'span', image_tag(url_image) +  
17 - content_tag('span', comment.author_name, :class => 'comment-info') +  
18 - content_tag('span', comment.message, :class => 'comment-user-status ' + status_class), 14 + <% url_image, status_class = comment.author_id ?
  15 + [comment.removed_user_image, 'icon-user-removed'] :
  16 + [str_gravatar_url_for( comment.email, :size => 50, :d=>404 ), 'icon-user-unknown'] %>
  17 +
  18 + <%= link_to(
  19 + image_tag(url_image, :onerror=>'gravatarCommentFailback(this)',
  20 + 'data-gravatar'=>str_gravatar_url_for(comment.email, :size=>50)) +
  21 + content_tag('span', comment.author_name, :class => 'comment-info') +
  22 + content_tag('span', comment.message,
  23 + :class => 'comment-user-status ' + status_class),
  24 + gravatar_profile_url(comment.email),
  25 + :target => '_blank',
19 :class => 'comment-picture', 26 :class => 'comment-picture',
20 :title => '%s %s' % [comment.author_name, comment.message] 27 :title => '%s %s' % [comment.author_name, comment.message]
21 - %> 28 + )%>
22 <% end %> 29 <% end %>
23 30
24 <% comment_balloon do %> 31 <% comment_balloon do %>
features/gravatar_support.feature 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +Feature: Gravatar Support
  2 + Unauthenticated users may comment content and are displayed with Gravatar
  3 + pictures. The commenter with registered Gravatar image will have a link to
  4 + his/her Gravatar profile, others will have a link to the Gravatar homepage.
  5 +
  6 + Background:
  7 + Given the following users
  8 + | login | name |
  9 + | manuel | Manuel Silva |
  10 + And the following articles
  11 + | owner | name |
  12 + | manuel | My Article |
  13 + And the following comments
  14 + | article | author | name | email | title | body |
  15 + | My Article | manuel | | | 1 | Hi! |
  16 + | My Article | | Aurium | aurium@gmail.com | 2 | Hello! |
  17 + | My Article | | NoOne | nobody@colivre.coop.br | 3 | Bye! |
  18 +
  19 + @selenium
  20 + Scenario: The Aurium's gravatar picture must link to his gravatar profile
  21 + # because Aurium has his picture registered at garvatar.com.
  22 + When I go to article "My Article"
  23 + Then I should see "Aurium" linking to "http://www.gravatar.com/24a625896a07aa37fdb2352e302e96de"
  24 +
  25 + @selenium
  26 + Scenario: The NoOne's gravatar picture must link to Gravatar homepage
  27 + # because NoOne <nobody@colivre.coop.br> has no picture registered.
  28 + When I go to article "My Article"
  29 + Then I should see "NoOne" linking to "http://www.gravatar.com"
  30 +
features/support/paths.rb
@@ -14,6 +14,9 @@ module NavigationHelpers @@ -14,6 +14,9 @@ module NavigationHelpers
14 when /^\// 14 when /^\//
15 page_name 15 page_name
16 16
  17 + when /article "([^"]+)"\s*$/
  18 + url_for( Article.find_by_name($1).url )
  19 +
17 when /edit "(.+)" by (.+)/ 20 when /edit "(.+)" by (.+)/
18 article_id = Person[$2].articles.find_by_slug($1.to_slug).id 21 article_id = Person[$2].articles.find_by_slug($1.to_slug).id
19 "/myprofile/#{$2}/cms/edit/#{article_id}" 22 "/myprofile/#{$2}/cms/edit/#{article_id}"
public/javascripts/application.js
@@ -680,6 +680,12 @@ function original_image_dimensions(src) { @@ -680,6 +680,12 @@ function original_image_dimensions(src) {
680 return { 'width' : img.width, 'height' : img.height }; 680 return { 'width' : img.width, 'height' : img.height };
681 } 681 }
682 682
  683 +function gravatarCommentFailback(img) {
  684 + var link = img.parentNode;
  685 + link.href = "http://www.gravatar.com";
  686 + img.src = img.getAttribute("data-gravatar");
  687 +}
  688 +
683 jQuery(function() { 689 jQuery(function() {
684 jQuery("#ajax-form").before("<div id='ajax-form-loading-area' style='display:block;width:16px;height:16px;'></div>"); 690 jQuery("#ajax-form").before("<div id='ajax-form-loading-area' style='display:block;width:16px;height:16px;'></div>");
685 jQuery("#ajax-form").before("<div id='ajax-form-message-area'></div>"); 691 jQuery("#ajax-form").before("<div id='ajax-form-message-area'></div>");
test/unit/application_helper_test.rb
@@ -467,8 +467,10 @@ class ApplicationHelperTest &lt; Test::Unit::TestCase @@ -467,8 +467,10 @@ class ApplicationHelperTest &lt; Test::Unit::TestCase
467 assert_match(/Community nick/, page_title) 467 assert_match(/Community nick/, page_title)
468 end 468 end
469 469
470 - should 'generate a gravatar url' do  
471 - stubs(:theme_option).returns({}) 470 + should 'generate a gravatar image url' do
  471 + stubs(:environment).returns(Environment.default)
  472 + @controller = ApplicationController.new
  473 +
472 with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do 474 with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do
473 url = str_gravatar_url_for( 'rms@gnu.org', :size => 50 ) 475 url = str_gravatar_url_for( 'rms@gnu.org', :size => 50 )
474 assert_match(/^http:\/\/www\.gravatar\.com\/avatar\.php\?/, url) 476 assert_match(/^http:\/\/www\.gravatar\.com\/avatar\.php\?/, url)
@@ -486,6 +488,11 @@ class ApplicationHelperTest &lt; Test::Unit::TestCase @@ -486,6 +488,11 @@ class ApplicationHelperTest &lt; Test::Unit::TestCase
486 end 488 end
487 end 489 end
488 490
  491 + should 'generate a gravatar profile url' do
  492 + url = gravatar_profile_url( 'rms@gnu.org' )
  493 + assert_equal('http://www.gravatar.com/ed5214d4b49154ba0dc397a28ee90eb7', url)
  494 + end
  495 +
489 should 'use theme passed via param when in development mode' do 496 should 'use theme passed via param when in development mode' do
490 stubs(:environment).returns(Environment.new(:theme => 'environment-theme')) 497 stubs(:environment).returns(Environment.new(:theme => 'environment-theme'))
491 ENV.stubs(:[]).with('RAILS_ENV').returns('development') 498 ENV.stubs(:[]).with('RAILS_ENV').returns('development')