X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/937b576bf55eae69ae8584bff049ae122ded57e5..406b46e49b786fab879286d77735b2a16c1cfcc5:/app/models/user.rb diff --git a/app/models/user.rb b/app/models/user.rb index a76d45710..31b0f27a0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,7 +7,7 @@ class User < ActiveRecord::Base has_many :messages, :foreign_key => :to_user_id, :conditions => { :to_user_visible => true }, :order => 'sent_on DESC' has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => { :to_user_visible => true, :message_read => false }, :order => 'sent_on DESC' has_many :sent_messages, :class_name => "Message", :foreign_key => :from_user_id, :conditions => { :from_user_visible => true }, :order => 'sent_on DESC' - has_many :friends, :include => :befriendee, :conditions => ["users.visible = ?", true] + has_many :friends, :include => :befriendee, :conditions => "users.status IN ('active', 'confirmed')" has_many :tokens, :class_name => "UserToken" has_many :preferences, :class_name => "UserPreference" has_many :changesets @@ -56,8 +56,11 @@ class User < ActiveRecord::Base user = token.user if token end - if user - user = nil unless user.visible? and (user.active? or options[:inactive]) + if user and + ( user.status == "deleted" or + ( user.status == "pending" and not options[:pending] ) or + ( user.status == "suspended" and not options[:suspended] ) ) + user = nil end token.update_attribute(:expiry, 1.week.from_now) if token and user @@ -107,7 +110,8 @@ class User < ActiveRecord::Base bounds = gc.bounds(radius) sql_for_distance = gc.sql_for_distance("home_lat", "home_lon") nearby = User.find(:all, - :conditions => ["id != ? AND visible = ? AND data_public = ? AND #{sql_for_distance} <= ?", id, true, true, radius], :order => sql_for_distance, :limit => num) + :conditions => ["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 @@ -129,6 +133,18 @@ class User < ActiveRecord::Base return false end + ## + # returns true if a user is visible + def visible? + ["pending","active","confirmed"].include? self.status + end + + ## + # returns true if a user is active + def active? + ["active","confirmed"].include? self.status + end + ## # returns true if the user has the moderator role, false otherwise def moderator? @@ -154,8 +170,9 @@ class User < ActiveRecord::Base active_blocks.detect { |b| b.needs_view? } end + ## + # delete a user - leave the account but purge most personal data def delete - self.active = false self.display_name = "user_#{self.id}" self.description = "" self.home_lat = nil @@ -163,7 +180,7 @@ class User < ActiveRecord::Base self.image = nil self.email_valid = false self.new_email = nil - self.visible = false + self.status = "deleted" self.save end @@ -175,12 +192,12 @@ class User < ActiveRecord::Base 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) } - score = 0 + score = OSM.spam_score(self.description) * 2 score += diary_entry_score / self.diary_entries.length if self.diary_entries.length > 0 score += diary_comment_score / self.diary_comments.length if self.diary_comments.length > 0 score -= changeset_score score -= trace_score - return score + return score.to_i end end