+# == Schema Information
+#
+# Table name: users
+#
+# email :string not null
+# id :integer not null, primary key
+# pass_crypt :string not null
+# creation_time :datetime not null
+# display_name :string default(""), not null
+# data_public :boolean default(FALSE), not null
+# description :text default(""), not null
+# home_lat :float
+# home_lon :float
+# home_zoom :integer default(3)
+# nearby :integer default(50)
+# pass_salt :string
+# image_file_name :text
+# email_valid :boolean default(FALSE), not null
+# new_email :string
+# creation_ip :string
+# languages :string
+# status :enum default("pending"), not null
+# terms_agreed :datetime
+# consider_pd :boolean default(FALSE), not null
+# auth_uid :string
+# preferred_editor :string
+# terms_seen :boolean default(FALSE), not null
+# description_format :enum default("markdown"), not null
+# image_fingerprint :string
+# changesets_count :integer default(0), not null
+# traces_count :integer default(0), not null
+# diary_entries_count :integer default(0), not null
+# image_use_gravatar :boolean default(FALSE), not null
+# image_content_type :string
+# auth_provider :string
+# home_tile :integer
+#
+# Indexes
+#
+# users_auth_idx (auth_provider,auth_uid) UNIQUE
+# users_display_name_idx (display_name) UNIQUE
+# users_display_name_lower_idx (lower((display_name)::text))
+# users_email_idx (email) UNIQUE
+# users_email_lower_idx (lower((email)::text))
+# users_home_idx (home_tile)
+#
+
class User < ActiveRecord::Base
require "xml/libxml"
after_initialize :set_defaults
before_save :encrypt_password
+ before_save :update_tile
after_save :spam_check
def self.authenticate(options)
def spam_score
changeset_score = changesets.size * 50
trace_score = traces.size * 50
- diary_entry_score = diary_entries.inject(0) { |acc, elem| acc + elem.body.spam_score }
- diary_comment_score = diary_comments.inject(0) { |acc, elem| acc + elem.body.spam_score }
+ diary_entry_score = diary_entries.visible.inject(0) { |acc, elem| acc + elem.body.spam_score }
+ diary_comment_score = diary_comments.visible.inject(0) { |acc, elem| acc + elem.body.spam_score }
score = description.spam_score / 4.0
score += diary_entries.where("created_at > ?", 1.day.ago).count * 10
##
# perform a spam check on a user
def spam_check
- if status == "active" && spam_score > SPAM_THRESHOLD
- update(:status => "suspended")
- end
+ update(:status => "suspended") if status == "active" && spam_score > SPAM_THRESHOLD
end
##
self.pass_crypt_confirmation = nil
end
end
+
+ def update_tile
+ self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_lat && home_lon
+ end
end