X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/59102ea017825ceafdfe603cc43f9dd45e5c0ab6..117b8d1a6ba88251354ca7e31e9c514c3de0daec:/app/controllers/user_controller.rb diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 93cc3a6a5..ca84d7701 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -10,6 +10,9 @@ class UserController < ApplicationController before_filter :check_api_readable, :only => [:api_details, :api_gpx_files] before_filter :require_allow_read_prefs, :only => [:api_details] before_filter :require_allow_read_gpx, :only => [:api_gpx_files] + before_filter :require_cookies, :only => [:login, :confirm] + before_filter :require_administrator, :only => [:activate, :deactivate, :hide, :unhide, :delete] + before_filter :lookup_this_user, :only => [:activate, :deactivate, :hide, :unhide, :delete] filter_parameter_logging :password, :pass_crypt, :pass_crypt_confirmation @@ -62,10 +65,10 @@ class UserController < ApplicationController set_locale if params[:user][:email] == @user.new_email - flash[:notice] = t 'user.account.flash update success confirm needed' + flash.now[:notice] = t 'user.account.flash update success confirm needed' Notifier.deliver_email_confirm(@user, @user.tokens.create) else - flash[:notice] = t 'user.account.flash update success' + flash.now[:notice] = t 'user.account.flash update success' end end end @@ -98,9 +101,9 @@ class UserController < ApplicationController if user token = user.tokens.create Notifier.deliver_lost_password(user, token) - @notice = t 'user.lost_password.notice email on way' + flash.now[:notice] = t 'user.lost_password.notice email on way' else - @notice = t 'user.lost_password.notice email cannot find' + flash.now[:error] = t 'user.lost_password.notice email cannot find' end end end @@ -127,7 +130,7 @@ class UserController < ApplicationController end end else - flash[:notice] = t 'user.reset_password.flash token bad' + flash[:error] = t 'user.reset_password.flash token bad' redirect_to :action => 'lost_password' end end @@ -149,15 +152,15 @@ class UserController < ApplicationController if user session[:user] = user.id elsif User.authenticate(:username => email_or_display_name, :password => pass, :inactive => true) - @notice = t 'user.login.account not active' + flash.now[:error] = t 'user.login.account not active' else - @notice = t 'user.login.auth failure' + flash.now[:error] = t 'user.login.auth failure' end end if session[:user] # The user is logged in, if the referer param exists, redirect them to that - # unless they've also got a block on them, in which case redirect them to + # unless they've also got a block on them, in which case redirect them to # the block so they can clear it. user = User.find(session[:user]) block = user.blocked_on_view @@ -208,7 +211,7 @@ class UserController < ApplicationController redirect_to :action => 'account', :display_name => @user.display_name end else - @notice = t 'user.confirm.failure' + flash.now[:error] = t 'user.confirm.failure' end end end @@ -228,7 +231,7 @@ class UserController < ApplicationController session[:user] = @user.id redirect_to :action => 'account', :display_name => @user.display_name else - @notice = t 'user.confirm_email.failure' + flash.now[:error] = t 'user.confirm_email.failure' end end end @@ -254,9 +257,10 @@ class UserController < ApplicationController end def view - @this_user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true}) + @this_user = User.find_by_display_name(params[:display_name]) - if @this_user + if @this_user and + (@this_user.visible? or (@user and @user.administrator?)) @title = @this_user.display_name else @title = t 'user.no_such_user.title' @@ -266,7 +270,7 @@ class UserController < ApplicationController end def make_friend - if params[:display_name] + if params[:display_name] name = params[:display_name] new_friend = User.find_by_display_name(name, :conditions => {:visible => true}) friend = Friend.new @@ -280,7 +284,7 @@ class UserController < ApplicationController friend.add_error(t('user.make_friend.failed', :name => name)) end else - flash[:notice] = t 'user.make_friend.already_a_friend', :name => name + flash[:warning] = t 'user.make_friend.already_a_friend', :name => name end redirect_to :controller => 'user', :action => 'view' @@ -288,17 +292,70 @@ class UserController < ApplicationController end def remove_friend - if params[:display_name] + if params[:display_name] name = params[:display_name] friend = User.find_by_display_name(name, :conditions => {:visible => true}) if @user.is_friends_with?(friend) Friend.delete_all "user_id = #{@user.id} AND friend_user_id = #{friend.id}" flash[:notice] = t 'user.remove_friend.success', :name => friend.display_name else - flash[:notice] = t 'user.remove_friend.not_a_friend', :name => friend.display_name + flash[:error] = t 'user.remove_friend.not_a_friend', :name => friend.display_name end redirect_to :controller => 'user', :action => 'view' end end + + ## + # activate a user, allowing them to log in + def activate + @this_user.update_attributes(:active => true) + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] + end + + ## + # deactivate a user, preventing them from logging in + def deactivate + @this_user.update_attributes(:active => false) + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] + end + + ## + # hide a user, marking them as logically deleted + def hide + @this_user.update_attributes(:visible => false) + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] + end + + ## + # unhide a user, clearing the logically deleted flag + def unhide + @this_user.update_attributes(:visible => true) + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] + end + + ## + # delete a user, marking them as deleted and removing personal data + def delete + @this_user.delete + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] + end +private + ## + # require that the user is a administrator, or fill out a helpful error message + # and return them to the user page. + def require_administrator + unless @user.administrator? + flash[:error] = t('user.filter.not_an_administrator') + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] + end + end + + ## + # ensure that there is a "this_user" instance variable + def lookup_this_user + @this_user = User.find_by_display_name(params[:display_name]) + rescue ActiveRecord::RecordNotFound + redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] unless @this_user + end end