X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/f1e9dcc66af1945cc0b8847b4ccecde9f54520ba..76bc5eba0617e36ebb853d24212543d0e1d4904d:/app/models/user.rb diff --git a/app/models/user.rb b/app/models/user.rb index 2a6351e50..da3964142 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -97,7 +97,8 @@ class User < ActiveRecord::Base validates :email, :if => proc { |u| u.email_changed? }, :uniqueness => { :case_sensitive => false } validates :pass_crypt, :confirmation => true, :length => 8..255 - validates :home_lat, :home_lon, :allow_nil => true, :numericality => true + validates :home_lat, :allow_nil => true, :numericality => true, :inclusion => { :in => -90..90 } + validates :home_lon, :allow_nil => true, :numericality => true, :inclusion => { :in => -180..180 } validates :home_zoom, :allow_nil => true, :numericality => { :only_integer => true } validates :preferred_editor, :inclusion => Editors::ALL_EDITORS, :allow_nil => true validates :image, :attachment_content_type => { :content_type => %r{\Aimage/.*\Z} } @@ -112,6 +113,10 @@ class User < ActiveRecord::Base before_save :update_tile after_save :spam_check + def to_param + display_name + end + def self.authenticate(options) if options[:username] && options[:password] user = find_by("email = ? OR display_name = ?", options[:username], options[:username]) @@ -184,14 +189,20 @@ class User < ActiveRecord::Base end def preferred_languages - @locales ||= Locale.list(languages) + @preferred_languages ||= Locale.list(languages) end def nearby(radius = NEARBY_RADIUS, num = NEARBY_USERS) if home_lon && home_lat gc = OSM::GreatCircle.new(home_lat, home_lon) + sql_for_area = QuadTile.sql_for_area(gc.bounds(radius), "home_") sql_for_distance = gc.sql_for_distance("home_lat", "home_lon") - nearby = User.where("id != ? AND status IN (\'active\', \'confirmed\') AND data_public = ? AND #{sql_for_distance} <= ?", id, true, radius).order(sql_for_distance).limit(num) + nearby = User.active.identifiable + .where("id != ?", id) + .where(sql_for_area) + .where("#{sql_for_distance} <= ?", radius) + .order(sql_for_distance) + .limit(num) else nearby = [] end