app/helpers/account/users_helper.rb in bullet_train-1.2.27 vs app/helpers/account/users_helper.rb in bullet_train-1.3.0

- old
+ new

@@ -1,25 +1,22 @@ module Account::UsersHelper - def profile_photo_for(url: nil, email: nil, first_name: nil, last_name: nil) + def profile_photo_for(url: nil, email: nil, first_name: nil, last_name: nil, profile_header: false) + size_details = profile_header ? {width: 700, height: 200} : {width: 100, height: 100} + size_details[:crop] = :fill + if cloudinary_enabled? && !url.blank? - cl_image_path(url, width: 100, height: 100, crop: :fill) + cl_image_path(url, size_details[:width], size_details[:height], size_details[:crop]) + elsif !url.blank? + url + "?" + size_details.to_param else - background_color = Colorizer.colorize_similarly(email.to_s, 0.5, 0.6).delete("#") - "https://ui-avatars.com/api/?" + { - color: "ffffff", - background: background_color, - bold: true, - # email.to_s should not be necessary once we fix the edge case of cancelling an unclaimed membership - name: [first_name, last_name].join(" ").strip.presence || email, - size: 200, - }.to_param + ui_avatar_params(email, first_name, last_name) end end def user_profile_photo_url(user) profile_photo_for( - url: user.profile_photo_id, + url: get_photo_url_from(user), email: user.email, first_name: user.first_name, last_name: user.last_name ) end @@ -27,37 +24,33 @@ def membership_profile_photo_url(membership) if membership.user user_profile_photo_url(membership.user) else profile_photo_for( - url: membership.user_profile_photo_id, + url: get_photo_url_from(membership), email: membership.invitation&.email || membership.user_email, first_name: membership.user_first_name, last_name: membership.user_last_name ) end end + # TODO: We can do away with these three `profile_header` methods, I'm just + # leaving them in case we have other developers depending on these methods. def profile_header_photo_for(url: nil, email: nil, first_name: nil, last_name: nil) if cloudinary_enabled? && !url.blank? cl_image_path(url, width: 700, height: 200, crop: :fill) + elsif !url.blank? + url + "?" + {size: 200}.to_param else - background_color = Colorizer.colorize_similarly(email.to_s, 0.5, 0.6).delete("#") - "https://ui-avatars.com/api/?" + { - color: "ffffff", - background: background_color, - bold: true, - # email.to_s should not be necessary once we fix the edge case of cancelling an unclaimed membership - name: "#{first_name&.first || email.to_s[0]} #{last_name&.first || email.to_s[1]}", - size: 200, - }.to_param + ui_avatar_params(email, first_name, last_name) end end def user_profile_header_photo_url(user) profile_header_photo_for( - url: user.profile_photo_id, + url: get_photo_url_from(user), email: user.email, first_name: user.first_name, last_name: user.last_name ) end @@ -65,15 +58,41 @@ def membership_profile_header_photo_url(membership) if membership.user user_profile_header_photo_url(membership.user) else profile_header_photo_for( - url: membership.user_profile_photo_id, + url: get_photo_url_from(membership), email: membership.invitation&.email || membership.user_email, first_name: membership.user_first_name, last_name: membership.user&.last_name || membership.user_last_name ) end + end + + def get_photo_url_from(resource) + photo_method = if resource.is_a?(User) + :profile_photo + elsif resource.is_a?(Membership) + :user_profile_photo + end + + if cloudinary_enabled? + resource.send("#{photo_method}_id".to_sym) + elsif resource.send(photo_method).attached? + url_for(resource.send(photo_method)) + end + end + + def ui_avatar_params(email, first_name, last_name) + background_color = Colorizer.colorize_similarly(email.to_s, 0.5, 0.6).delete("#") + "https://ui-avatars.com/api/?" + { + color: "ffffff", + background: background_color, + bold: true, + # email.to_s should not be necessary once we fix the edge case of cancelling an unclaimed membership + name: "#{first_name&.first || email.to_s[0]} #{last_name&.first || email.to_s[1]}", + size: 200, + }.to_param end def current_membership current_user.memberships.where(team: current_team).first end