diff --git a/app/helpers/profile_helper.rb b/app/helpers/profile_helper.rb index 3fe2c48..5dd5c80 100644 --- a/app/helpers/profile_helper.rb +++ b/app/helpers/profile_helper.rb @@ -1,8 +1,7 @@ module ProfileHelper def display_field(title, profile, field, force = false) - if (!force && !profile.active_fields.include?(field.to_s)) || - (profile.active_fields.include?(field.to_s) && !profile.public_fields.include?(field.to_s) && (!user || (user != profile && !user.is_a_friend?(profile)))) + if not force or not profile.may_display_field_to? field, user return '' end value = profile.send(field) diff --git a/app/models/profile.rb b/app/models/profile.rb index 6ceabcd..525df3d 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -226,12 +226,14 @@ class Profile < ActiveRecord::Base belongs_to :region + LOCATION_FIELDS = %w[address district city state country_name zip_code] + def location(separator = ' - ') myregion = self.region if myregion myregion.hierarchy.reverse.first(2).map(&:name).join(separator) else - %w[address district city state country_name zip_code ].map {|item| (self.respond_to?(item) && !self.send(item).blank?) ? self.send(item) : nil }.compact.join(separator) + LOCATION_FIELDS.map {|item| (self.respond_to?(item) && !self.send(item).blank?) ? self.send(item) : nil }.compact.join(separator) end end @@ -882,6 +884,21 @@ private :generate_url, :url_options [] end + def may_display_field_to? field, user = nil + if not self.active_fields.include? field.to_s + self.send "may_display_#{field}_to?", user rescue true + else + not (!self.public_fields.include? field.to_s and (!user or (user != self and !user.is_a_friend?(self)))) + end + end + + def may_display_location_to? user = nil + LOCATION_FIELDS.each do |field| + return false if !self.may_display_field_to? field, user + end + return true + end + # field => privacy (e.g.: "address" => "public") def fields_privacy self.data[:fields_privacy] -- libgit2 0.21.2