X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/5b33f3f8e31c62bc3e5db1d5b120533c3afdde68..5e7abf67fbda21735d12660a537a96e39bb87107:/app/models/user.rb diff --git a/app/models/user.rb b/app/models/user.rb index 3ce48e7cd..c063b7c34 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,48 @@ +# == 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 +# +# 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)) +# + class User < ActiveRecord::Base require "xml/libxml" @@ -28,6 +73,11 @@ class User < ActiveRecord::Base has_many :roles, :class_name => "UserRole" + has_many :issues, :class_name => "Issue", :foreign_key => :reported_user_id + has_many :issue_comments + + has_many :reports + scope :visible, -> { where(:status => %w[pending active confirmed]) } scope :active, -> { where(:status => %w[active confirmed]) } scope :identifiable, -> { where(:data_public => true) } @@ -216,8 +266,8 @@ class User < ActiveRecord::Base 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 @@ -232,9 +282,7 @@ class User < ActiveRecord::Base ## # 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 ##