class User < ActiveRecord::Base
- require 'xml/libxml'
+ require "xml/libxml"
has_many :traces, -> { where(:visible => true) }
has_many :diary_entries, -> { order(:created_at => :desc) }
has_many :preferences, :class_name => "UserPreference"
has_many :changesets, -> { order(:created_at => :desc) }
has_many :changeset_comments, :foreign_key => :author_id
- has_and_belongs_to_many :changeset_subscriptions, :class_name => 'Changeset', :join_table => 'changesets_subscribers', :foreign_key => 'subscriber_id'
+ has_and_belongs_to_many :changeset_subscriptions, :class_name => "Changeset", :join_table => "changesets_subscribers", :foreign_key => "subscriber_id"
has_many :note_comments, :foreign_key => :author_id
has_many :notes, :through => :note_comments
validates_confirmation_of :pass_crypt # , :message => ' must match the confirmation password'
validates_uniqueness_of :display_name, :allow_nil => true, :case_sensitive => false, :if => proc { |u| u.display_name_changed? }
validates_uniqueness_of :email, :case_sensitive => false, :if => proc { |u| u.email_changed? }
- validates_uniqueness_of :openid_url, :allow_nil => true
validates_length_of :pass_crypt, :within => 8..255
validates_length_of :display_name, :within => 3..255, :allow_nil => true
validates_email_format_of :email, :if => proc { |u| u.email_changed? }
if user.nil?
users = where("LOWER(email) = LOWER(?) OR LOWER(display_name) = LOWER(?)", options[:username], options[:username])
- if users.count == 1
- user = users.first
- end
+ user = users.first if users.count == 1
end
if user && PasswordHash.check(user.pass_crypt, user.pass_salt, options[:password])
end
def to_xml_node
- el1 = XML::Node.new 'user'
- el1['display_name'] = display_name.to_s
- el1['account_created'] = creation_time.xmlschema
+ el1 = XML::Node.new "user"
+ el1["display_name"] = display_name.to_s
+ el1["account_created"] = creation_time.xmlschema
if home_lat && home_lon
- home = XML::Node.new 'home'
- home['lat'] = home_lat.to_s
- home['lon'] = home_lon.to_s
- home['zoom'] = home_zoom.to_s
+ home = XML::Node.new "home"
+ home["lat"] = home_lat.to_s
+ home["lon"] = home_lon.to_s
+ home["zoom"] = home_zoom.to_s
el1 << home
end
el1
def nearby(radius = NEARBY_RADIUS, num = NEARBY_USERS)
if home_lon && home_lat
gc = OSM::GreatCircle.new(home_lat, home_lon)
- bounds = gc.bounds(radius)
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)
else
##
# returns true if the user has the moderator role, false otherwise
def moderator?
- has_role? 'moderator'
+ has_role? "moderator"
end
##
# returns true if the user has the administrator role, false otherwise
def administrator?
- has_role? 'administrator'
+ has_role? "administrator"
end
##
self.image = nil
self.email_valid = false
self.new_email = nil
- self.openid_url = nil
+ self.auth_provider = nil
+ self.auth_uid = nil
self.status = "deleted"
save
end
def spam_score
changeset_score = changesets.size * 50
trace_score = traces.size * 50
- diary_entry_score = diary_entries.inject(0) { |s, e| s += e.body.spam_score }
- diary_comment_score = diary_comments.inject(0) { |s, c| s += c.body.spam_score }
+ diary_entry_score = diary_entries.inject(0) { |a, e| a + e.body.spam_score }
+ diary_comment_score = diary_comments.inject(0) { |a, e| a + e.body.spam_score }
score = description.spam_score / 4.0
score += diary_entries.where("created_at > ?", 1.day.ago).count * 10