From 34189cf761a871f366775843da580121b39b4e25 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 24 Aug 2008 16:53:42 +0000 Subject: [PATCH] Add basic support for logically deleting a user. --- app/controllers/application.rb | 2 +- app/controllers/diary_entry_controller.rb | 7 ++++--- app/controllers/trace_controller.rb | 2 +- app/controllers/user_controller.rb | 12 +++++++----- app/models/friend.rb | 4 ++-- app/models/user.rb | 6 +++--- db/migrate/015_add_user_visible.rb | 10 ++++++++++ 7 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 db/migrate/015_add_user_visible.rb diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 918e4b617..ce13a6aa3 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base def authorize_web if session[:user] - @user = User.find(session[:user]) + @user = User.find(session[:user], :conditions => "visible = 1") elsif session[:token] @user = User.authenticate(:token => session[:token]) session[:user] = @user.id diff --git a/app/controllers/diary_entry_controller.rb b/app/controllers/diary_entry_controller.rb index 21c817414..b425ef4b6 100644 --- a/app/controllers/diary_entry_controller.rb +++ b/app/controllers/diary_entry_controller.rb @@ -54,7 +54,8 @@ class DiaryEntryController < ApplicationController def list if params[:display_name] - @this_user = User.find_by_display_name(params[:display_name]) + @this_user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") + if @this_user @title = @this_user.display_name + "'s diary" @entry_pages, @entries = paginate(:diary_entries, @@ -76,7 +77,7 @@ class DiaryEntryController < ApplicationController def rss if params[:display_name] - user = User.find_by_display_name(params[:display_name]) + user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") if user @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20) @@ -99,7 +100,7 @@ class DiaryEntryController < ApplicationController end def view - user = User.find_by_display_name(params[:display_name]) + user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") if user @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]]) diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 41ff34303..899df05df 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -12,7 +12,7 @@ class TraceController < ApplicationController # from display name, pick up user id if one user's traces only display_name = params[:display_name] if target_user.nil? and !display_name.blank? - target_user = User.find(:first, :conditions => [ "display_name = ?", display_name]) + target_user = User.find(:first, :conditions => [ "visible = 1 and display_name = ?", display_name]) end # set title diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 2bb4eb577..d88de5ff3 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -13,6 +13,7 @@ class UserController < ApplicationController @title = 'create account' @user = User.new(params[:user]) + @user.visible = true @user.data_public = true @user.description = "" if @user.description.nil? @@ -75,7 +76,8 @@ class UserController < ApplicationController def lost_password @title = 'lost password' if params[:user] and params[:user][:email] - user = User.find_by_email(params[:user][:email]) + user = User.find_by_email(params[:user][:email], :conditions => "visible = 1") + if user token = user.tokens.create Notifier.deliver_lost_password(user, token) @@ -214,7 +216,7 @@ class UserController < ApplicationController end def view - @this_user = User.find_by_display_name(params[:display_name]) + @this_user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") if @this_user @title = @this_user.display_name @@ -227,7 +229,7 @@ class UserController < ApplicationController def make_friend if params[:display_name] name = params[:display_name] - new_friend = User.find_by_display_name(name) + new_friend = User.find_by_display_name(name, :conditions => "visible = 1") friend = Friend.new friend.user_id = @user.id friend.friend_user_id = new_friend.id @@ -249,12 +251,12 @@ class UserController < ApplicationController def remove_friend if params[:display_name] name = params[:display_name] - friend = User.find_by_display_name(name) + friend = User.find_by_display_name(name, :conditions => "visible = 1") if @user.is_friends_with?(friend) Friend.delete_all "user_id = #{@user.id} AND friend_user_id = #{friend.id}" flash[:notice] = "#{friend.display_name} was removed from your friends." else - flash[:notice] = "#{friend.display_name} was not already one of your friends." + flash[:notice] = "#{friend.display_name} is not one of your friends." end redirect_to :controller => 'user', :action => 'view' diff --git a/app/models/friend.rb b/app/models/friend.rb index 242b74251..d740a711c 100644 --- a/app/models/friend.rb +++ b/app/models/friend.rb @@ -1,4 +1,4 @@ class Friend < ActiveRecord::Base - belongs_to :user - + belongs_to :befriender, :class_name => "User", :foreign_key => :user_id + belongs_to :befriendee, :class_name => "User", :foreign_key => :friend_user_id end diff --git a/app/models/user.rb b/app/models/user.rb index 61c76898a..9b5bfd595 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,7 +6,7 @@ class User < ActiveRecord::Base has_many :messages, :foreign_key => :to_user_id, :order => 'sent_on DESC' has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => "message_read = 0", :order => 'sent_on DESC' has_many :sent_messages, :class_name => "Message", :foreign_key => :from_user_id, :order => 'sent_on DESC' - has_many :friends + has_many :friends, :include => :befriendee, :conditions => "users.visible = 1" has_many :tokens, :class_name => "UserToken" has_many :preferences, :class_name => "UserPreference" @@ -48,7 +48,7 @@ class User < ActiveRecord::Base end if user - user = nil unless user.active? or options[:inactive] + user = nil unless user.visible? and (user.active? or options[:inactive]) end token.update_attribute(:expiry, 1.week.from_now) if token and user @@ -80,7 +80,7 @@ class User < ActiveRecord::Base if self.home_lon and self.home_lat gc = OSM::GreatCircle.new(self.home_lat, self.home_lon) bounds = gc.bounds(radius) - nearby = User.find(:all, :conditions => "home_lat between #{bounds[:minlat]} and #{bounds[:maxlat]} and home_lon between #{bounds[:minlon]} and #{bounds[:maxlon]} and data_public = 1 and id != #{self.id}") + nearby = User.find(:all, :conditions => "visible = 1 and home_lat between #{bounds[:minlat]} and #{bounds[:maxlat]} and home_lon between #{bounds[:minlon]} and #{bounds[:maxlon]} and data_public = 1 and id != #{self.id}") nearby.delete_if { |u| gc.distance(u.home_lat, u.home_lon) > radius } nearby.sort! { |u1,u2| gc.distance(u1.home_lat, u1.home_lon) <=> gc.distance(u2.home_lat, u2.home_lon) } else diff --git a/db/migrate/015_add_user_visible.rb b/db/migrate/015_add_user_visible.rb new file mode 100644 index 000000000..3b14aad6b --- /dev/null +++ b/db/migrate/015_add_user_visible.rb @@ -0,0 +1,10 @@ +class AddUserVisible < ActiveRecord::Migration + def self.up + add_column "users", "visible", :boolean + User.update_all("visible = 1") + end + + def self.down + remove_column "users", "visible" + end +end -- 2.43.2