ref: master
app/helpers/profile_image_helper.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
module ProfileImageHelper def default_or_themed_icon(icon) if File.exists?(Rails.root.join('public', theme_path, icon)) theme_path + icon else icon end end def gravatar_default (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar'] || 'mm' end def profile_sex_icon( profile ) return '' unless profile.is_a?(Person) return '' unless !environment.enabled?('disable_gender_icon') sex = ( profile.sex ? profile.sex.to_s() : 'undef' ) title = ( sex == 'undef' ? _('non registered gender') : ( sex == 'male' ? _('Male') : _('Female') ) ) sex = content_tag 'span', content_tag( 'span', sex ), :class => 'sex-'+sex, :title => title sex end def profile_icon( profile, size=:portrait, return_mimetype=false ) filename, mimetype = '', 'image/png' if profile.image filename = profile.image.public_filename( size ) mimetype = profile.image.content_type else icon = if profile.organization? if profile.kind_of?(Community) '/images/icons-app/community-'+ size.to_s() +'.png' else '/images/icons-app/enterprise-'+ size.to_s() +'.png' end else pixels = Image.attachment_options[:thumbnails][size.to_sym].split('x').first gravatar_profile_image_url( profile.email, :size => pixels, :d => gravatar_default ) end filename = default_or_themed_icon(icon) end return_mimetype ? [filename, mimetype] : filename end # generates a image tag for the profile. # # If the profile has no image set yet, then a default image is used. def profile_image(profile, size=:portrait, opt={}) return '' if profile.nil? opt[:alt] ||= profile.name() opt[:title] ||= '' opt[:class] ||= '' opt[:class] += ( profile.class == Person ? ' photo' : ' logo' ) image_tag(profile_icon(profile, size), opt ) end include MembershipsHelper def links_for_balloon(profile) if environment.enabled?(:show_balloon_with_profile_links_when_clicked) if profile.kind_of?(Person) [ {_('Wall') => {:href => url_for(profile.public_profile_url)}}, {_('Friends') => {:href => url_for(:controller => :profile, :action => :friends, :profile => profile.identifier)}}, {_('Communities') => {:href => url_for(:controller => :profile, :action => :communities, :profile => profile.identifier)}}, {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}}, {_('Add') => {:href => url_for(profile.add_url), :class => 'add-friend', :style => 'display: none'}} ] elsif profile.kind_of?(Community) [ {_('Wall') => {:href => url_for(profile.public_profile_url)}}, {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, {_('Join') => {:href => url_for(profile.join_url), :class => 'join-community'+ (show_confirmation_modal?(profile) ? ' modal-toggle' : '') , :style => 'display: none'}}, {_('Leave community') => {:href => url_for(profile.leave_url), :class => 'leave-community', :style => 'display: none'}}, {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}} ] elsif profile.kind_of?(Enterprise) [ {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}}, ] else [] end end end include StyleHelper # displays a link to the profile homepage with its image (as generated by # #profile_image) and its name below it. def profile_image_link( profile, size=:portrait, tag='li', extra_info = nil ) if content = @plugins.dispatch_first(:profile_image_link, profile, size, tag, extra_info) return instance_exec(&content) end name = profile.short_name if profile.person? url = url_for(profile.check_friendship_url) trigger_class = 'person-trigger' else city = '' url = url_for(profile.check_membership_url) if profile.community? trigger_class = 'community-trigger' elsif profile.enterprise? trigger_class = 'enterprise-trigger' end end extra_info_tag = '' if profile.secret? img_class = 'profile-image secret-profile' else img_class = 'profile-image' end if extra_info.is_a? Hash extra_info_tag = content_tag( 'span', extra_info[:value], :class => 'extra_info '+extra_info[:class]) img_class +=' '+extra_info[:class] else extra_info_tag = content_tag( 'span', extra_info, :class => 'extra_info' ) end links = links_for_balloon(profile) vcard_classes = kindify_class(profile, 'vcard') content_tag('div', content_tag(tag, (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? popover_menu(_('Profile links'),profile.short_name,links,{:class => trigger_class, :url => url}) : "").html_safe + link_to( content_tag( 'span', profile_image( profile, size ), :class => img_class ) + content_tag( 'span', h(name), :class => ( profile.class == Person ? 'fn' : 'org' ) ) + extra_info_tag + profile_sex_icon( profile ), profile.url, :class => 'profile_link url', :help => _('Click on this icon to go to the <b>%s</b>\'s home page') % profile.name, :title => profile.name ).html_safe, :class => vcard_classes), :class => 'common-profile-list-block') end end |