+ def make_friend
+ if params[:display_name]
+ name = params[:display_name]
+ new_friend = User.find_by_display_name(name, :conditions => {:visible => true})
+ friend = Friend.new
+ friend.user_id = @user.id
+ friend.friend_user_id = new_friend.id
+ unless @user.is_friends_with?(new_friend)
+ if friend.save
+ flash[:notice] = t 'user.make_friend.success', :name => name
+ Notifier.deliver_friend_notification(friend)
+ else
+ friend.add_error(t('user.make_friend.failed', :name => name))
+ end
+ else
+ flash[:warning] = t 'user.make_friend.already_a_friend', :name => name
+ end
+
+ if params[:referer]
+ redirect_to params[:referer]
+ else
+ redirect_to :controller => 'user', :action => 'view'
+ end
+ end
+ end
+
+ def remove_friend
+ 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[:error] = t 'user.remove_friend.not_a_friend', :name => friend.display_name
+ end
+
+ if params[:referer]
+ redirect_to params[:referer]
+ else
+ redirect_to :controller => 'user', :action => 'view'
+ end
+ 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