has_many :client_applications
has_many :oauth_tokens, :class_name => "OauthToken", :order => "authorized_at desc", :include => [:client_application]
- has_many :active_blocks, :class_name => "UserBlock", :conditions => ['user_blocks.ends_at > \'#{Time.now.getutc.xmlschema(5)}\' or user_blocks.needs_view']
+ has_many :active_blocks, :class_name => "UserBlock", :conditions => proc { [ "user_blocks.ends_at > :ends_at or user_blocks.needs_view", { :ends_at => Time.now.getutc } ] }
has_many :roles, :class_name => "UserRole"
+ scope :visible, where(:status => ["pending", "active", "confirmed"])
+ scope :active, where(:status => ["active", "confirmed"])
+
validates_presence_of :email, :display_name
validates_confirmation_of :email#, :message => ' addresses must match'
validates_confirmation_of :pass_crypt#, :message => ' must match the confirmation password'
validates_numericality_of :home_zoom, :only_integer => true, :allow_nil => true
validates_inclusion_of :preferred_editor, :in => Editors::ALL_EDITORS, :allow_nil => true
+ after_initialize :set_creation_time
before_save :encrypt_password
file_column :image, :magick => { :geometry => "100x100>" }
- def after_initialize
- self.creation_time = Time.now.getutc unless self.attribute_present?(:creation_time)
- end
-
- def encrypt_password
- if pass_crypt_confirmation
- self.pass_salt = OSM::make_token(8)
- self.pass_crypt = OSM::encrypt_password(pass_crypt, pass_salt)
- end
- end
-
def self.authenticate(options)
if options[:username] and options[:password]
- user = find(:first, :conditions => ["email = ? OR display_name = ?", options[:username], options[:username]])
+ user = where("email = ? OR display_name = ?", options[:username], options[:username]).first
user = nil if user and user.pass_crypt != OSM::encrypt_password(options[:password], user.pass_salt)
elsif options[:token]
- token = UserToken.find(:first, :include => :user, :conditions => ["user_tokens.token = ?", options[:token]])
+ token = UserToken.where(:token => options[:token]).preload(:user).first
user = token.user if token
end
end
def preferred_language
- languages.find { |l| Language.find(:first, :conditions => { :code => l }) }
+ languages.find { |l| Language.exists?(:code => l) }
end
def preferred_language_from(array)
gc = OSM::GreatCircle.new(self.home_lat, self.home_lon)
bounds = gc.bounds(radius)
sql_for_distance = gc.sql_for_distance("home_lat", "home_lon")
- nearby = User.find(:all,
- :conditions => ["id != ? AND status IN (\'active\', \'confirmed\') AND data_public = ? AND #{sql_for_distance} <= ?", id, true, radius],
- :order => sql_for_distance, :limit => num)
+ 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
nearby = []
end
##
# return a spam score for a user
def spam_score
- changeset_score = self.changesets.find(:all, :limit => 10).length * 50
- trace_score = self.traces.find(:all, :limit => 10).length * 50
+ changeset_score = self.changesets.limit(10).length * 50
+ trace_score = self.traces.limit(10).length * 50
diary_entry_score = self.diary_entries.inject(0) { |s,e| s += OSM.spam_score(e.body) }
diary_comment_score = self.diary_comments.inject(0) { |s,e| s += OSM.spam_score(e.body) }
def access_token(application_key)
return ClientApplication.find_by_key(application_key).access_token_for_user(self)
end
+
+private
+
+ def set_creation_time
+ self.creation_time = Time.now.getutc unless self.attribute_present?(:creation_time)
+ end
+
+ def encrypt_password
+ if pass_crypt_confirmation
+ self.pass_salt = OSM::make_token(8)
+ self.pass_crypt = OSM::encrypt_password(pass_crypt, pass_salt)
+ end
+ end
end